Operatori di StructArrayCompatible with Milvus 3.0.x
L'array di strutture, o StructArray, di un'entità memorizza un insieme ordinato di elementi Struct. Ogni struttura dell'array condivide lo stesso schema predefinito, che comprende più vettori e campi scalari. Quando un sottocampo scalare in una Struct è indicizzato, è possibile utilizzare i filtri elemento e gli operatori della famiglia match per eseguire un filtraggio scalare su di esso.
Un filtro elemento seleziona le entità che contengono almeno un valore in un campo StructArray corrispondente al predicato specificato. Gli operatori della famiglia match, invece, vengono utilizzati per trovare entità che contengono numeri o proporzioni specifiche di valori in un campo StructArray che corrisponde al predicato specificato.
Quando si costruiscono i predicati su $[subField], assicurarsi che il sottocampo sia indicizzato se si lavora con set di dati di grandi dimensioni, poiché questi operatori richiedono l'iterazione degli elementi dell'array per ogni entità candidata.
Filtro elemento
Si utilizzano i filtri di elementi quando è necessario verificare se un'entità contiene i valori che corrispondono a un predicato specifico nel suo campo StructArray.
element_filter(chunks, $[text] LIKE "Red%")
Come mostrato nell'espressione del filtro elemento sopra riportata, il filtro elemento restituisce le entità che contengono almeno un chunk che inizia per "Red" nel sottocampo text. Il primo parametro è il nome del campo StructArray, mentre il secondo parametro è il predicato che si applica al sottocampo Struct.
È possibile utilizzare gli operatori di confronto, di intervallo e aritmetici per costruire la condizione e gli operatori logici per concatenare più condizioni, come mostrato in Operatori di base.
Tuttavia, quando si costruisce un'espressione di filtro che combina sia un predicato di livello entità che un filtro di elemento, si deve sempre posizionare il fltler di elemento alla fine, come mostrato nell'esempio seguente.
# correct
id > 0 && element_filter(chunks, $[x] > 1)
# incorrect, resulting errors
element_filter(chunks, $[x] > 1) && id > 0
Operatori di famiglia di corrispondenze
Gli operatori della famiglia match funzionano anche su un campo StructArray. Invece di verificare semplicemente se un elemento esiste, è possibile determinare quanti elementi (o quale proporzione) devono soddisfare un predicato di elemento.
MATCH_ANY(identifier, predicate): restituisce le entità che contengono almeno un pezzo che inizia con "Red" nel sottocampotext; semanticamente, questo è equivalente aelement_filter.MATCH_ALL(identifier, predicate): restituisce entità i cui sottocampi di testo in tutti i chunk iniziano con "Red".MATCH_LEAST(identifier, predicate, k): restituisce le entità che contengono almenokparti che iniziano con "Rosso" nel sottocampotext.MATCH_MOST(identifier, predicate, k): restituisce le entità che contengono al massimokpezzi che iniziano con "Rosso" nel sottocampotext.MATCH_EXACT(identifier, predicate, k): restituisce le entità che contengono esattamentekpezzi che iniziano con "Rosso" nel sottocampotext.
MATCH_ANY
Questo operatore dà esito positivo se almeno un elemento della matrice soddisfa il predicato, il che indica che l'equivalente strutturale di un OR logico è presente in tutti gli elementi della matrice.
Gli operatori MATCH_ANY e i filtri di elementi sono semanticamente identici e possono essere utilizzati in modo intercambiabile. Quando è necessario esprimere la logica count(matches) >= 1, è opportuno utilizzarli.
ESEMPIO:
L'esempio seguente restituisce le entità in cui qualsiasi parte del documento inizia con "Red".
MATCH_ANY(chunks, $[text] LIKE 'Red%')
MATCH_ALL
Questo operatore è vero solo se ogni singolo elemento della matrice soddisfa il predicato.
Quando è necessario esprimere la logica count(matches) == total elements, utilizzare questo operatore.
ESEMPIO:
MATCH_ALL(chunks, $[text] LIKE 'Red%')
MATCH_LEAST
Questo operatore è un filtro quantitativo che restituisce vero se il numero di elementi che soddisfano il predicato è maggiore o uguale a una costante k specificata.
Quando è necessario esprimere la logica count(matches) >= k, utilizzare questo operatore.
ESEMPIO:
MATCH_LEAST(chunks, $[text] LIKE 'Red%', 3)
MATCH_MOST
Questo operatore è un filtro quantitativo che restituisce true se il numero di elementi che soddisfano il predicato è minore o uguale a una costante k specificata.
È particolarmente utile per filtrare le entità che mirano troppo a una parola chiave specifica (riduzione del rumore).
ESEMPIO:
MATCH_MOST(chunks, $[text] LIKE 'Red%', 3)
MATCH_EXACT
Questo operatore è l'operatore quantitativo più restrittivo della famiglia. Restituisce true se e solo se il numero di elementi che soddisfano il predicato è esattamente k.
ESEMPIO:
MATCH_EXACT(chunks, $[text] LIKE 'Red%', 3)