Delen via


Vergelijkingsoperatoren voor OData in Azure AI Search - eq, , ne, gt, lten gele

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 waarde
  • ne: Test of een veld niet gelijk is aan een constante waarde

Bereikoperators:

  • gt: Test of een veld groter is dan een constante waarde
  • lt: Test of een veld kleiner is dan een constante waarde
  • ge: Test of een veld groter is dan of gelijk is aan een constante waarde
  • le: 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.ismatchhet 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:

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.DateTimeOffsetis, 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, -INFof 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, -INFof 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 nullis:

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')

Volgende stappen