メインコンテンツまでスキップ
バージョン: User Guides (BYOC)

数字フィールド

数値フィールドは、ベクトル以外の数値データをZilliz Cloudクラスターに格納するために使用されます。これらのフィールドは通常、年齢、価格などのベクトルデータに関連する追加情報を記述するために使用されます。このデータを使用することで、ベクトルをより正確に記述し、データフィルタリングや条件付きクエリの効率を向上させることができます。

数字フィールドは、多くのシナリオで特に役立ちます。たとえば、電子商取引の推奨事項では、価格フィールドをフィルタリングに使用できます。ユーザープロファイル分析では、年齢層が結果を絞り込むのに役立ちます。ベクトルデータと組み合わせることで、数字フィールドは、システムが類似性検索を提供しながら、より正確にパーソナライズされたユーザーニーズを満たすのに役立ちます。

サポートされている数値フィールドタイプ

Zilliz Cloudは、さまざまなデータストレージとクエリニーズに対応するために、さまざまな数値フィールドタイプをサポートしています。

フィールドタイプ

説明する

BOOL

バイナリ状態を記述するために適した、trueまたはfalseを格納するためのブール型。

INT 8

小さな範囲の整数データを格納するのに適した8ビット整数。

INT 16

中程度の整数データ用の16ビット整数。

INT 32

32ビット整数は、製品数量やユーザーIDなどの一般的な整数データストレージに最適です。

INT 64

タイムスタンプや識別子のような大きな範囲のデータを格納するのに適した64ビット整数。

フロート

定格や温度などの一般的な精度が必要なデータ用の32ビット浮動小数点数。

ダブル

財務情報や科学計算などの高精度データ用の64ビット倍精度浮動小数点数。

数値フィールドを追加

Zilliz Cloudクラスターで数値フィールドを使用するには、コレクションスキーマで関連するフィールドを定義し、datatypeBOOLINT8などのサポートされているタイプに設定します。サポートされている数値フィールドタイプの完全なリストについては、「サポートされている数値フィールドタイプ」を参照してください。

次の例は、数値フィールドagepriceを含むスキーマを定義する方法を示しています。

from pymilvus import MilvusClient, DataType

client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")

schema = client.create_schema(
auto_id=False,
enable_dynamic_fields=True,
)

schema.add_field(field_name="age", datatype=DataType.INT64)
schema.add_field(field_name="price", datatype=DataType.FLOAT)
schema.add_field(field_name="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="embedding", datatype=DataType.FLOAT_VECTOR, dim=3)
📘ノート

コレクションを作成する際には、プライマリフィールドとベクトルフィールドは必須です。プライマリフィールドは各エンティティを一意に識別し、ベクトルフィールドは類似検索に重要です。詳細については、「プライマリフィールドとAutoID」、「密集ベクトル」、「バイナリベクトル」、または「疎ベクトル」を参照してください。

インデックスパラメータの設定{#}

数値フィールドのインデックスパラメータの設定はオプションですが、検索効率を大幅に向上させることができます。

以下の例では、AUTOINDEXageフィールドに対して作成し、Zilliz Cloudを使用して、データ型に基づいて適切なインデックスを自動的に作成します。詳細については、「AUTOINDEXの説明」を参照してください。

index_params = client.prepare_index_params()

index_params.add_index(
field_name="age",
index_type="AUTOINDEX",
index_name="inverted_index"
)

<ターゲットを含める="zilliz">

この例では、AUTOINDEXを使用して数値フィールドのインデックスを作成します。

</include>

# Add vector index
index_params.add_index(
field_name="embedding",
index_type="AUTOINDEX", # Use automatic indexing to simplify complex index settings
metric_type="COSINE" # Specify similarity metric type, options include L2, COSINE, or IP
)

コレクションを作成

スキーマとインデックスが定義されたら、数値フィールドを含むコレクションを作成できます。

# Create Collection
client.create_collection(
collection_name="your_collection_name",
schema=schema,
index_params=index_params
)

データの挿入

コレクションを作成した後、数値フィールドを含むデータを挿入できます。

data = [
{"age": 25, "price": 99.99, "pk": 1, "embedding": [0.1, 0.2, 0.3]},
{"age": 30, "price": 149.50, "pk": 2, "embedding": [0.4, 0.5, 0.6]},
{"age": 35, "price": 199.99, "pk": 3, "embedding": [0.7, 0.8, 0.9]},
]

client.insert(
collection_name="my_scalar_collection",
data=data
)

この例では、年齢価格pk(プライマリフィールド)、およびベクトル表現(埋め込み)を含むデータを挿入します。挿入されたデータがスキーマで定義されたフィールドと一致することを確認するために、エラーを避けるために事前にデータ型を確認することをお勧めします。

スキーマを定義する際にenable_dynamic_fields=Trueを設定した場合、Zilliz Cloudでは、事前に定義されていない数値フィールドを挿入することができます。ただし、これによりクエリや管理が複雑になり、パフォーマンスに影響を与える可能性があることに注意してください。詳細については、「ダイナミックフィールド」を参照してください。

検索とクエリ

数値フィールドを追加した後、それらを使用して検索およびクエリ操作でフィルタリングし、より正確な検索結果を得ることができます。

クエリのフィルター

数値フィールドを追加した後、クエリのフィルタリングに使用できます。例えば、ageが30歳から40歳の間のすべてのエンティティをクエリできます。

filter = "30 <= age <= 40"

res = client.query(
collection_name="my_scalar_collection",
filter=filter,
output_fields=["age","price"]
)

print(res)

# Output
# data: ["{'age': 30, 'price': np.float32(149.5), 'pk': 2}", "{'age': 35, 'price': np.float32(199.99), 'pk': 3}"]

このクエリ式は、一致するすべてのエンティティを返し、その年齢価格フィールドを出力します。フィルタークエリの詳細については、「フィルタリング」を参照してください。

数値フィルタリングによるベクトル検索

基本的な数値フィールドフィルタリングに加えて、ベクトル類似検索と数値フィールドフィルタを組み合わせることができます。例えば、次のコードはベクトル検索に数値フィールドフィルタを追加する方法を示しています。

filter = "25 <= age <= 35"

res = client.search(
collection_name="my_scalar_collection",
data=[[0.3, -0.6, 0.1]],
limit=5,
search_params={"params": {"nprobe": 10}},
output_fields=["age","price"],
filter=filter
)

print(res)

# Output
# data: ["[{'id': 1, 'distance': -0.06000000238418579, 'entity': {'age': 25, 'price': 99.98999786376953}}, {'id': 2, 'distance': -0.12000000476837158, 'entity': {'age': 30, 'price': 149.5}}, {'id': 3, 'distance': -0.18000000715255737, 'entity': {'age': 35, 'price': 199.99000549316406}}]"]

この例では、まずクエリベクトルを定義し、検索中に25<=age<=35というフィルタ条件を追加します。これにより、検索結果がクエリベクトルに似ているだけでなく、指定された年齢範囲を満たすことが保証されます。詳細については、「フィルタリング」を参照してください。