跳到主要内容

JSON 操作符

Milvus 支持用于查询和过滤 JSON field 的高级操作符,使其完美适用于管理复杂的结构化数据。这些操作符可以高效查询 JSON 文档,允许您根据 JSON field 内的特定元素、值或条件检索 entity。本节将指导您在 Milvus 中使用 JSON 特定操作符,并提供实际示例来说明其功能。

JSON field 无法处理复杂的嵌套结构,将所有嵌套结构视为普通字符串。因此,在使用 JSON field 时,建议避免过度深层的嵌套,确保您的数据结构尽可能平坦以获得最佳性能。

可用的 JSON 操作符

Milvus 提供了几个强大的 JSON 操作符来帮助过滤和查询 JSON 数据,这些操作符包括:

  • JSON_CONTAINS(identifier, expr):过滤在 field 中找到指定 JSON 表达式的 entity。

  • JSON_CONTAINS_ALL(identifier, expr):确保指定 JSON 表达式的所有元素都存在于 field 中。

  • JSON_CONTAINS_ANY(identifier, expr):过滤 JSON 表达式中至少有一个成员存在于 field 中的 entity。

让我们通过示例来探索这些操作符,看看它们如何应用于实际场景。

JSON_CONTAINS

json_contains 操作符检查 JSON field 中是否存在特定元素或子数组。当您想要确保 JSON 数组或对象包含特定值时,这很有用。

示例

假设您有一个产品 collection,每个产品都有一个包含字符串的 JSON 数组的 tags field,例如 ["electronics", "sale", "new"]。您想要过滤具有标签 "sale" 的产品。

# JSON data: {"tags": ["electronics", "sale", "new"]}
filter = 'json_contains(product["tags"], "sale")'

在此示例中,Milvus 将返回所有 tags field 包含元素 "sale" 的产品。

JSON_CONTAINS_ALL

json_contains_all 操作符确保指定 JSON 表达式的所有元素都存在于目标 field 中。当您需要匹配 JSON 数组中的多个值时,它特别有用。

示例

继续产品标签场景,如果您想要查找具有标签 "electronics""sale""new" 的所有产品,您可以使用 json_contains_all 操作符。

# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter = 'json_contains_all(product["tags"], ["electronics", "sale", "new"])'

此查询将返回所有 tags 数组包含所有三个指定元素的产品:"electronics""sale""new"

JSON_CONTAINS_ANY

json_contains_any 操作符过滤 JSON 表达式中至少有一个成员存在于 field 中的 entity。当您想要根据几个可能值中的任何一个匹配 entity 时,这很有用。

示例

假设您想要过滤至少具有标签 "electronics""sale""new" 中一个的产品。您可以使用 json_contains_any 操作符来实现这一点。

# JSON data: {"tags": ["electronics", "sale", "new"]}
filter = 'json_contains_any(tags, ["electronics", "new", "clearance"])'

在这种情况下,Milvus 将返回所有至少具有列表 ["electronics", "new", "clearance"] 中一个标签的产品。即使产品只有这些标签中的一个,它也会被包含在结果中。