Operadores de ARRAY

Milvus ofrece operadores de ARRAY para filtrar campos de ARRAY y actualizar parcialmente los valores de dichos campos.

Todos los elementos de una matriz deben ser del mismo tipo, y las estructuras anidadas dentro de las matrices se tratan como cadenas de texto simples. Por lo tanto, al trabajar con campos ARRAY, es recomendable evitar anidamientos excesivamente profundos y asegurarse de que las estructuras de datos sean lo más planas posible para obtener un rendimiento óptimo.

Los operadores de ARRAY en Milvus abarcan dos escenarios de uso:

  • Expresiones de filtro para consultas y búsquedas.

  • Actualizaciones parciales en solicitudes de « upsert ».

Operadores ARRAY disponibles

La siguiente tabla enumera los operadores ARRAY disponibles en Milvus.

OperadorUso enDescripción
ARRAY_CONTAINS(identificador, expr)Expresión de filtroComprueba si un elemento específico existe en un campo ARRAY.
ARRAY_CONTAINS_ALL(identificador, expr)Expresión de filtroComprueba si todos los elementos de una lista especificada existen en un campo ARRAY.
ARRAY_CONTAINS_ANY(identificador, expr)Expresión de filtroComprueba si algún elemento de una lista especificada existe en un campo ARRAY.
ARRAY_LENGTH(identificador)Expresión de filtroDevuelve el número de elementos de un campo ARRAY y puede combinarse con operadores de comparación para filtrar.
ARRAY_APPENDupsert con field_opsAñade elementos de carga útil a un campo ARRAY ya existente. Disponible en Milvus v2.6.17 y versiones posteriores.
ARRAY_REMOVEupsert con field_opsElimina de un campo ARRAY existente todos los elementos que coincidan con un valor de la carga útil de la solicitud. Disponible en Milvus v2.6.17 y versiones posteriores.

ARRAY_CONTAINS

El operador « ARRAY_CONTAINS » comprueba si un elemento específico existe en un campo ARRAY. Resulta útil cuando se desea encontrar entidades en las que un elemento determinado esté presente en el ARRAY.

Ejemplo

Supongamos que tienes un campo de matriz history_temperatures, que contiene las temperaturas mínimas registradas en diferentes años. Para encontrar todas las entidades en las que la matriz contenga el valor 23, puedes utilizar la siguiente expresión de filtro:

filter = 'ARRAY_CONTAINS(history_temperatures, 23)'

Esto devolverá todas las entidades en las que el array « history_temperatures » contenga el valor « 23 ».

ARRAY_CONTAINS_ALL

El operador « ARRAY_CONTAINS_ALL » garantiza que todos los elementos de la lista especificada estén presentes en el campo de matriz. Este operador resulta útil cuando se desea buscar entidades que contengan varios valores en la matriz.

Ejemplo

Si desea encontrar todas las entidades en las que el array « history_temperatures » contenga tanto « 23 » como « 24 », puede utilizar:

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

Esto devolverá todas las entidades en las que el array ` history_temperatures ` contenga ambos valores especificados.

ARRAY_CONTAINS_ANY

El operador ` ARRAY_CONTAINS_ANY ` comprueba si alguno de los elementos de la lista especificada está presente en el campo de matriz. Esto resulta útil cuando se desea encontrar entidades que contengan al menos uno de los valores especificados en la matriz.

Ejemplo

Para encontrar todas las entidades en las que el array ` history_temperatures ` contenga « 23 » o « 24 », puedes utilizar:

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

Esto devolverá todas las entidades en las que el array ` history_temperatures ` contenga al menos uno de los valores ` 23 ` o ` 24`.

ARRAY_LENGTH

La función ` ARRAY_LENGTH ` devuelve la longitud (número de elementos) de un campo de matriz. Acepta exactamente un parámetro: el identificador del campo de matriz.

Ejemplo

Para encontrar todas las entidades en las que el array « history_temperatures » tenga menos de 10 elementos:

filter = 'ARRAY_LENGTH(history_temperatures) < 10'

Esto devolverá todas las entidades en las que el array « history_temperatures » tenga menos de 10 elementos.

ARRAY_APPENDCompatible with Milvus 2.6.17+

El operador ` ARRAY_APPEND ` añade elementos de carga útil a un campo `ARRAY` existente durante una solicitud ` upsert `. No es una expresión de filtro. Úsalo cuando quieras añadir valores a un array sin consultar primero el valor actual del mismo.

El siguiente ejemplo en Python añade « "premium" » al campo ARRAY de « tags » de la entidad cuya clave primaria es « 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()},
)

Al añadir « ARRAY_APPEND » a un campo mediante « field_ops », se habilita la semántica de actualización parcial para ese campo. Para conocer el flujo de trabajo completo, los tipos de elementos admitidos y los límites, consulta «Campos ARRAY de Upsert en modo de fusión».

ARRAY_REMOVECompatible with Milvus 2.6.17+

El operador « ARRAY_REMOVE » elimina todos los elementos de un campo ARRAY existente que coincidan con un valor de la carga útil de la solicitud durante una solicitud de « upsert ». No se trata de una expresión de filtro. Utilícelo cuando desee eliminar valores coincidentes de una matriz sin consultar primero el valor actual de la matriz.

El siguiente ejemplo en Python elimina « "trial" » del campo ARRAY « tags » de la entidad cuya clave primaria es « 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()},
)

Al asociar « ARRAY_REMOVE » a un campo mediante « field_ops », se habilita la semántica de actualización parcial para ese campo. Para conocer el flujo de trabajo completo, los tipos de elementos admitidos y los límites, consulta «Campos ARRAY de Upsert en modo de fusión».

Traducido porDeepL

Prueba Milvus gestionado gratis

Zilliz Cloud no da problemas, funciona con Milvus y es 10 veces más rápido.

Empezar
Feedback

¿Fue útil esta página?