篩選器模板
在 Milvus 中,包含大量元素的複雜篩選表達式,尤其是那些涉及非 ASCII 字符(如中日韓字符)的篩選表達式,會顯著影響查詢性能。為了解決這個問題,Milvus 引入了篩選表達式模板化機制,旨在通過減少解析複雜表達式所花的時間來提高效率。本頁說明在搜尋、查詢和刪除操作中使用篩選表達式模板。
概述
篩選表達式範本化允許您使用占位符建立篩選表達式,這些占位符可以在查詢執行時動態地使用值取代。使用模板,您可以避免直接在篩選器中嵌入大型陣列或複雜的表達式,從而減少解析時間並提昇查詢效能。
假設您有一個篩選表達式,其中包含兩個欄位age
和city
,而您想要找出所有年齡大於 25 歲,且居住在「北京」(Beijing)或「上海」(Shanghai)的人。您可以使用模板,而不是直接將值嵌入篩選表達式中。
filter = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
在此,{age}
和{city}
是占位符,在執行查詢時,它們將被filter_params
中的實際值取代。
在 Milvus 中使用篩選表達式模板有幾個主要優點。
減少解析時間:透過使用占位符取代大型或複雜的篩選表達式,系統花在解析和處理篩選表達式的時間就會減少。
改善查詢效能:隨著解析開銷的減少,查詢效能得以提升,進而達到更高的 QPS 和更快的回應時間。
可擴充性:隨著資料集的成長,篩選表達式也變得更複雜,樣板化功能可確保效能維持在高效且可擴充的狀態。
搜尋作業
對於 Milvus 中的搜尋作業,filter
表達式用於定義篩選條件,而filter_params
參數則用於指定佔位符的值。filter_params
字典包含 Milvus 用來代入篩選表達式的動態值。
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.search(
"hello_milvus",
vectors[:nq],
filter=expr,
limit=10,
output_fields=["age", "city"],
search_params={"metric_type": "COSINE", "params": {"search_list": 100}},
filter_params=filter_params,
)
在這個範例中,Milvus 在執行搜尋時,會以25
動態取代{age}
,以["北京", "上海"]
動態取代{city}
。
查詢操作
同樣的模板機制也可以應用在 Milvus 的查詢操作上。在query
函式中,您定義篩選表達式,並使用filter_params
指定要取代的值。
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.query(
"hello_milvus",
filter=expr,
output_fields=["age", "city"],
filter_params=filter_params
)
透過使用filter_params
,Milvus 可以有效率地處理值的動態插入,提高查詢的執行速度。
刪除操作
您也可以在刪除作業中使用篩選表達式模板。與搜尋和查詢相似,filter
表達式定義條件,而filter_params
則提供佔位符的動態值。
expr = "age > {age} AND city IN {city}"
filter_params = {"age": 25, "city": ["北京", "上海"]}
res = client.delete(
"hello_milvus",
filter=expr,
filter_params=filter_params
)
這種方法可以改善刪除作業的效能,尤其是在處理複雜的篩選條件時。
結論
篩選表達式模板化是 Milvus 優化查詢效能的重要工具。透過使用佔位符和filter_params
字典,您可以大幅減少解析複雜篩選表達式所花的時間。這可加快查詢執行速度,並提高整體效能。