Operatori di confronto OData in Ricerca di intelligenza artificiale di Azure - eq
, ne
lt
gt
ge
ele
L'operazione più semplice in un'espressione di filtro OData in Ricerca di intelligenza artificiale di Azure consiste nel confrontare un campo con un determinato valore. Sono possibili due tipi di confronto: confronto di uguaglianza e confronto tra intervalli. Per confrontare un campo con un valore costante, è possibile usare gli operatori seguenti:
Operatori di uguaglianza:
eq
: verificare se un campo è uguale a un valore costantene
: verificare se un campo non è uguale a un valore costante
Operatori di intervallo:
gt
: verificare se un campo è maggiore di un valore costantelt
: verificare se un campo è minore di un valore costantege
: verificare se un campo è maggiore o uguale a un valore costantele
: verificare se un campo è minore o uguale a un valore costante
È possibile usare gli operatori di intervallo in combinazione con gli operatori logici per verificare se un campo si trova all'interno di un determinato intervallo di valori. Vedere gli esempi più avanti in questo articolo.
Nota
Se si preferisce, è possibile inserire il valore costante a sinistra dell'operatore e il nome del campo a destra. Per gli operatori di intervallo, il significato del confronto viene invertito. Ad esempio, se il valore costante è a sinistra, gt
verificare se il valore costante è maggiore del campo. È anche possibile usare gli operatori di confronto per confrontare il risultato di una funzione, ad esempio geo.distance
, con un valore . Per le funzioni booleane, search.ismatch
ad esempio , il confronto del risultato con true
o false
è facoltativo.
Sintassi
L'EBNF seguente (Extended Backus-Naur Form) definisce la grammatica di un'espressione OData che usa gli operatori di confronto.
comparison_expression ::=
variable_or_function comparison_operator constant |
constant comparison_operator variable_or_function
variable_or_function ::= variable | function_call
comparison_operator ::= 'gt' | 'lt' | 'ge' | 'le' | 'eq' | 'ne'
È 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 due forme di espressioni di confronto. L'unica differenza tra di esse è se la costante viene visualizzata sul lato sinistro o destro dell'operatore. L'espressione dall'altra parte dell'operatore deve essere una variabile o una chiamata di funzione. Una variabile può essere un nome di campo o una variabile di intervallo nel caso di un'espressione lambda.
Tipi di dati per i confronti
I tipi di dati su entrambi i lati di un operatore di confronto devono essere compatibili. Ad esempio, se il lato sinistro è un campo di tipo Edm.DateTimeOffset
, il lato destro deve essere una costante data/ora. I tipi di dati numerici sono più flessibili. È possibile confrontare variabili e funzioni di qualsiasi tipo numerico con costanti di qualsiasi altro tipo numerico, con alcune limitazioni, come descritto nella tabella seguente.
Tipo di variabile o funzione | Tipo valore costante | Limiti |
---|---|---|
Edm.Double |
Edm.Double |
Il confronto è soggetto a regole speciali per NaN |
Edm.Double |
Edm.Int64 |
La costante viene convertita in Edm.Double , con conseguente perdita di precisione per i valori di grandezza elevata |
Edm.Double |
Edm.Int32 |
n/d |
Edm.Int64 |
Edm.Double |
I confronti con NaN , -INF o INF non sono consentiti |
Edm.Int64 |
Edm.Int64 |
n/d |
Edm.Int64 |
Edm.Int32 |
La costante viene convertita in Edm.Int64 prima del confronto |
Edm.Int32 |
Edm.Double |
I confronti con NaN , -INF o INF non sono consentiti |
Edm.Int32 |
Edm.Int64 |
n/d |
Edm.Int32 |
Edm.Int32 |
n/d |
Per i confronti non consentiti, ad esempio il confronto di un campo di tipo Edm.Int64
con NaN
, l'API REST di Ricerca intelligenza artificiale di Azure restituirà un errore "HTTP 400: Richiesta non valida".
Importante
Anche se i confronti di tipi numerici sono flessibili, è consigliabile scrivere confronti nei filtri in modo che il valore costante sia dello stesso tipo di dati della variabile o della funzione in cui viene confrontato. Ciò è particolarmente importante quando si combinano valori a virgola mobile e integer, in cui sono possibili conversioni implicite che perdono precisione.
Casi speciali per null
e NaN
Quando si usano gli operatori di confronto, è importante ricordare che tutti i campi non di raccolta in Ricerca intelligenza artificiale di Azure possono essere null
potenzialmente . La tabella seguente mostra tutti i risultati possibili per un'espressione di confronto in cui entrambi i lati possono essere null
:
Operatore | Risultato quando solo il campo o la variabile è null |
Risultato quando solo la costante è null |
Risultato quando il campo o la variabile e la costante sono null |
---|---|---|---|
gt |
false |
HTTP 400: Errore di richiesta non valida | HTTP 400: Errore di richiesta non valida |
lt |
false |
HTTP 400: Errore di richiesta non valida | HTTP 400: Errore di richiesta non valida |
ge |
false |
HTTP 400: Errore di richiesta non valida | HTTP 400: Errore di richiesta non valida |
le |
false |
HTTP 400: Errore di richiesta non valida | HTTP 400: Errore di richiesta non valida |
eq |
false |
false |
true |
ne |
true |
true |
false |
In sintesi, null
è uguale solo a se stesso e non è minore o maggiore di qualsiasi altro valore.
Se l'indice include campi di tipo Edm.Double
e si caricano NaN
valori in tali campi, sarà necessario tener conto di tale valore durante la scrittura dei filtri. Ricerca di intelligenza artificiale di Azure implementa lo standard IEEE 754 per la gestione NaN
dei valori e i confronti con tali valori producono risultati non ovvi, come illustrato nella tabella seguente.
Operatore | Risultato quando almeno un operando è NaN |
---|---|
gt |
false |
lt |
false |
ge |
false |
le |
false |
eq |
false |
ne |
true |
In sintesi, NaN
non è uguale ad alcun valore, incluso se stesso.
Confronto tra dati geospa spaziali
Non è possibile confrontare direttamente un campo di tipo Edm.GeographyPoint
con un valore costante, ma è possibile usare la geo.distance
funzione . Questa funzione restituisce un valore di tipo Edm.Double
, in modo da poterlo confrontare con una costante numerica per filtrare in base alla distanza dalle coordinate geografiche costanti. Vedere gli esempi seguenti.
Confronto dei dati stringa
Le stringhe possono essere confrontate in filtri per corrispondenze esatte usando gli eq
operatori e ne
. Questi confronti fanno distinzione tra maiuscole e minuscole.
Esempi
Trova la corrispondenza tra i documenti in cui il Rating
campo è compreso tra 3 e 5, inclusi:
Rating ge 3 and Rating le 5
Trovare i documenti in cui il Location
campo è inferiore a 2 chilometri dalla latitudine e longitudine specificati:
geo.distance(Location, geography'POINT(-122.031577 47.578581)') lt 2.0
Trova la corrispondenza con i documenti in cui il LastRenovationDate
campo è maggiore o uguale al 1° gennaio 2015, mezzanotte UTC:
LastRenovationDate ge 2015-01-01T00:00:00.000Z
Trova la corrispondenza con i documenti in cui il Details/Sku
campo non null
è :
Details/Sku ne null
Trova i documenti per gli hotel in cui almeno una stanza ha il tipo "Camera Deluxe", dove la stringa del Rooms/Type
campo corrisponde esattamente al filtro:
Rooms/any(room: room/Type eq 'Deluxe Room')