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.
| Operador | Uso en | Descripción |
|---|---|---|
| ARRAY_CONTAINS(identificador, expr) | Expresión de filtro | Comprueba si un elemento específico existe en un campo ARRAY. |
| ARRAY_CONTAINS_ALL(identificador, expr) | Expresión de filtro | Comprueba si todos los elementos de una lista especificada existen en un campo ARRAY. |
| ARRAY_CONTAINS_ANY(identificador, expr) | Expresión de filtro | Comprueba si algún elemento de una lista especificada existe en un campo ARRAY. |
| ARRAY_LENGTH(identificador) | Expresión de filtro | Devuelve el número de elementos de un campo ARRAY y puede combinarse con operadores de comparación para filtrar. |
| ARRAY_APPEND | upsert con field_ops | Añade elementos de carga útil a un campo ARRAY ya existente. Disponible en Milvus v2.6.17 y versiones posteriores. |
| ARRAY_REMOVE | upsert con field_ops | Elimina 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».