篩選說明
Milvus 提供強大的篩選功能,使您能夠精確地查詢資料。篩選表達式允許您針對特定的標量欄位,使用不同的條件精煉搜尋結果。本指南解釋如何在 Milvus 中使用篩選表達式,並以查詢操作為主。您也可以在搜尋和刪除請求中套用這些篩選條件。
基本運算符號
Milvus 支援幾種基本運算符號來篩選資料:
比較運算符:
==,!=,>,<,>=, 和<=允許基於數值或文字欄位進行篩選。範圍篩選器:
IN和LIKE有助於匹配特定的值範圍或集合。算術運算符:
+,-,*,/,%, 和**用於涉及數字字段的計算。邏輯運算符號:
AND,OR, 和NOT將多個條件結合為複雜的表達式。IS NULL 和 IS NOT NULL 運算符:
IS NULL和IS NOT NULL運算符用於根據欄位是否包含空值(沒有資料)來篩選欄位。如需詳細資訊,請參閱基本運算符號。
範例:依顏色篩選
若要在標量欄位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 ,其中包含天文台自 2000 年以來所報告的平均溫度記錄,並且想要找出 2009 年(第 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 欄位的運算符號
Milvus 提供了專門的運算符號,用於在 VARCHAR 欄位上進行精確的基於文字的搜尋:
TEXT_MATCH 運算符號
TEXT_MATCH 運算符允許根據特定查詢字詞進行精確的文件檢索。它對於結合標量篩選與向量相似性搜尋的篩選搜尋特別有用。與語意搜尋不同,文字匹配專注於精確的詞彙出現。
Milvus 使用 Tantivy 來支援倒置索引和基於詞彙的文字搜尋。過程包括
分析器:對輸入文字進行標記化和處理。
建立索引:建立倒置索引,將唯一的標記對應到文件。
如需詳細資訊,請參閱文字匹配。
PHRASE_MATCH 運算符號Compatible with Milvus 2.6.x
PHRASE_MATCH運算子可根據精確的詞組匹配來精確擷取文件,並同時考慮查詢詞的順序和相鄰性。
如需詳細資訊,請參閱短語匹配。