Vergelijkingsoperatoren voor OData in Azure AI Search - eq
, , ne
, gt
, lt
en ge
le
De meest eenvoudige bewerking in een OData-filterexpressie in Azure AI Search is het vergelijken van een veld met een bepaalde waarde. Er zijn twee soorten vergelijking mogelijk: gelijkheidsvergelijking en bereikvergelijking. U kunt de volgende operators gebruiken om een veld te vergelijken met een constante waarde:
Gelijkheidsoperators:
eq
: Test of een veld gelijk is aan een constante waardene
: Test of een veld niet gelijk is aan een constante waarde
Bereikoperators:
gt
: Test of een veld groter is dan een constante waardelt
: Test of een veld kleiner is dan een constante waardege
: Test of een veld groter is dan of gelijk is aan een constante waardele
: Test of een veld kleiner is dan of gelijk is aan een constante waarde
U kunt de bereikoperators in combinatie met de logische operators gebruiken om te testen of een veld zich binnen een bepaald bereik van waarden bevindt. Zie de voorbeelden verderop in dit artikel.
Notitie
Als u wilt, kunt u de constante waarde aan de linkerkant van de operator en de veldnaam aan de rechterkant plaatsen. Voor bereikoperators wordt de betekenis van de vergelijking omgekeerd. Als de constante waarde zich bijvoorbeeld aan de linkerkant bevindt, gt
test u of de constante waarde groter is dan het veld. U kunt ook de vergelijkingsoperatoren gebruiken om het resultaat van een functie, zoals geo.distance
, te vergelijken met een waarde. Voor Booleaanse functies, zoals search.ismatch
het vergelijken van het resultaat met true
of false
is optioneel.
Syntaxis
Met het volgende EBNF-formulier (Extended Backus-Naur Form) definieert u de grammatica van een OData-expressie die gebruikmaakt van de vergelijkingsoperatoren.
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'
Er is ook een interactief syntaxisdiagram beschikbaar:
Notitie
Zie naslaginformatie over de syntaxis van de OData-expressie voor Azure AI Search voor het volledige EBNF.
Er zijn twee soorten vergelijkingsexpressies. Het enige verschil is of de constante aan de linkerkant of aan de rechterkant van de operator wordt weergegeven. De expressie aan de andere kant van de operator moet een variabele of een functieaanroep zijn. Een variabele kan een veldnaam of een bereikvariabele zijn in het geval van een lambda-expressie.
Gegevenstypen voor vergelijkingen
De gegevenstypen aan beide zijden van een vergelijkingsoperator moeten compatibel zijn. Als de linkerkant bijvoorbeeld een veld van het type Edm.DateTimeOffset
is, moet de rechterzijde een datum-tijdconstante zijn. Numerieke gegevenstypen zijn flexibeler. U kunt variabelen en functies van elk numeriek type vergelijken met constanten van elk ander numeriek type, met enkele beperkingen, zoals beschreven in de volgende tabel.
Variabele of functietype | Constante waardetype | Beperkingen |
---|---|---|
Edm.Double |
Edm.Double |
Vergelijking is onderworpen aan speciale regels voor NaN |
Edm.Double |
Edm.Int64 |
Constante wordt geconverteerd naar Edm.Double , wat resulteert in een verlies van precisie voor waarden van grote grootte |
Edm.Double |
Edm.Int32 |
n.v.t. |
Edm.Int64 |
Edm.Double |
Vergelijkingen met NaN , -INF of INF zijn niet toegestaan |
Edm.Int64 |
Edm.Int64 |
n.v.t. |
Edm.Int64 |
Edm.Int32 |
Constante wordt geconverteerd naar Edm.Int64 vóór vergelijking |
Edm.Int32 |
Edm.Double |
Vergelijkingen met NaN , -INF of INF zijn niet toegestaan |
Edm.Int32 |
Edm.Int64 |
n.v.t. |
Edm.Int32 |
Edm.Int32 |
n.v.t. |
Voor vergelijkingen die niet zijn toegestaan, zoals het vergelijken van een veld van het type Edm.Int64
NaN
, retourneert de AZURE AI Search REST API de fout HTTP 400: Ongeldige aanvraag.
Belangrijk
Hoewel vergelijkingen van numerieke typen flexibel zijn, raden we u ten zeerste aan vergelijkingen in filters te schrijven, zodat de constante waarde van hetzelfde gegevenstype is als de variabele of functie waarmee deze wordt vergeleken. Dit is vooral belangrijk bij het combineren van waarden voor drijvende komma en gehele getallen, waarbij impliciete conversies die precisie verliezen mogelijk zijn.
Speciale gevallen voor null
en NaN
Wanneer u vergelijkingsoperatoren gebruikt, is het belangrijk om te onthouden dat alle niet-verzamelingsvelden in Azure AI Search mogelijk zijn null
. In de volgende tabel ziet u alle mogelijke resultaten voor een vergelijkingsexpressie waarbij beide zijden kunnen zijn null
:
Operator | Resultaat wanneer alleen het veld of de variabele is null |
Resultaat wanneer alleen de constante is null |
Resultaat wanneer zowel het veld of de variabele als de constante zijn null |
---|---|---|---|
gt |
false |
HTTP 400: Fout met ongeldige aanvraag | HTTP 400: Fout met ongeldige aanvraag |
lt |
false |
HTTP 400: Fout met ongeldige aanvraag | HTTP 400: Fout met ongeldige aanvraag |
ge |
false |
HTTP 400: Fout met ongeldige aanvraag | HTTP 400: Fout met ongeldige aanvraag |
le |
false |
HTTP 400: Fout met ongeldige aanvraag | HTTP 400: Fout met ongeldige aanvraag |
eq |
false |
false |
true |
ne |
true |
true |
false |
Kortom, null
is alleen gelijk aan zichzelf en is niet kleiner of groter dan een andere waarde.
Als uw index velden van het type Edm.Double
heeft en u waarden uploadt NaN
naar deze velden, moet u hiervoor rekening houden bij het schrijven van filters. Azure AI Search implementeert de IEEE 754-standaard voor het verwerken NaN
van waarden en vergelijkingen met dergelijke waarden produceren niet-voor de hand liggende resultaten, zoals wordt weergegeven in de volgende tabel.
Operator | Resultaat wanneer ten minste één operand is NaN |
---|---|
gt |
false |
lt |
false |
ge |
false |
le |
false |
eq |
false |
ne |
true |
Kortom, NaN
is niet gelijk aan een waarde, inclusief zichzelf.
Geo-ruimtelijke gegevens vergelijken
U kunt een veld van het type Edm.GeographyPoint
niet rechtstreeks vergelijken met een constante waarde, maar u kunt de geo.distance
functie gebruiken. Deze functie retourneert een waarde van het type Edm.Double
, zodat u deze kunt vergelijken met een numerieke constante om te filteren op basis van de afstand van constante georuimtelijke coördinaten. Zie de onderstaande voorbeelden .
Tekenreeksgegevens vergelijken
Tekenreeksen kunnen worden vergeleken in filters voor exacte overeenkomsten met behulp van de eq
en ne
operators. Deze vergelijkingen zijn hoofdlettergevoelig.
Voorbeelden
Overeenkomen met documenten waarbij het Rating
veld tussen 3 en 5 ligt, inclusief:
Rating ge 3 and Rating le 5
Documenten vergelijken waarbij het Location
veld minder dan 2 kilometer van de opgegeven breedtegraad en lengtegraad ligt:
geo.distance(Location, geography'POINT(-122.031577 47.578581)') lt 2.0
Overeenkomen met documenten waarbij het LastRenovationDate
veld groter is dan of gelijk is aan 1 januari 2015, middernacht UTC:
LastRenovationDate ge 2015-01-01T00:00:00.000Z
Overeenkomen met documenten waarbij het Details/Sku
veld niet null
is:
Details/Sku ne null
Overeenkomen met documenten voor hotels waarvan ten minste één kamer het type Deluxe Room heeft, waarbij de tekenreeks van het Rooms/Type
veld exact overeenkomt met het filter:
Rooms/any(room: room/Type eq 'Deluxe Room')