Operadores de ARRAY
O Milvus disponibiliza operadores ARRAY para filtrar campos ARRAY e atualizar parcialmente os valores dos campos ARRAY.
Todos os elementos de um ARRAY devem ser do mesmo tipo, e as estruturas aninhadas dentro dos ARRAYs são tratadas como cadeias de caracteres simples. Por conseguinte, ao trabalhar com campos ARRAY, é aconselhável evitar aninhamentos excessivamente profundos e garantir que as suas estruturas de dados sejam o mais planas possível, para um desempenho ideal.
Os operadores ARRAY no Milvus abrangem dois cenários de utilização:
Expressões de filtragem para consultas e pesquisas.
Atualizações parciais em pedidos «
upsert».
Operadores ARRAY disponíveis
A tabela seguinte lista os operadores ARRAY disponíveis no Milvus.
| Operador | Utilização em | Descrição |
|---|---|---|
| ARRAY_CONTAINS(identificador, expressão) | Expressão de filtragem | Verifica se um elemento específico existe num campo ARRAY. |
| ARRAY_CONTAINS_ALL(identificador, expressão) | Expressão de filtro | Verifica se todos os elementos de uma lista especificada existem num campo ARRAY. |
| ARRAY_CONTAINS_ANY(identificador, expressão) | Expressão de filtro | Verifica se algum elemento de uma lista especificada existe num campo ARRAY. |
| ARRAY_LENGTH(identificador) | Expressão de filtragem | Devolve o número de elementos num campo ARRAY e pode ser combinada com operadores de comparação para fins de filtragem. |
| ARRAY_APPEND | upsert com field_ops | Acrescenta elementos de carga útil a um campo ARRAY existente. Disponível no Milvus v2.6.17 e versões posteriores. |
| ARRAY_REMOVE | upsert com field_ops | Remove todos os elementos de um campo ARRAY existente que correspondam a um valor na carga útil do pedido. Disponível no Milvus v2.6.17 e versões posteriores. |
ARRAY_CONTAINS
O operador « ARRAY_CONTAINS » verifica se um elemento específico existe num campo «array». É útil quando se pretende encontrar entidades em que um determinado elemento esteja presente no «array».
Exemplo
Suponha que tem um campo de matriz history_temperatures, que contém as temperaturas mínimas registadas em diferentes anos. Para encontrar todas as entidades em que a matriz contenha o valor 23, pode utilizar a seguinte expressão de filtro:
filter = 'ARRAY_CONTAINS(history_temperatures, 23)'
Isto irá devolver todas as entidades em que a matriz ` history_temperatures ` contenha o valor ` 23`.
ARRAY_CONTAINS_ALL
O operador « ARRAY_CONTAINS_ALL » garante que todos os elementos da lista especificada estão presentes no campo de matriz. Este operador é útil quando pretende encontrar entidades que contenham vários valores na matriz.
Exemplo
Se pretender encontrar todas as entidades em que a matriz ` history_temperatures ` contenha tanto ` 23 ` como ` 24`, pode utilizar:
filter = 'ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])'
Isto irá devolver todas as entidades em que a matriz ` history_temperatures ` contenha ambos os valores especificados.
ARRAY_CONTAINS_ANY
O operador ARRAY_CONTAINS_ANY verifica se algum dos elementos da lista especificada está presente no campo do array. Isto é útil quando se pretende encontrar entidades que contenham pelo menos um dos valores especificados no array.
Exemplo
Para encontrar todas as entidades em que o array ` history_temperatures ` contenha ` 23 ` ou ` 24`, pode utilizar:
filter = 'ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])'
Isto irá devolver todas as entidades em que a matriz ` history_temperatures ` contenha pelo menos um dos valores ` 23 ` ou ` 24`.
ARRAY_LENGTH
A função ` ARRAY_LENGTH ` devolve o comprimento (número de elementos) de um campo de matriz. Aceita exatamente um parâmetro: o identificador do campo de matriz.
Exemplo
Para encontrar todas as entidades em que a matriz « history_temperatures » tenha menos de 10 elementos:
filter = 'ARRAY_LENGTH(history_temperatures) < 10'
Isto irá devolver todas as entidades em que a matriz « history_temperatures » tenha menos de 10 elementos.
ARRAY_APPENDCompatible with Milvus 2.6.17+
O operador ARRAY_APPEND acrescenta elementos de carga útil a um campo ARRAY existente durante um pedido upsert. Não se trata de uma expressão de filtro. Utilize-o quando pretender adicionar valores a um array sem primeiro consultar o valor atual do array.
O exemplo Python seguinte acrescenta ` "premium" ` ao campo `ARRAY` de ` tags ` da entidade cuja chave primária é ` 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()},
)
A adição de ARRAY_APPEND a um campo através de field_ops permite a semântica de atualização parcial para esse campo. Para conhecer o fluxo de trabalho completo, os tipos de elementos suportados e os limites, consulte Campos ARRAY de «Upsert» no modo de fusão.
ARRAY_REMOVECompatible with Milvus 2.6.17+
O operador « ARRAY_REMOVE » remove todos os elementos de um campo «ARRAY» existente que correspondam a um valor na carga útil do pedido durante um pedido « upsert ». Não se trata de uma expressão de filtro. Utilize-o quando pretender remover valores correspondentes de um array sem primeiro consultar o valor atual do array.
O exemplo Python seguinte remove « "trial" » do campo ARRAY « tags » da entidade cuja chave primária é « 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()},
)
Atribuir « ARRAY_REMOVE » a um campo através de « field_ops » permite a semântica de atualização parcial para esse campo. Para conhecer o fluxo de trabalho completo, os tipos de elementos suportados e os limites, consulte «Campos ARRAY de Upsert no modo de fusão».