Операторы JSON
Milvus поддерживает расширенные операторы для запросов и фильтрации полей JSON, что делает их идеальными для управления сложными структурированными данными. Эти операторы позволяют выполнять высокоэффективные запросы к документам JSON, позволяя вам извлекать сущности на основе определенных элементов, значений или условий в полях JSON. В этом разделе мы расскажем вам об использовании специфических операторов JSON в Milvus и приведем практические примеры, иллюстрирующие их функциональность.
JSON-поля не могут работать со сложными вложенными структурами и рассматривают все вложенные структуры как обычные строки. Поэтому при работе с полями JSON рекомендуется избегать слишком глубокой вложенности и следить за тем, чтобы структуры данных были как можно более плоскими для достижения оптимальной производительности.
Доступные операторы JSON
Milvus предоставляет несколько мощных операторов JSON, которые помогают фильтровать и запрашивать данные JSON, а именно.
JSON_CONTAINS(identifier, expr)
: Фильтрует сущности, в поле которых встречается указанное выражение JSON.JSON_CONTAINS_ALL(identifier, expr)
: : Убеждается, что все элементы указанного JSON-выражения присутствуют в поле.JSON_CONTAINS_ANY(identifier, expr)
: : Фильтрует сущности, в которых хотя бы один член JSON-выражения присутствует в поле.
Давайте рассмотрим эти операторы на примерах, чтобы увидеть, как они могут применяться в реальных сценариях.
JSON_CONTAINS
Оператор json_contains
проверяет, существует ли определенный элемент или подмассив в поле JSON. Он полезен, когда нужно убедиться, что массив или объект JSON содержит определенное значение.
Пример
Представьте, что у вас есть коллекция продуктов, каждый из которых имеет поле tags
, содержащее JSON-массив строк, например ["electronics", "sale", "new"]
. Вы хотите отфильтровать товары, имеющие тег "sale"
.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter = 'json_contains(tags, "sale")'
В этом примере Milvus вернет все товары, в которых поле tags
содержит элемент "sale"
.
JSON_CONTAINS_ALL
Оператор json_contains_all
гарантирует, что все элементы указанного JSON-выражения присутствуют в целевом поле. Он особенно полезен, когда нужно сопоставить несколько значений в массиве JSON.
Пример
Продолжая сценарий с тегами продуктов, если вы хотите найти все продукты, имеющие теги "electronics"
, "sale"
, и "new"
, вы можете использовать оператор json_contains_all
.
# JSON data: {"tags": ["electronics", "sale", "new", "discount"]}
filter = 'json_contains_all(tags, ["electronics", "sale", "new"])'
Этот запрос вернет все товары, в которых массив tags
содержит все три указанных элемента: "electronics"
, "sale"
, и "new"
.
JSON_COTAINS_ANY
Оператор json_contains_any
фильтрует сущности, в которых хотя бы один член выражения JSON существует в поле. Это полезно, когда нужно подобрать сущности по любому из нескольких возможных значений.
Пример
Допустим, вы хотите отфильтровать продукты, имеющие хотя бы один из тегов "electronics"
, "sale"
или "new"
. Для этого можно использовать оператор json_contains_any
.
# JSON data: {"tags": ["electronics", "sale", "new"]}
filter = 'json_contains_any(tags, ["electronics", "new", "clearance"])'
В этом случае Milvus вернет все товары, у которых есть хотя бы один из тегов в списке ["electronics", "new", "clearance"]
. Даже если у товара есть только один из этих тегов, он будет включен в результат.