反向
當您需要對資料執行頻繁的篩選查詢時,INVERTED 索引可以顯著提高查詢性能。Milvus 使用倒排索引來快速找出符合篩選條件的精確記錄,而不是掃描所有文件。
何時使用 INVERTED 索引
當您需要時,請使用 INVERTED 索引:
根據特定值進行篩選:尋找欄位等於特定值的所有記錄 (例如
category == "electronics")過濾文字內容:在
VARCHAR欄位上執行有效率的搜尋查詢 JSON 欄位值:篩選 JSON 結構中的特定鍵
效能優勢:INVERTED 索引不需要進行全集掃描,可將大型資料集的查詢時間從幾秒縮短至幾毫秒。
INVERTED 索引如何工作
Milvus 中的INVERTED 索引將每個唯一欄位值(術語)對應到出現該值的文件 ID 集。這種結構能夠快速查找具有重複或分類值的欄位。
如圖所示,此過程分為兩個步驟:
前向映射 (ID → 詞彙):每個文件 ID 指向其包含的欄位值。
反向映射 (術語 → ID):Milvus 收集獨特的術語,並從每個術語到包含該術語的所有 ID 建立反向映射。
例如,值「electronics」對應到 ID1和3,而「books」對應到 ID2和5。
反向索引如何運作
當您篩選特定值 (例如category == "electronics"),Milvus 只需在索引中查找該詞,並直接檢索匹配的 ID。這可以避免掃描整個資料集,並實現快速篩選,特別是對於分類或重複值。
INVERTED 索引支援所有標量欄位類型,例如BOOL、INT8、INT16、INT32、INT64、FLOAT、DOUBLE、VARCHAR、JSON 和ARRAY。然而,索引 JSON 欄位的索引參數與一般標量欄位略有不同。
在非 JSON 欄位上建立索引
要在非 JSON 欄位上建立索引,請遵循下列步驟:
準備您的索引參數:
from pymilvus import MilvusClient client = MilvusClient(uri="http://localhost:19530") # Replace with your server address # Create an empty index parameter object index_params = client.prepare_index_params()新增
INVERTED索引:index_params.add_index( field_name="category", # Name of the field to index index_type="INVERTED", # Specify INVERTED index type index_name="category_index" # Give your index a name )建立索引:
client.create_index( collection_name="my_collection", # Replace with your collection name index_params=index_params )
在 JSON 欄位上建立索引Compatible with Milvus 2.5.11+
您也可以在 JSON 欄位內的特定路徑上建立 INVERTED 索引。這需要額外的參數來指定 JSON 路徑和資料類型:
# Build index params
index_params.add_index(
field_name="metadata", # JSON field name
index_type="INVERTED",
index_name="metadata_category_index",
params={
"json_path": "metadata[\"category\"]", # Path to the JSON key
"json_cast_type": "varchar" # Data type to cast to during indexing
}
)
# Create index
client.create_index(
collection_name="my_collection", # Replace with your collection name
index_params=index_params
)
有關 JSON 欄位索引的詳細資訊,包括支援的路徑、資料類型和限制,請參閱JSON 索引。
刪除索引
使用drop_index() 方法從集合中移除現有索引。
在v2.6.3或更早版本中,您必須先釋放集合,才能刪除標量索引。
從v2.6.4或更新版本開始,一旦不再需要標量索引,您就可以直接將它刪除,而不需要先釋放集合。
client.drop_index(
collection_name="my_collection", # Name of the collection
index_name="category_index" # Name of the index to drop
)
最佳實務
在載入資料後建立索引:在已包含資料的集合上建立索引,以獲得更佳效能
使用描述性索引名稱:選擇能清楚指出欄位和目的的名稱
監控索引效能:在建立索引之前和之後,檢查查詢效能
考慮您的查詢模式:在您經常篩選的欄位上建立索引