主鍵搜尋Compatible with Milvus 2.6.9+
進行相似性檢索時,總是會要求您提供一個或多個查詢向量,即使這些查詢向量已經存在於目標資料集中。為了避免在搜尋之前擷取向量,您可以使用主鍵來代替。
概觀
在電子商務平台上,使用者可以輸入關鍵字來擷取符合該關鍵字的產品。當使用者檢視產品詳細頁面後,平台也會在頁面底部顯示相似產品清單,供想要比較的使用者參考。
這些推薦會依據與關鍵字或目前產品的相似度排序。為了達到這個目的,平台開發人員需要在實際的相似性搜尋之前,先從 Milvus 擷取關鍵字或目前產品的向量表示,這會增加平台與 Milvus 之間的往返,並導致大量高維浮動值在網路上傳輸。
為了簡化您的應用程式與 Milvus 之間的互動邏輯,減少往返次數,並避免在網路上傳輸大量的高維浮點數值,請考慮使用主鍵搜尋。
在主鍵搜尋中,您不需要提供任何查詢向量。相反,您需要提供包含查詢向量的實體的主索引鍵 (ids)。
限制與約束
使用主索引鍵的搜尋適用於所有向量資料類型,除了從 VarChar 欄位衍生出來的稀疏向量欄位,如 BM25 函式。
您可以在篩選、範圍和群組搜尋中使用主索引鍵取代查詢向量,並可選擇啟用分頁功能。但是,此功能不適用於混合搜尋和搜尋迭接器。
對於涉及嵌入清單的相似性搜尋,您仍需要擷取查詢向量、將它們排列成嵌入清單,然後執行搜尋。
您不能在 RESTful API 中使用主鍵來取代查詢向量。
對於任何不存在的主鍵或格式不正確的主鍵,Milvus 會提示錯誤。
主鍵和查詢向量是互相排斥的。同時提供兩者也會導致錯誤。
範例
以下範例假設所有提供的 Int64 ID 在目標集合中都是可用的。
主鍵不會用於篩選;它們只會用於向量擷取。
範例 1:基本主索引鍵搜尋
若要進行基本的 primary-key 搜尋,只要將查詢向量換成 primary keys 即可。
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
res = client.search(
collection_name="quick_setup",
anns_field="vector",
ids=[551, 296, 43], # a list of primary keys
limit=3,
search_params={"metric_type": "IP"}
)
for hits in res:
for hit in hits:
print(hit)
// java
// node.js
// go
# restful
範例 2:使用主鍵進行篩選搜尋
以下範例假設 color 和 likes 是目標集合中兩個模式定義的欄位。
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43], #
filter='color like "red%" and likes > 50',
output_fields=["color", "likes"],
limit=3,
)
// java
// node.js
// go
# restful
範例 3:使用主鍵的範圍搜尋
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43],
limit=3,
search_params={
"params": {
"radius": 0.4,
"range_filter": 0.6
}
}
)
// java
// node.js
// go
# restful
範例 4:使用主索引鍵進行群組搜尋
以下範例假設docId 是目標集合中一個模式定義的欄位。
res = client.search(
collection_name="my_collection",
ids=[551, 296, 43],
limit=3,
group_by_field="docId",
output_fields=["docId"]
)
// java
// node.js
// go
# restful