StructArray 操作符
Entity 中的 Array of Structs,也称为 StructArray,用于存储一组有序的 Struct 元素。Array 中的每个 Struct 都共享同一个预定义 Schema,该 Schema 可包含多个向量字段和标量字段。当 Struct 中的标量子字段已创建索引时,您可以使用 Element Filter 和 Match 系列运算符 对其执行标量过滤。
Element Filter 会选择 StructArray 字段中至少有一个值匹配指定谓词的 Entity。相比之下,Match 系列运算符用于查找 StructArray 字段中有特定数量或特定比例的值匹配指定谓词的 Entity。
针对 $[subField] 构建谓词时,如果您处理的是大规模数据集,请确保该子字段已创建索引,因为这些运算符需要遍历每个候选 Entity 中的 Array 元素。
Element Filter
当您需要检查某个 Entity 的 StructArray 字段中是否包含匹配特定谓词的值时,请使用 Element Filter。
element_filter(chunks, $[text] LIKE "Red%")
如上述 Element Filter 表达式所示,该过滤条件会返回 text 子字段中至少有一个 Chunk 以 "Red" 开头的 Entity。第一个参数是 StructArray 字段的名称,第二个参数是应用于 Struct 子字段的谓词。
您可以使用比较、范围和算术运算符构建条件,并使用逻辑运算符连接多个条件,如 基本操作符 所示。
但是,当您构建同时包含 Entity 级别谓词和 Element Filter 的过滤表达式时,应始终将 Element Filter 放在末尾,如以下示例所示。
# correct
id > 0 && element_filter(chunks, $[x] > 1)
# incorrect, resulting errors
element_filter(chunks, $[x] > 1) && id > 0
Match 系列运算符
Match 系列运算符也适用于 StructArray 字段。它们不只是检查是否存在满足条件的元素,还可以指定必须有多少个元素(或多大比例的元素)满足元素谓词。
-
MATCH_ANY(identifier, predicate):返回text子字段中至少有一个 Chunk 以"Red"开头的 Entity;从语义上看,这等价于element_filter。 -
MATCH_ALL(identifier, predicate):返回所有 Chunk 的text子字段都以"Red"开头的 Entity。 -
MATCH_LEAST(identifier, predicate, k):返回text子字段中至少有k个 Chunk 以"Red"开头的 Entity。 -
MATCH_MOST(identifier, predicate, k):返回text子字段中至多有k个 Chunk 以"Red"开头的 Entity。 -
MATCH_EXACT(identifier, predicate, k):返回text子字段中恰好有k个 Chunk 以"Red"开头的 Entity。
MATCH_ANY
如果 Array 中至少一个元素满足谓词,则该运算符返回 true。这表示它在结构上等价于对所有 Array 元素执行逻辑 OR。
MATCH_ANY 运算符和 Element Filter 在语义上相同,您可以互换使用。当您需要表达 count(matches) >= 1 逻辑时,应使用它们。
示例:
以下示例返回文档中任意部分以 "Red" 开头的 Entity。
MATCH_ANY(chunks, $[text] LIKE 'Red%')
MATCH_ALL
只有当 Array 中每一个元素都满足谓词时,该运算符才返回 true。
当您需要表达 count(matches) == total elements 逻辑时,请使用该运算符。
示例:
MATCH_ALL(chunks, $[text] LIKE 'Red%')
MATCH_LEAST
这是一个定量过滤运算符。当满足谓词的元素数量大于或等于指定常量 时,该运算符返回 true。
当您需要表达 count(matches) >= k 逻辑时,请使用该运算符。
示例:
MATCH_LEAST(chunks, $[text] LIKE 'Red%', 3)
MATCH_MOST
这是一个定量过滤运算符。当满足谓词的元素数量小于或等于指定常量 时,该运算符返回 true。
这对于过滤掉过度命中特定关键词的 Entity 特别有用,可用于降低噪声。
示例:
MATCH_MOST(chunks, $[text] LIKE 'Red%', 3)
MATCH_EXACT
这是该系列中限制最严格的定量运算符。当且仅当满足谓词的元素数量恰好等于 时,该运算符才返回 true。
示例:
MATCH_EXACT(chunks, $[text] LIKE 'Red%', 3)