Операторы ARRAY

Milvus предоставляет операторы ARRAY для фильтрации полей ARRAY и частичного обновления значений полей ARRAY.

Все элементы массива должны быть одного типа, а вложенные структуры внутри массивов обрабатываются как простые строки. Поэтому при работе с полями ARRAY рекомендуется избегать чрезмерно глубокого вложения и стремиться к тому, чтобы структуры данных были максимально плоскими для обеспечения оптимальной производительности.

Операторы ARRAY в Milvus охватывают два сценария использования:

  • Выражения фильтрации для запросов и поиска.

  • Частичное обновление в запросах типа « upsert ».

Доступные операторы ARRAY

В следующей таблице перечислены операторы ARRAY, доступные в Milvus.

ОператорИспользование вОписание
ARRAY_CONTAINS(идентификатор, выражение)Выражение фильтраПроверяет, существует ли конкретный элемент в поле ARRAY.
ARRAY_CONTAINS_ALL(идентификатор, выражение)Фильтрующее выражениеПроверяет, присутствуют ли все элементы указанного списка в поле ARRAY.
ARRAY_CONTAINS_ANY(идентификатор, выражение)Фильтрующее выражениеПроверяет, присутствует ли хотя бы один элемент из указанного списка в поле ARRAY.
ARRAY_LENGTH(идентификатор)Фильтрующее выражениеВозвращает количество элементов в поле ARRAY; может использоваться в сочетании с операторами сравнения для фильтрации.
ARRAY_APPENDupsert with field_opsДобавляет элементы полезных данных к существующему полю ARRAY. Доступно в Milvus версии 2.6.17 и более поздних.
ARRAY_REMOVEupsert с field_opsУдаляет из существующего поля ARRAY все элементы, которые соответствуют значению в полезных данных запроса. Доступно в Milvus версии 2.6.17 и выше.

ARRAY_CONTAINS

Оператор « ARRAY_CONTAINS » проверяет наличие конкретного элемента в поле типа «array». Это полезно, когда требуется найти сущности, в массиве которых присутствует заданный элемент.

Пример

Предположим, у вас есть поле типа «массив» history_temperatures, содержащее зафиксированные минимальные температуры за разные годы. Чтобы найти все сущности, в массиве которых содержится значение 23, можно использовать следующее выражение фильтра:

filter = 'ARRAY_CONTAINS(history_temperatures, 23)'

Это вернёт все сущности, в массиве которых history_temperatures содержится значение 23.

ARRAY_CONTAINS_ALL

Оператор ARRAY_CONTAINS_ALL гарантирует, что все элементы указанного списка присутствуют в поле массива. Этот оператор полезен, когда требуется найти сущности, содержащие несколько значений в массиве.

Пример

Если необходимо найти все сущности, в массиве которых history_temperatures содержатся как 23, так и 24, можно использовать:

filter = 'ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])'

Это вернёт все сущности, в массиве которых history_temperatures содержатся оба указанных значения.

ARRAY_CONTAINS_ANY

Оператор ` ARRAY_CONTAINS_ANY ` проверяет, присутствует ли в поле массива хотя бы один из элементов указанного списка. Это полезно, когда требуется найти сущности, содержащие хотя бы одно из указанных значений в массиве.

Пример

Чтобы найти все сущности, в массиве которых history_temperatures содержится либо 23, либо 24, можно использовать:

filter = 'ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])'

Это вернёт все сущности, в массиве которых history_temperatures содержится хотя бы одно из значений: 23 или 24.

ARRAY_LENGTH

Функция ARRAY_LENGTH возвращает длину (количество элементов) массивного поля. Она принимает ровно один параметр: идентификатор массивного поля.

Пример

Чтобы найти все сущности, у которых массив history_temperatures содержит менее 10 элементов:

filter = 'ARRAY_LENGTH(history_temperatures) < 10'

Это вернёт все сущности, у которых массив history_temperatures содержит менее 10 элементов.

ARRAY_APPENDCompatible with Milvus 2.6.17+

Оператор ` ARRAY_APPEND ` добавляет элементы полезных данных к существующему полю `ARRAY` во время запроса ` upsert `. Это не выражение фильтра. Используйте его, если хотите добавить значения в массив, не запрашивая сначала текущее значение массива.

В следующем примере на языке Python оператор ` "premium" ` добавляется к полю `ARRAY` при выполнении запроса ` tags ` для сущности, первичный ключ которой — ` 1`:

from pymilvus import FieldOp, MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

client.upsert(
    collection_name="users",
    data=[{"pk": 1, "tags": ["premium"]}],
    field_ops={"tags": FieldOp.array_append()},
)

Добавление ARRAY_APPEND к полю с помощью field_ops включает семантику частичного обновления для этого поля. Полную информацию о рабочем процессе, поддерживаемых типах элементов и ограничениях см. в разделе «Поля ARRAY с оператором Upsert в режиме слияния».

ARRAY_REMOVECompatible with Milvus 2.6.17+

Оператор ` ARRAY_REMOVE ` удаляет из существующего поля типа `ARRAY` все элементы, которые соответствуют значению в полезной нагрузке запроса, во время выполнения запроса ` upsert `. Это не выражение фильтра. Используйте его, если необходимо удалить соответствующие значения из массива без предварительного запроса текущего значения массива.

В следующем примере на языке Python удаляются элементы, соответствующие выражению "trial", из поля ARRAY с помощью операции « tags » для сущности, первичный ключ которой — 1:

from pymilvus import FieldOp, MilvusClient

client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

client.upsert(
    collection_name="users",
    data=[{"pk": 1, "tags": ["trial"]}],
    field_ops={"tags": FieldOp.array_remove()},
)

Привязка ARRAY_REMOVE к полю с помощью field_ops включает семантику частичного обновления для этого поля. Полную информацию о рабочем процессе, поддерживаемых типах элементов и ограничениях см. в разделе «Поля ARRAY с операцией Upsert в режиме слияния».

ПереведеноDeepL

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?