Operatori di raccolta OData in Ricerca di intelligenza artificiale di Azure - any
e all
Quando si scrive un'espressione di filtro OData da usare con Ricerca di intelligenza artificiale di Azure, è spesso utile filtrare in base ai campi della raccolta. È possibile ottenere questo risultato usando gli any
operatori e all
.
Sintassi
Il formato EBNF (Extended Backus-Naur Form) seguente definisce la grammatica di un'espressione OData che usa any
o all
.
collection_filter_expression ::=
field_path'/all(' lambda_expression ')'
| field_path'/any(' lambda_expression ')'
| field_path'/any()'
lambda_expression ::= identifier ':' boolean_expression
È disponibile anche un diagramma di sintassi interattivo:
Nota
Vedere Informazioni di riferimento sulla sintassi delle espressioni OData per Azure AI Search per l'EBNF completo.
Esistono tre forme di espressione che filtrano le raccolte.
- I primi due iterazioni su un campo di raccolta, applicando un predicato specificato sotto forma di espressione lambda a ogni elemento della raccolta.
- Un'espressione che usa
all
restituiscetrue
se il predicato è true per ogni elemento della raccolta. - Un'espressione che usa
any
restituiscetrue
se il predicato è true per almeno un elemento della raccolta.
- Un'espressione che usa
- La terza forma di filtro di raccolta viene
any
utilizzata senza un'espressione lambda per verificare se un campo di raccolta è vuoto. Se la raccolta contiene elementi, restituiscetrue
. Se la raccolta è vuota, restituiscefalse
.
Un'espressione lambda in un filtro di raccolta è simile al corpo di un ciclo in un linguaggio di programmazione. Definisce una variabile, denominata variabile di intervallo, che contiene l'elemento corrente della raccolta durante l'iterazione. Definisce anche un'altra espressione booleana che rappresenta i criteri di filtro da applicare alla variabile di intervallo per ogni elemento della raccolta.
Esempi
Trova la corrispondenza con i documenti il cui tags
campo contiene esattamente la stringa "wifi":
tags/any(t: t eq 'wifi')
Trova la corrispondenza con i documenti in cui ogni elemento del ratings
campo è compreso tra 3 e 5, inclusi:
ratings/all(r: r ge 3 and r le 5)
Trova la corrispondenza con i documenti in cui una delle coordinate geografiche nel locations
campo si trova all'interno del poligono specificato:
locations/any(loc: geo.intersects(loc, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))
Trova la corrispondenza con i documenti in cui il rooms
campo è vuoto:
not rooms/any()
Trova la corrispondenza con i documenti in cui (per tutte le stanze) il rooms/amenities
campo contiene "tv" e rooms/baseRate
è minore di 100:
rooms/all(room: room/amenities/any(a: a eq 'tv') and room/baseRate lt 100.0)
Limiti
Non tutte le funzionalità delle espressioni di filtro sono disponibili all'interno del corpo di un'espressione lambda. Le limitazioni variano a seconda del tipo di dati del campo di raccolta da filtrare. Nella tabella seguente vengono riepilogate le limitazioni.
Tipo di dati | Funzionalità consentite nelle espressioni lambda con any |
Funzionalità consentite nelle espressioni lambda con all |
---|---|---|
Collection(Edm.ComplexType) |
Tutto tranne search.ismatch e search.ismatchscoring |
Uguali |
Collection(Edm.String) |
Confronti con eq o search.in Combinazione di sottoespressioni con or |
Confronti con ne o not search.in() Combinazione di sottoespressioni con and |
Collection(Edm.Boolean) |
Confronti con eq o ne |
Uguali |
Collection(Edm.GeographyPoint) |
Uso di geo.distance con lt o le geo.intersects Combinazione di sottoespressioni con or |
Uso di geo.distance con gt o ge not geo.intersects(...) Combinazione di sottoespressioni con and |
Collection(Edm.DateTimeOffset) , Collection(Edm.Double) , Collection(Edm.Int32) Collection(Edm.Int64) |
Confronti con eq , ne , lt , gt , le o ge Combinazione di confronti con altre sottoespressioni tramite or Combinazione di confronti ad eccezione di ne con altre sottoespressioni che usano and Espressioni che usano combinazioni di and e or in Forma normale disgiuntiva (DNF) |
Confronti con eq , ne , lt , gt , le o ge Combinazione di confronti con altre sottoespressioni tramite and Combinazione di confronti ad eccezione di eq con altre sottoespressioni che usano or Espressioni che usano combinazioni di and e or in Forma normale congiuntiva (CNF) |
Per altri dettagli su queste limitazioni e esempi, vedere Risoluzione dei problemi relativi ai filtri di raccolta in Ricerca di intelligenza artificiale di Azure. Per informazioni più approfondite sul motivo per cui esistono queste limitazioni, vedere Informazioni sui filtri di raccolta in Ricerca di intelligenza artificiale di Azure.