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.

OperatoreUtilizzo inDescrizione
ARRAY_CONTAINS(identificatore, espressione)Espressione di filtroVerifica se un elemento specifico è presente in un campo ARRAY.
ARRAY_CONTAINS_ALL(identificatore, espr)Espressione di filtroVerifica se tutti gli elementi di un elenco specificato sono presenti in un campo ARRAY.
ARRAY_CONTAINS_ANY(identificatore, espressione)Espressione di filtroVerifica se almeno un elemento di un elenco specificato è presente in un campo ARRAY.
ARRAY_LENGTH(identificatore)Espressione di filtroRestituisce il numero di elementi presenti in un campo ARRAY e può essere combinata con operatori di confronto per il filtraggio.
ARRAY_APPENDupsert con field_opsAggiunge elementi di payload a un campo ARRAY esistente. Disponibile in Milvus v2.6.17 e versioni successive.
ARRAY_REMOVEupsert con field_opsRimuove 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.

Tradotto daDeepL

Prova Milvus gestito gratuitamente

Zilliz Cloud è senza problemi, basato su Milvus e 10 volte più veloce.

Inizia
Feedback

Questa pagina è stata utile?