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

ベクトルフィールドのインデックス

このガイドでは、コレクション内のベクトルフィールドにインデックスを作成および管理する基本操作を説明します。

概要

Zilliz Cloudは、インデックスファイルに保存されたメタデータを活用して、データを専門的な構造に整理し、検索またはクエリ時に要求された情報を迅速に取得できるようにします。

Zilliz Cloudは効率的な類似性検索を可能にするためにAUTOINDEXを利用しています。また、ベクトル埋め込み間の距離を測定するための以下のメトリックタイプを提供しています:コサイン類似度(COSINE)、ユークリッド距離(L2)、内積(IP)、JACCARD、およびHAMMING。ベクトルフィールドタイプとメトリックの詳細については、メトリックタイプおよびスキーマの説明を参照してください。

頻繁にアクセスされるベクトルフィールドとスカラーフィールドの両方に対してインデックスを作成することをお勧めします。コレクションに複数のベクトルフィールドが含まれている場合、各ベクトルフィールドごとに個別にインデックスを作成できます。

事前準備

コレクションの作成で説明されているように、コレクション作成リクエストにおいて以下の条件のいずれかが指定されている場合、Zilliz Cloudはコレクションを作成する際に自動的にインデックスを生成しメモリにロードします。

  • ベクトルフィールドの次元数とメトリックタイプ、または

  • スキーマとインデックスパラメータ。

以下のコードスニペットでは、既存のコードを再利用してZilliz Cloudに接続し、インデックスパラメータを指定せずにコレクションを作成します。この場合、コレクションにはインデックスが存在せず、アンロードされたままになります。

from pymilvus import MilvusClient, DataType

CLUSTER_ENDPOINT = "YOUR_CLUSTER_ENDPOINT"
TOKEN = "YOUR_CLUSTER_TOKEN"

# 1. Milvusクライアントを設定
client = MilvusClient(
uri=CLUSTER_ENDPOINT,
token=TOKEN
)

# 2. スキーマを作成
# 2.1. スキーマを作成
schema = MilvusClient.create_schema(
auto_id=False,
enable_dynamic_field=True,
)

# 2.2. スキーマにフィールドを追加
schema.add_field(field_name="id", datatype=DataType.INT64, is_primary=True)
# dim値は1より大きい整数である必要があります
schema.add_field(field_name="vector", datatype=DataType.FLOAT_VECTOR, dim=5)

# 3. コレクションを作成
client.create_collection(
collection_name="customized_setup",
schema=schema,
)

コレクションにインデックスを作成

コレクションに対してインデックスを作成するには、インデックスパラメータを設定してcreate_index()を呼び出す必要があります。

# 4. インデックスを設定
# 4.1. インデックスパラメータを設定
index_params = MilvusClient.prepare_index_params()

# 4.2. ベクトルフィールドにインデックスを追加。
index_params.add_index(
field_name="vector",
metric_type="COSINE",
index_type="AUTOINDEX",
index_name="vector_index"
)

# 4.4. インデックスファイルを作成
client.create_index(
collection_name="customized_setup",
index_params=index_params
)

# 5. インデックスを説明
res = client.list_indexes(
collection_name="customized_setup"
)

提供されたコードスニペットでは、ベクトルフィールドにインデックスを確立して、インデックスタイプをAUTOINDEX、メトリックタイプをCOSINEに設定しています。さらに、スカラーフィールドにもインデックスタイプAUTOINDEXでインデックスが作成されています。インデックスタイプとメトリックタイプの詳細については、AUTOINDEXの説明およびメトリックタイプを参照してください。

📘注意

現在、コレクション内の各フィールドに対して1つのインデックスファイルのみを作成できます。

インデックスの詳細を確認

インデックスを作成した後、その詳細を確認できます。

# 5. インデックスを説明
res = client.list_indexes(
collection_name="customized_setup"
)

print(res)

# 出力
#
# [
# "vector_index"
# ]

res = client.describe_index(
collection_name="customized_setup",
index_name="vector_index"
)

print(res)

# 出力
#
# {
# "index_type": "AUTOINDEX",
# "metric_type": "COSINE",
# "field_name": "vector",
# "index_name": "vector_index"
# }

特定のフィールドに作成されたインデックスファイルを確認し、このインデックスファイルを使用してインデックス化された行数の統計情報を収集できます。

インデックスの削除

必要なくなった場合、簡単にインデックスを削除できます。

📘注意

インデックスを削除する前に、最初に解放されていることを確認してください。

# 6. インデックスを削除
client.drop_index(
collection_name="customized_setup",
index_name="vector_index"
)

高度な機能

さらに、ご興味をお持ちになる可能性のあるいくつかの高度なベクトルインデックス機能があります。

インデックス構築レベルの調整 [READ MORE]

Zilliz Cloudは`buildlevel`というパラメータを導入しており、これによりユーザーは対象コレクションのストレージ容量と検索再現率のバランスを取ることができます。使用頻度が低いまたはより多くのストレージ容量が必要なコレクションでは、ストレージ容量の大幅な増加と引き換えにわずかな再現率の低下を許容できます。逆も同様です。このガイドでは、使用可能なオプションとコレクション用にインデックスを構築するためにそれらを使用する方法について説明します。