跳到主要内容

JSON 操作符

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

📘说明

JSON 字段无法处理复杂的嵌套结构,而是将所有嵌套结构视为纯字符串。因此,在使用 JSON 字段时,建议避免过深的嵌套,并确保数据结构尽可能扁平,以获得最佳性能。

支持的 JSON 操作符

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

  • JSON_CONTAINS(identifier, expr):用于过滤出在指定 JSON 字段值中包含指定表达式的所有 Entity。

  • JSON_CONTAINS_ALL(identifier, expr):用于过滤出在指定 JSON 字段值中包含指定表达式中所有元素的所有 Entity。

  • JSON_CONTAINS_ANY(identifier, expr):用于过滤出在指定 JSON 字段值中包含指定表达式中若干元素的所有 Entity。

下面,我们将结合示例来了解如何在实际场景下使用这些操作符。

JSON_CONTAINS

该操作符会检查 JSON 字段中是否存在特定元素或子数组。当你想确保一个 JSON 数组或对象包含一个特定值时,就可以使用 JSON_CONTAINS 操作符。

示例

假设 JSON 字段 product 中有名为 tags 的键,可以使用如下过滤表达式找出 tags 键包含了 sale 的所有 Entity。

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

JSON_CONTAINS_ALL

该操作符可确保目标字段中包含指定 JSON 表达式的所有元素。当需要匹配 JSON 数组中的多个值时,就可以使用 JSON_CONTAINS_ALL 操作符。

示例

继续使用上一个示例设定的场景,您可以使用如下过滤表达式找出 tags 键同时包含了 electronicssalenew 的所有 Entity。

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

JSON_CONTAINS_ANY

该操作符可过滤字段中至少存在一个 JSON 表达式成员的实体。当您想根据多个可能值中的任意一个值来匹配实体时,就可以使用 JSON_CONTAINS_ANY 操作符。

示例

Let’s say you want to filter products that have at least one of the tags "electronics", "sale", or "new". You can use the json_contains_any operator to achieve this.

假设您需要过滤出 tags 键包含了 electronicssalenew 中任意一个 tag 的所有 Entity,可以使用如下过滤表达式。

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

在这种情况下 Zilliz Cloud 将返回 tags 列表中至少包含 ["electronics", "new", "clearance"] 中任意一个元素的所有 Entity,包括那些 tags 键中仅包含了上述三个 tag 中的任意一个的 Entity。