• 關於 Milvus
  • 開始使用
  • 概念
  • 使用者指南
    • 收藏集
    • 模式與資料欄位
    • 插入與刪除
    • 索引
    • 搜尋
    • 嵌入與重新排名
    • 儲存優化
  • 資料匯入
  • AI 工具
  • 管理指南
  • 工具
  • 整合
  • 教學
  • 常見問題
  • API Reference

sparse_inverted_index

SPARSE_INVERTED_INDEX 索引是 Milvus 用來有效儲存和搜尋稀疏向量的一種索引類型。此索引類型利用倒轉索引的原理,為稀疏資料建立高效率的搜尋結構。如需詳細資訊,請參閱INVERTED

建立索引

要在 Milvus 中的稀疏向量場上建立SPARSE_INVERTED_INDEX 索引,請使用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_sparse_vector_field_name", # Name of the vector field to be indexed
    index_type="SPARSE_INVERTED_INDEX", # Type of the index to create
    index_name="sparse_inverted_index", # Name of the index to create
    metric_type="IP", # Metric type used to measure similarity
    params={"inverted_index_algo": "DAAT_MAXSCORE"}, # Algorithm used for building and querying the index
)

在此設定中

  • index_type:要建立的索引類型。在本範例中,設定值為SPARSE_INVERTED_INDEX

  • metric_type:用於計算稀疏向量之間相似性的度量。有效值:

    • IP (Inner Product):使用點乘積測量相似性。

    • BM25:通常用於全文搜尋,著重於文字相似性。

      如需詳細資訊,請參閱公制類型全文檢索。

  • params.inverted_index_algo:用於建立和查詢索引的演算法。有效值:

    • "DAAT_MAXSCORE" (預設):使用 MaxScore 演算法的最佳化 Document-at-a-Time (DAAT) 查詢處理。MaxScore 可跳過可能影響最小的詞彙和文件,為高k值或包含許多詞彙的查詢提供更好的效能。為了達到這個目的,MaxScore 會根據最大影響分數,將詞彙分為必要和非必要兩組,並將重點放在對 top-k 結果有貢獻的詞彙上。

    • "DAAT_WAND":使用 WAND 演算法優化 DAAT 查詢處理。WAND 利用最大影響分數跳過非競爭性文件,評估較少的命中文件,但每次命中的開銷較高。這使得 WAND 對於k值較小的查詢或較短的查詢更有效率,在這些情況下跳過是較可行的。

    • "TAAT_NAIVE":Basic Term-at-a-Time (TAAT) 查詢處理。雖然與DAAT_MAXSCOREDAAT_WAND 相比較慢,但TAAT_NAIVE 提供了獨特的優勢。DAAT 演算法使用快取的最大影響分數,不論全域收集參數 (avgdl) 如何變更,這些分數都會保持靜態,而TAAT_NAIVE 則不同,它會動態適應這些變更。

    若要瞭解SPARSE_INVERTED_INDEX 索引可用的更多建立參數,請參閱索引建立參數

索引參數設定完成後,您可以直接使用create_index() 方法或在create_collection 方法中傳入索引參數,以建立索引。如需詳細資訊,請參閱建立集合

在索引上搜尋

索引建立且實體插入後,您就可以在索引上執行相似性搜尋。

# Prepare the query vector
query_vector = [{1: 0.2, 50: 0.4, 1000: 0.7}]

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    anns_field="vector_field",  # Vector field name
    data=query_vector,  # Query vector
    limit=3,  # TopK results to return
)

要瞭解SPARSE_INVERTED_INDEX 索引可用的更多搜尋參數,請參閱特定於索引的搜尋參數

索引參數

本節概述用於建立索引和在索引上執行搜尋的參數。

索引建立參數

下表列出了建立索引時可在params 中設定的參數。

參數

說明

值範圍

調整建議

inverted_index_algo

用於建立和查詢索引的演算法。它決定索引如何處理查詢。

"DAAT_MAXSCORE" (預設),"DAAT_WAND""TAAT_NAIVE"

使用"DAAT_MAXSCORE" 來處理 k 值高的情況或包含許多詞彙的查詢,可從跳過非競爭性文件中獲益。

對於 k 值較小的查詢或較短的查詢,請選擇"DAAT_WAND" ,以利用更有效率的跳過。

如果需要根據資料集變更 (例如 avgdl) 進行動態調整,請使用"TAAT_NAIVE"

特定於索引的搜尋參數

下表列出在索引上搜尋時,可在search_params.params 中設定的參數。

參數

說明

值範圍

調整建議

drop_ratio_search

搜尋時忽略最小值的比例,有助於減少雜訊。

介於 0.0 和 1.0 之間的比例 (例如,0.2 會忽略最小 20% 的值)

根據查詢向量的稀疏程度和雜訊程度調整此參數。

此參數可控制搜尋過程中丟棄的低幅度值比例。增加此值 (例如,增加到0.2) 可以減少雜訊,並將搜尋集中在更重要的元件上,這可能會提高精確度和效率。然而,捨棄更多的值也可能會排除潛在的相關訊號,進而降低召回率。請針對您的工作負載,選擇一個能平衡召回率與精確度的值。

免費嘗試托管的 Milvus

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

開始使用
反饋

這個頁面有幫助嗎?