• 關於 Milvus
  • 開始使用
  • 概念
  • 使用者指南
  • 資料匯入
  • AI 工具
  • 管理指南
  • 工具
  • 整合
  • 教學
  • 常見問題
  • API Reference

反向

當您需要對資料執行頻繁的篩選查詢時,INVERTED 索引可以顯著提高查詢性能。Milvus 使用倒排索引來快速找出符合篩選條件的精確記錄,而不是掃描所有文件。

何時使用 INVERTED 索引

當您需要時,請使用 INVERTED 索引:

  • 根據特定值進行篩選:尋找欄位等於特定值的所有記錄 (例如category == "electronics")

  • 過濾文字內容:在VARCHAR 欄位上執行有效率的搜尋

  • 查詢 JSON 欄位值:篩選 JSON 結構中的特定鍵

效能優勢:INVERTED 索引不需要進行全集掃描,可將大型資料集的查詢時間從幾秒縮短至幾毫秒。

INVERTED 索引如何工作

Milvus 中的INVERTED 索引將每個唯一欄位值(術語)對應到出現該值的文件 ID 集。這種結構能夠快速查找具有重複或分類值的欄位。

如圖所示,此過程分為兩個步驟:

  1. 前向映射 (ID → 詞彙):每個文件 ID 指向其包含的欄位值。

  2. 反向映射 (術語 → ID):Milvus 收集獨特的術語,並從每個術語到包含該術語的所有 ID 建立反向映射。

例如,值「electronics」對應到 ID13,而「books」對應到 ID25

How Inverted Index Works 反向索引如何運作

當您篩選特定值 (例如category == "electronics"),Milvus 只需在索引中查找該詞,並直接檢索匹配的 ID。這可以避免掃描整個資料集,並實現快速篩選,特別是對於分類或重複值。

INVERTED 索引支援所有標量欄位類型,例如BOOLINT8INT16INT32INT64FLOATDOUBLEVARCHARJSONARRAY。然而,索引 JSON 欄位的索引參數與一般標量欄位略有不同。

在非 JSON 欄位上建立索引

要在非 JSON 欄位上建立索引,請遵循下列步驟:

  1. 準備您的索引參數:

    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()
    
  2. 新增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
    )
    
  3. 建立索引:

    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
)

最佳實務

  • 在載入資料後建立索引:在已包含資料的集合上建立索引,以獲得更佳效能

  • 使用描述性索引名稱:選擇能清楚指出欄位和目的的名稱

  • 監控索引效能:在建立索引之前和之後,檢查查詢效能

  • 考慮您的查詢模式:在您經常篩選的欄位上建立索引

下一步

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?