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

文字列フィールド

Zilliz Cloudクラスターでは、VARCHARは可変長文字列を格納するために使用されるデータ型です。シングルバイト文字とマルチバイト文字の両方の文字列を格納でき、最大長は60,535文字です。VARCHARフィールドを定義する場合、最大長パラメータmax_lengthも指定する必要があります。VARCHAR文字列型は、テキストデータを効率的かつ柔軟に格納および管理する方法を提供するため、さまざまな長さの文字列を処理するアプリケーションに最適です。

VARCHARフィールドを追加

コレクションを作成する際に、Zilliz Cloudクラスターで文字列データを使用するには、VARCHARフィールドを定義してください。このプロセスには以下が含まれます:

  1. datatypeをサポートされている文字列データ型、つまりVARCHARに設定します。

  2. 使用して文字列型の最大長を指定、max_lengthパラメーター、60,535文字を超えることはできません。

from pymilvus import MilvusClient, DataType

client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")

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

schema.add_field(field_name="varchar_field1", datatype=DataType.VARCHAR, max_length=100)
schema.add_field(field_name="varchar_field2", datatype=DataType.VARCHAR, max_length=200)
schema.add_field(field_name="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(field_name="embedding", datatype=DataType.FLOAT_VECTOR, dim=3)

この例では、2つのVARCHARフィールド、varchar_field 1varchar_field 2を追加します。最大長はそれぞれ100文字と200文字に設定されています。データの特性に基づいてmax_lengthを設定することをお勧めします。これにより、過剰なスペース割り当てを回避しながら最長のデータを収容できます。さらに、プライマリフィールドpkとベクトルフィールド埋め込みを追加しました。

📘ノート

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

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

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

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

index_params = client.prepare_index_params()

index_params.add_index(
field_name="varchar_field1",
index_type="AUTOINDEX",
index_name="varchar_index"
)

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

この例では、VarCharフィールドのインデックスを作成するために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 = [
{"varchar_field1": "Product A", "varchar_field2": "High quality product", "pk": 1, "embedding": [0.1, 0.2, 0.3]},
{"varchar_field1": "Product B", "varchar_field2": "Affordable price", "pk": 2, "embedding": [0.4, 0.5, 0.6]},
{"varchar_field1": "Product C", "varchar_field2": "Best seller", "pk": 3, "embedding": [0.7, 0.8, 0.9]},
]

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

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

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

検索とクエリ

文字列フィールドを追加した後、検索やクエリ操作でフィルタリングに使用して、より正確な検索結果を得ることができます。

クエリのフィルター

文字列フィールドを追加した後、クエリでこれらのフィールドを使用して結果をフィルタリングできます。たとえば、varchar_field 1"Product A"に等しいすべてのエンティティをクエリできます。

filter = 'varchar_field1 == "Product A"'

res = client.query(
collection_name="my_varchar_collection",
filter=filter,
output_fields=["varchar_field1", "varchar_field2"]
)

print(res)

# Output
# data: ["{'varchar_field1': 'Product A', 'varchar_field2': 'High quality product', 'pk': 1}"]

このクエリ式は、一致するすべてのエンティティを返し、そのvarchar_field 1およびvarchar_field 2フィールドを出力します。フィルタークエリの詳細については、「Filtering」を参照してください。

文字列フィルタリングによるベクトル検索

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

filter = 'varchar_field1 == "Product A"'

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

print(res)

# Output
# data: ["[{'id': 1, 'distance': -0.06000000238418579, 'entity': {'varchar_field1': 'Product A', 'varchar_field2': 'High quality product'}}]"]

この例では、まずクエリベクトルを定義し、検索中にvarchar_field 1=="Product A"というフィルター条件を追加します。これにより、検索結果がクエリベクトルに似ているだけでなく、指定された文字列フィルター条件にも一致することが保証されます。詳細については、「フィルタリング」を参照してください。