StructArray 演算子Compatible with Milvus 3.0.x
エンティティ内の Struct の配列(StructArray)は、Struct 要素の順序付きセットを格納します。配列内の各 Struct は、複数のベクターとスカラーフィールドで構成される定義済みのスキーマを共有しています。Struct 内のスカラーサブフィールドにインデックスが付けられると、エレメントフィルターとmatch ファミリーの演算子を使用してスカラーフィルタリングを実行できます。
要素フィルターは、指定された述語に一致する StructArray フィールドの値を少なくとも 1 つ含むエンティティを選択します。対照的に、マッチファミリーの演算子は、指定された述語にマッチする StructArray フィールドに特定の数または割合の値を含むエンティティを見つけるために使用される。
$[subField] に対して述語を構築するとき、これらの演算子は各候補エンティティの配列要素を繰り返し処理する必要があるため、大規模なデータセットを扱う場合は、サブフィールドがインデックス化されていることを確認してください。
要素フィルタ
エンティティの StructArray フィールドに、特定の述語にマッチする値が含まれているかどうかをチェックする必要がある場合は、要素フィルタを使用します。
element_filter(chunks, $[text] LIKE "Red%")
上記の要素フィルター式に示すように、要素フィルターは、text サブフィールドに "Red" で始まるチャンクを少なくとも 1 つ含むエンティティを返します。最初のパラメーターはStructArrayフィールドの名前で、2番目のパラメーターはStructサブフィールドに適用される述語です。
基本的な演算子で示したように、比較演算子、範囲演算子、算術演算子を使用して条件を構築し、論理演算子を使用して複数の条件を連結することができます。
ただし、エンティティ・レベル述語とエレメント・フィルタの両方を組み合わせたフィルタ式を構築する場合は、次の例に示すように、常にエレメント・フルトラを最後に配置する必要があります。
# 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" で始まるチャンクを少なくとも1つ含むエンティティを返します。意味的には、これはelement_filterと同じです。MATCH_ALL(identifier, predicate)すべてのチャンクのテキストサブフィールドが "Red "で始まるエンティティを返す。MATCH_LEAST(identifier, predicate, k):textのサブフィールドに "Red" で始まるチャンクを少なくともk含む実体を返す。MATCH_MOST(identifier, predicate, k):textのサブフィールドに、"Red" で始まるkチャンクを少なくとも含むエンティティを返す。MATCH_EXACT(identifier, predicate, k):textのサブフィールドに "Red" で始まるkチャンクを正確に含むエンティティを返す。
MATCH_ANY
この演算子は、配列内の少なくとも1つの要素が述語を満たす場合に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以上の場合に真を返す定量フィルタです。
ロジックを表現する必要がある場合はcount(matches) >= k 、この演算子を使います。
例
MATCH_LEAST(chunks, $[text] LIKE 'Red%', 3)
MATCH_MOST
この演算子は、述語を満たす要素の数が指定された定数 k以下の場合に真を返す定量フィルタです。
これは、特定のキーワードを過剰にターゲットするエンティティのフィルタリング(ノイズ除去)に特に便利です。
例
MATCH_MOST(chunks, $[text] LIKE 'Red%', 3)
MATCH_EXACT
この演算子は、ファミリの中で最も制限的な定量演算子です。述語を満たす要素の数がちょうど kである場合にのみ真を返します。
例
MATCH_EXACT(chunks, $[text] LIKE 'Red%', 3)