BIN_FLAT
BIN_FLATインデックスは、FLATインデックスをバイナリ埋め込み専用に改良したものである。ベクトル類似性検索において、比較的小規模な100万個規模のデータセットに対して完璧な精度が要求される用途に優れています。BIN_FLATは、網羅的な検索手法-すべてのターゲット入力をデータセット内のすべてのベクトルと比較する-を採用することで、正確な結果を保証します。この精度の高さにより、再現率が100%に満たないような他のインデックスの性能を評価するための理想的なベンチマークとなっていますが、その徹底的なアプローチにより、大規模データに対して最も遅いオプションにもなっています。
インデックスの構築
MilvusのベクトルフィールドにBIN_FLAT インデックスを構築するには、add_index() メソッドを使用し、index_type とmetric_type インデックスのパラメータを指定します。
from pymilvus import MilvusClient
# Prepare index building params
index_params = MilvusClient.prepare_index_params()
index_params.add_index(
field_name="your_binary_vector_field_name", # Name of the vector field to be indexed
index_type="BIN_FLAT", # Type of the index to create
index_name="vector_index", # Name of the index to create
metric_type="HAMMING", # Metric type used to measure similarity
params={} # No additional parameters required for BIN_FLAT
)
この設定では
index_type:構築するインデックスのタイプ。この例ではBIN_FLATとします。metric_type:ベクトル間の距離の計算方法。バイナリ埋め込みでサポートされている値は、HAMMING(デフォルト)およびJACCARDです。詳細については、メトリック・タイプを参照してください。params:BIN_FLAT インデックスには追加のパラメータは必要ありません。
インデックス・パラメータを構成したら、create_index() メソッドを直接使用するか、create_collection メソッドでインデックス・パラメータを渡してインデックスを作成できます。詳細は、コレクションの作成 を参照してください。
インデックスでの検索
インデックスが構築され、エンティティが挿入されると、インデックスで類似検索を実行できます。
res = MilvusClient.search(
collection_name="your_collection_name", # Collection name
anns_field="binary_vector_field", # Binary vector field name
data=[query_binary_vector], # Query binary vector
limit=3, # TopK results to return
search_params={"params": {}} # No additional parameters required for BIN_FLAT
)
詳細は、「バイナリベクトル」を参照してください。
インデックスのパラメータ
BIN_FLAT インデックスでは、インデックスの作成中も検索処理中も追加のパラメータは必要ありません。