篩選說明
Milvus 提供強大的篩選功能,使您能夠精確查詢資料。篩選表達式允許您針對特定的標量欄位,使用不同的條件精煉搜尋結果。本指南解釋如何在 Milvus 中使用篩選表達式,並以查詢操作為主。您也可以在搜尋和刪除請求中套用這些篩選條件。
基本運算符號
Milvus 支援幾種基本運算符號來篩選資料。
比較運算符:
==
,!=
,>
,<
,>=
, 和<=
允許根據數值、文字或日期欄位進行篩選。範圍篩選器:
IN
和LIKE
有助於匹配特定的值範圍或集合。算術運算符:
+
,-
,*
,/
,%
, 和 `` ` 用於涉及數值欄位的計算。邏輯運算符:
AND
,OR
, 和NOT
或 '&&'、'||'、'~'、'!' 將多個條件結合成複雜的表達式。
範例:依顏色篩選
若要在標量欄位color
中找出具有三原色(紅色、綠色或藍色)的實體,請使用下列篩選表達式。
filter='color in ["red", "green", "blue"]'
範例:篩選 JSON 欄位
Milvus 允許在 JSON 欄位中參考鍵。例如,如果您有一個 JSON 欄位product
,其鍵為price
和model
,並希望找到具有特定型號和價格低於 1,850 的產品,請使用此過濾表達式。
filter='product["model"] == "JSN-087" and product["price"] < 1850'
範例:篩選陣列欄位
如果您有一個包含溫度記錄的陣列欄位history_temperatures
,並且想要找出第 10 個記錄溫度超過 23°C 的天文台,請使用此表達式。
filter='history_temperatures[10] > 23'
有關這些基本運算符的詳細資訊,請參閱基本運算符。
篩選表達式範本
使用中日韓字符進行篩選時,由於其字符集較大且編碼存在差異,處理過程可能會更加複雜。這可能會導致效能變慢,尤其是使用IN
運算符時。
Milvus 引入了篩選表達式模板,以優化處理中日韓字符時的效能。透過將動態值從篩選表達式中分離出來,查詢引擎可以更有效率地處理參數插入。
範例
要查找居住在 「北京」(Beijing)或 「上海」(Shanghai)的 25 歲以上的個人,請使用以下模板表達式。
filter = "age > 25 and city in ['北京', '上海']"
為了提高效能,請使用這個帶參數的變體。
filter = "age > {age} and city in {city}",
filter_params = {"age": 25, "city": ["北京", "上海"]}
此方法可減少解析開銷,並提高查詢速度。如需詳細資訊,請參閱篩選模板。
特定資料類型的運算符號
Milvus 為特定資料類型提供進階過濾運算子,例如 JSON、ARRAY 和 VARCHAR 欄位。
JSON 特定欄位運算符號
Milvus 為查詢 JSON 欄位提供進階運算子,可在複雜的 JSON 結構中進行精確過濾。
JSON_CONTAINS(identifier, jsonExpr)
:檢查字段中是否存在 JSON 表達式。
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains(tags, "sale")'
JSON_CONTAINS_ALL(identifier, jsonExpr)
:確保 JSON 表達式的所有元素都存在。
# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter='json_contains_all(tags, ["electronics", "sale", "new"])'
JSON_CONTAINS_ANY(identifier, jsonExpr)
:篩選 JSON 表達式中至少存在一個元素的實體。
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter='json_contains_any(tags, ["electronics", "new", "clearance"])'
有關 JSON 運算符的詳細資訊,請參閱JSON 運算符。
ARRAY 特定欄位運算符號
Milvus 為陣列欄位提供進階過濾運算符,例如ARRAY_CONTAINS
,ARRAY_CONTAINS_ALL
,ARRAY_CONTAINS_ANY
, 和ARRAY_LENGTH
,可對陣列資料進行精細控制。
ARRAY_CONTAINS
:過濾包含特定元素的實體。
filter="ARRAY_CONTAINS(history_temperatures, 23)"
ARRAY_CONTAINS_ALL
:篩選列表中所有元素都存在的實體。
filter="ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])"
ARRAY_CONTAINS_ANY
:篩選包含清單中任何元素的實體。
filter="ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])"
ARRAY_LENGTH
:根據陣列的長度進行篩選。
filter="ARRAY_LENGTH(history_temperatures) < 10"
有關陣列運算元的詳細資訊,請參閱ARRAY 運算元。
VARCHAR 特定欄位運算符號
Text_Match
運算符允許根據特定查詢字詞進行精確的文件檢索。它對於結合標量篩選與向量相似性搜尋的篩選搜尋特別有用。與語意搜尋不同,Text Match 著重於精確的詞彙出現。
Milvus 使用 Tantivy 來支援倒置索引和基於詞彙的文字搜尋。過程包括
分析器:對輸入文字進行標記化和處理。
建立索引:建立倒置索引,將唯一的標記對應到文件。
如需詳細資訊,請參閱「文字匹配」。