StructArray 運算符號Compatible with Milvus 3.0.x
實體中的 Structs 陣列(或稱 StructArray)儲存了一組有序的 Struct 元素。陣列中的每個 Struct 共用相同的預定義模式,該模式包含多個向量和標量欄位。當 Struct 中的標量子欄位被索引時,您可以使用元素篩選器和match 系列中的運算符號對其執行標量篩選。
元素篩選器會選擇在 StructArray 欄位中至少包含一個符合指定謂語的值的實體。相反,匹配族運算元則用來尋找在 StructArray 欄位中包含特定數量或比例的值,且符合指定謂語的實體。
當針對$[subField] 建立謂語時,如果您正在處理大型資料集,請確保子欄位已建立索引,因為這些運算符號需要為每個候選實體遍歷陣列元素。
元素篩選器
當您需要檢查一個實體是否包含符合其 StructArray 欄位中特定謂語的值時,請使用元素篩選器。
element_filter(chunks, $[text] LIKE "Red%")
如上面的元素篩選器表達式所示,元素篩選器會返回在text 子欄位中至少包含一個以 "Red "開頭的 chunk 的實體。第一個參數是 StructArray 欄位的名稱,第二個參數是適用於 Struct 子欄位的謂語。
您可以使用比較、範圍和算術運算符建立條件,並使用邏輯運算符串連多個條件,如基本運算符所示。
但是,當您建立一個同時結合實體層級謂語和元素篩選器的篩選器表達式時,您應該永遠將元素 fltler 放在最後,如以下範例所示。
# correct
id > 0 && element_filter(chunks, $[x] > 1)
# incorrect, resulting errors
element_filter(chunks, $[x] > 1) && id > 0
匹配族運算元
匹配族運算元也可以在 StructArray 欄位上運作。您可以決定有多少個元素(或多大比例)必須滿足元素謂謂。
MATCH_ANY(identifier, predicate): 返回在text子字段中至少包含一個以 "Red "開頭的 chunk 的實體;在語義上,這等同於element_filter。MATCH_ALL(identifier, predicate):............返回所有分塊中的文字子字段都以 "Red "開頭的實體。MATCH_LEAST(identifier, predicate, k):......返回在text子字段中至少包含以 "Red "開頭的k元組的實體。MATCH_MOST(identifier, predicate, k):......返回在text子字段中最多包含以 "Red "開頭的kchunk 的實體。MATCH_EXACT(identifier, predicate, k)MATCH_ANY : 返回在text子字段中恰好包含以「Red」開頭的k元組的實體。
MATCH_ANY
如果陣列中至少有一個元素滿足謂語,則此運算符號的值為 true,這表示邏輯OR 的結構等效於所有陣列元素。
MATCH_ANY 運算符和元素篩選器在語義上是相同的,您可以交替使用它們。當您需要表達邏輯count(matches) >= 1 時,您應該使用它們。
範例:
下面的示例返回文件中任何部分以 "Red "開頭的實體。
MATCH_ANY(chunks, $[text] LIKE 'Red%')
MATCH_ALL
只有在陣列中的每個元素都滿足謂語的情況下,這個運算符號的值才會為真。
當您需要表達邏輯count(matches) == total elements 時,請使用此運算子。
範例:
MATCH_ALL(chunks, $[text] LIKE 'Red%')
MATCH_LEAST
此運算子是一個定量篩選器,如果滿足謂語的元素數目大於或等於指定常數 k,則返回 true。
當您需要表達邏輯count(matches) >= k 時,請使用此運算子。
範例:
MATCH_LEAST(chunks, $[text] LIKE 'Red%', 3)
MATCH_MOST
此運算子是一個定量過濾器,如果滿足謂語的元素數量小於或等於指定常數 k,則返回 true。
這對於篩選出過度瞄準特定關鍵字的實體特別有用(減少雜訊)。
範例:
MATCH_MOST(chunks, $[text] LIKE 'Red%', 3)
MATCH_EXACT
此運算子是系列中限制性最強的定量運算子。當且僅當滿足謂語的元素數正好是 k 時,它才會返回 true。
範例:MATCH_EXACT
MATCH_EXACT(chunks, $[text] LIKE 'Red%', 3)