Condividi tramite


Operatori di confronto OData in Ricerca di intelligenza artificiale di Azure - eq, neltgtgeele

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 costante
  • ne: verificare se un campo non è uguale a un valore costante

Operatori di intervallo:

  • gt: verificare se un campo è maggiore di un valore costante
  • lt: verificare se un campo è minore di un valore costante
  • ge: verificare se un campo è maggiore o uguale a un valore costante
  • le: 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.ismatchad 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:

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, -INFo 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, -INFo 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 nullpotenzialmente . 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 I edizione Enterprise E 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')

Passaggi successivi