Megosztás a következőn keresztül:


OData összehasonlító operátorok az Azure AI Searchben – eq, ne, gt, lt, és gele

Az Azure AI Search OData-szűrőkifejezésének legalapvetőbb művelete egy mező és egy adott érték összehasonlítása. Kétféle összehasonlítás lehetséges : egyenlőségi összehasonlítás és tartomány-összehasonlítás. Az alábbi operátorok segítségével összehasonlíthat egy mezőt egy állandó értékkel:

Egyenlőségi operátorok:

  • eq: Annak tesztelése, hogy egy mező egyenlő-e állandó értékkel
  • ne: Annak tesztelése, hogy egy mező nem egyenlő-e állandó értékkel

Tartomány operátorai:

  • gt: Annak tesztelése, hogy egy mező nagyobb-e állandó értéknél
  • lt: Annak tesztelése, hogy egy mező kisebb-e állandó értéknél
  • ge: Annak tesztelése, hogy egy mező nagyobb-e, mint egy állandó érték, vagy egyenlő-e
  • le: Annak ellenőrzése, hogy egy mező kisebb vagy egyenlő-e állandó értéknél

A tartományoperátorok és a logikai operátorok együttes használatával tesztelheti, hogy egy mező egy adott értéktartományon belül van-e. Lásd a példákat a cikk későbbi részében.

Feljegyzés

Tetszés szerint az állandó értéket az operátor bal oldalára, a mezőnevet pedig a jobb oldalra helyezheti. A tartomány operátorai esetében az összehasonlítás jelentése fordított. Ha például az állandó érték a bal oldalon van, tesztelné, gt hogy az állandó érték nagyobb-e, mint a mező. Az összehasonlító operátorokkal összehasonlíthatja egy függvény eredményét, például geo.distanceegy értéket. Olyan logikai függvények esetében, mint például search.ismatchaz eredmény true összehasonlítása vagy false nem kötelező.

Syntax

Az alábbi EBNF (Extended Backus-Naur form) az összehasonlító operátorokat használó OData-kifejezés nyelvtanát határozza meg.

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'

Interaktív szintaxisdiagram is elérhető:

Feljegyzés

A teljes EBNF-hez tekintse meg az Azure AI Search OData-kifejezésszintaxis-hivatkozását.

Az összehasonlító kifejezéseknek két formája van. Az egyetlen különbség közöttük az, hogy az állandó megjelenik-e az operátor bal vagy jobb oldalán. Az operátor másik oldalán lévő kifejezésnek változónak vagy függvényhívásnak kell lennie. A változó lehet mezőnév vagy tartományváltozó lambda kifejezés esetén.

Adattípusok összehasonlításhoz

Az összehasonlító operátor mindkét oldalán lévő adattípusoknak kompatibilisnek kell lenniük. Ha például a bal oldal egy típusmező Edm.DateTimeOffset, akkor a jobb oldalon dátum-idő állandónak kell lennie. A numerikus adattípusok rugalmasabbak. Bármely numerikus típus változóit és függvényeit összehasonlíthatja bármely más numerikus típus állandóival, néhány korlátozással, az alábbi táblázatban leírtak szerint.

Változó vagy függvény típusa Állandó érték típusa Korlátozások
Edm.Double Edm.Double Az összehasonlításra különleges szabályok vonatkoznak NaN
Edm.Double Edm.Int64 Az állandót átalakítja Edm.Doublea rendszer, ami a nagy méretű értékek pontosságának elvesztését eredményezi
Edm.Double Edm.Int32 n.a.
Edm.Int64 Edm.Double Összehasonlítás a következőhöz NaN: , -INFvagy INF nem engedélyezett
Edm.Int64 Edm.Int64 n.a.
Edm.Int64 Edm.Int32 Az állandót az összehasonlítás előtt konvertálja a Edm.Int64 rendszer
Edm.Int32 Edm.Double Összehasonlítás a következőhöz NaN: , -INFvagy INF nem engedélyezett
Edm.Int32 Edm.Int64 n.a.
Edm.Int32 Edm.Int32 n.a.

A nem engedélyezett összehasonlítások, például egy típusmező Edm.Int64 NaNösszehasonlítása esetén az Azure AI Search REST API "HTTP 400: Bad Request" hibaüzenetet ad vissza.

Fontos

Annak ellenére, hogy a numerikus típusú összehasonlítások rugalmasak, javasoljuk, hogy szűrőkbe írja az összehasonlításokat, hogy az állandó érték azonos adattípusú legyen, mint az a változó vagy függvény, amelyhez az összehasonlítást használják. Ez különösen fontos a lebegőpontos és egész számértékek összekeverésekor, ahol a pontosságot veszítő implicit konverziók lehetségesek.

Különleges esetek a következőhöz null : NaN

Összehasonlító operátorok használatakor fontos megjegyezni, hogy az Azure AI Search összes nem gyűjtési mezője lehetséges.null Az alábbi táblázat egy összehasonlító kifejezés összes lehetséges eredményét mutatja be, ahol mindkét oldal lehet null:

Operátor Eredmény, ha csak a mező vagy a változó null Az eredmény, ha csak az állandó null Akkor jön létre, ha a mező vagy a változó és az állandó is null
gt false HTTP 400: Hibás kérési hiba HTTP 400: Hibás kérési hiba
lt false HTTP 400: Hibás kérési hiba HTTP 400: Hibás kérési hiba
ge false HTTP 400: Hibás kérési hiba HTTP 400: Hibás kérési hiba
le false HTTP 400: Hibás kérési hiba HTTP 400: Hibás kérési hiba
eq false false true
ne true true false

Összefoglalva, null csak önmagával egyenlő, és nem kisebb vagy nagyobb, mint bármely más érték.

Ha az index típusmezőket Edm.Double tartalmaz, és értékeket tölt fel NaN ezekbe a mezőkbe, akkor a szűrők írásakor figyelembe kell vennie azokat. Az Azure AI Search implementálja az IEEE 754 szabványt az értékek kezeléséhez NaN , és az ilyen értékekkel való összehasonlítások nem egyértelmű eredményeket eredményeznek, ahogyan az az alábbi táblázatban látható.

Operátor Eredmény, ha legalább egy operandus NaN
gt false
lt false
ge false
le false
eq false
ne true

Összefoglalva, NaN nem egyenlő semmilyen értékkel, beleértve magát is.

Geo-térbeli adatok összehasonlítása

Egy típusmezőt Edm.GeographyPoint nem hasonlíthat össze közvetlenül állandó értékkel, de használhatja a függvényt geo.distance . Ez a függvény egy típusértéket Edm.Doublead vissza, így összehasonlíthatja egy numerikus állandóval, hogy az állandó geo-térbeli koordináták távolsága alapján szűrjön. Lásd az alábbi példákat .

Sztringadatok összehasonlítása

A sztringek a szűrőkben összehasonlíthatók a pontos egyezésekhez az operátorok és ne az eq operátorok használatával. Ezek az összehasonlítások megkülönböztetik a kis- és nagybetűket.

Példák

Egyeznie kell azokkal a dokumentumokkal, ahol a Rating mező 3 és 5 között van, beleértve a következőt:

Rating ge 3 and Rating le 5

Egyezik azokkal a dokumentumokkal, amelyekben a Location mező kevesebb mint 2 kilométerre van a megadott szélességtől és hosszúságtól:

geo.distance(Location, geography'POINT(-122.031577 47.578581)') lt 2.0

Egyezik azokkal a dokumentumokkal, ahol a LastRenovationDate mező nagyobb vagy egyenlő, mint 2015. január 1., éjfél (UTC):

LastRenovationDate ge 2015-01-01T00:00:00.000Z

Egyezik azokkal a dokumentumokkal, ahol a Details/Sku mező nem null:

Details/Sku ne null

Olyan szállodák dokumentumainak egyeztetése, ahol legalább egy szoba "Deluxe Szoba" típusú, ahol a Rooms/Type mező sztringje pontosan megfelel a szűrőnek:

Rooms/any(room: room/Type eq 'Deluxe Room')

Következő lépések