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 分兩個階段實現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 欄位。參數:不需要索引參數。
不支援記憶體映射:
STL_SORT不支援記憶體映射模式。