Operatori ARRAY
Milvus mette a disposizione operatori ARRAY per filtrare i campi ARRAY e aggiornare parzialmente i valori dei campi ARRAY.
Tutti gli elementi all’interno di un array devono essere dello stesso tipo e le strutture annidate all’interno degli array vengono trattate come semplici stringhe. Pertanto, quando si lavora con i campi ARRAY, è consigliabile evitare un annidamento eccessivamente profondo e assicurarsi che le strutture dei dati siano il più possibile piatte per ottenere prestazioni ottimali.
Gli operatori ARRAY in Milvus coprono due scenari di utilizzo:
Espressioni di filtro per query e ricerche.
Aggiornamenti parziali nelle richieste di tipo "
upsert".
Operatori ARRAY disponibili
La tabella seguente elenca gli operatori ARRAY disponibili in Milvus.
| Operatore | Utilizzo in | Descrizione |
|---|---|---|
| ARRAY_CONTAINS(identificatore, espressione) | Espressione di filtro | Verifica se un elemento specifico è presente in un campo ARRAY. |
| ARRAY_CONTAINS_ALL(identificatore, espr) | Espressione di filtro | Verifica se tutti gli elementi di un elenco specificato sono presenti in un campo ARRAY. |
| ARRAY_CONTAINS_ANY(identificatore, espressione) | Espressione di filtro | Verifica se almeno un elemento di un elenco specificato è presente in un campo ARRAY. |
| ARRAY_LENGTH(identificatore) | Espressione di filtro | Restituisce il numero di elementi presenti in un campo ARRAY e può essere combinata con operatori di confronto per il filtraggio. |
| ARRAY_APPEND | upsert con field_ops | Aggiunge elementi di payload a un campo ARRAY esistente. Disponibile in Milvus v2.6.17 e versioni successive. |
| ARRAY_REMOVE | upsert con field_ops | Rimuove da un campo ARRAY esistente tutti gli elementi che corrispondono a un valore presente nel payload della richiesta. Disponibile in Milvus v2.6.17 e versioni successive. |
ARRAY_CONTAINS
L'operatore " ARRAY_CONTAINS " verifica se un elemento specifico è presente in un campo ARRAY. È utile quando si desidera individuare entità in cui un determinato elemento è presente nell'array.
Esempio
Supponiamo di avere un campo array denominato ` history_temperatures`, che contiene le temperature minime registrate in diversi anni. Per individuare tutte le entità in cui l’array contiene il valore ` 23`, è possibile utilizzare la seguente espressione di filtro:
filter = 'ARRAY_CONTAINS(history_temperatures, 23)'
In questo modo verranno restituite tutte le entità in cui l’array ` history_temperatures ` contiene il valore ` 23`.
ARRAY_CONTAINS_ALL
L’operatore ARRAY_CONTAINS_ALL garantisce che tutti gli elementi dell’elenco specificato siano presenti nel campo array. Questo operatore è utile quando si desidera individuare entità che contengono più valori nell’array.
Esempio
Se si desidera trovare tutte le entità in cui l’array ` history_temperatures ` contiene sia ` 23 ` che ` 24`, è possibile utilizzare:
filter = 'ARRAY_CONTAINS_ALL(history_temperatures, [23, 24])'
Questo restituirà tutte le entità in cui l’array ` history_temperatures ` contiene entrambi i valori specificati.
ARRAY_CONTAINS_ANY
L'operatore ARRAY_CONTAINS_ANY verifica se uno qualsiasi degli elementi dell'elenco specificato è presente nel campo array. Ciò è utile quando si desidera individuare le entità che contengono almeno uno dei valori specificati nell'array.
Esempio
Per trovare tutte le entità in cui l'array ` history_temperatures ` contiene ` 23 ` o ` 24`, è possibile utilizzare:
filter = 'ARRAY_CONTAINS_ANY(history_temperatures, [23, 24])'
Questo restituirà tutte le entità in cui l’array ` history_temperatures ` contiene almeno uno dei valori ` 23 ` o ` 24`.
ARRAY_LENGTH
L'ARRAY_LENGTH e restituisce la lunghezza (numero di elementi) di un campo array. Accetta esattamente un parametro: l'identificatore del campo array.
Esempio
Per trovare tutte le entità in cui l’array ` history_temperatures ` contiene meno di 10 elementi:
filter = 'ARRAY_LENGTH(history_temperatures) < 10'
Questo restituirà tutte le entità in cui l’array ` history_temperatures ` contiene meno di 10 elementi.
ARRAY_APPENDCompatible with Milvus 2.6.17+
L'operatore ARRAY_APPEND aggiunge elementi di payload a un campo ARRAY esistente durante una richiesta upsert. Non si tratta di un'espressione di filtro. Utilizzarlo quando si desidera aggiungere valori a un array senza prima interrogare il valore corrente dell'array.
Il seguente esempio in Python aggiunge ` "premium" ` al campo ARRAY dell'tags dell'entità la cui chiave primaria è ` 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()},
)
L’aggiunta di ARRAY_APPEND a un campo tramite field_ops abilita la semantica dell’aggiornamento parziale per quel campo. Per il flusso di lavoro completo, i tipi di elementi supportati e i limiti, fare riferimento a Campi ARRAY Upsert in modalità di unione.
ARRAY_REMOVECompatible with Milvus 2.6.17+
L’operatore ` ARRAY_REMOVE ` rimuove tutti gli elementi da un campo `ARRAY` esistente che corrispondono a un valore presente nel payload della richiesta durante una richiesta di ` upsert `. Non si tratta di un’espressione di filtro. Utilizzarlo quando si desidera rimuovere i valori corrispondenti da un array senza prima interrogare il valore corrente dell’array.
Il seguente esempio in Python rimuove ` "trial" ` dal campo ARRAY ` tags ` dell’entità la cui chiave primaria è ` 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()},
)
L’associazione di ARRAY_REMOVE a un campo tramite field_ops abilita la semantica dell’aggiornamento parziale per quel campo. Per il flusso di lavoro completo, i tipi di elementi supportati e i limiti, fare riferimento a Campi ARRAY Upsert in modalità di unione.