Condividi tramite


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:

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 restituisce true se il predicato è true per ogni elemento della raccolta.
    • Un'espressione che usa any restituisce true se il predicato è true per almeno un elemento della raccolta.
  • 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, restituisce true. Se la raccolta è vuota, restituisce false.

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.

Passaggi successivi