STL_SORT
STL_SORT インデックスはMilvus内の数値フィールド(INT8、INT16など)、VARCHAR フィールド、TIMESTAMPTZ フィールドのデータをソート順に整理することにより、クエリの性能を向上させるために特別に設計されたインデックスタイプです。
以下のようなクエリを頻繁に実行する場合は、STL_SORT インデックスを使用してください:
==、!=、>、<、>=、<=の演算子による比較フィルタリング。INおよびLIKE演算子による範囲フィルタリング
サポートされるデータ型
数値フィールド(例:
INT8,INT16,INT32,INT64,FLOAT,DOUBLE)。詳細は「Boolean & Number」を参照。VARCHARフィールド。詳細は文字列フィールドを参照。TIMESTAMPTZフィールド。詳細はTIMESTAMPTZフィールドを参照。
仕組み
Milvusは2つのフェーズでSTL_SORT :
インデックスの構築
インジェスト中、Milvusはインデックスされたフィールドのすべての値を収集します。
値はC++ STLのstd::sortを使用して昇順にソートされます。
各値はエンティティIDと対にされ、ソートされた配列がインデックスとして永続化されます。
クエリの高速化
クエリー時、Milvusはソートされた配列に対してバイナリサーチ(std::lower_boundと std::upper_bound)を使用します。
等値の場合、Milvusは一致するすべての値を素早く見つけます。
範囲の場合、Milvusは開始位置と終了位置を特定し、その間のすべての値を返します。
一致したエンティティIDは、最終的な結果の組み立てのためにクエリ実行部に渡されます。
これにより、クエリの複雑さがO(n)(フルスキャン)からO(log n + m)(mはマッチ数)に減少します。
STL_SORTインデックスの作成
数値フィールドまたはTIMESTAMPTZ フィールドにSTL_SORT インデックスを作成することができます。追加のパラメータは必要ありません。
以下の例は、TIMESTAMPTZ フィールドにSTL_SORT インデックスを作成する方法を示しています:
from pymilvus import MilvusClient
client = MilvusClient(uri="http://localhost:19530") # Replace with your server address
# Assume you have defined a TIMESTAMPTZ field named "tsz" in your collection schema
# Prepare index parameters
index_params = client.prepare_index_params()
# Add RTREE index on the "tsz" field
index_params.add_index(
field_name="tsz",
index_type="STL_SORT", # Index for TIMESTAMPTZ
index_name="tsz_index", # Optional, name your index
params={} # No extra params needed
)
# Create the index on the collection
client.create_index(
collection_name="tsz_demo",
index_params=index_params
)
インデックスの削除
コレクションから既存のインデックスを削除するには、drop_index() メソッドを使用します。
client.drop_index(
collection_name="tsz_demo", # Name of the collection
index_name="tsz_index" # Name of the index to drop
)
使用上の注意
フィールド・タイプ:数値フィールドおよび
TIMESTAMPTZフィールドで動作します。データ型の詳細は、Boolean & NumberおよびTIMESTAMPTZ Field を参照してください。パラメータ:インデックス・パラメータは必要ありません。
Mmapはサポートされていません:メモリ・マップド・モードは
STL_SORTでは使用できない。