Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
OData összehasonlító operátorok az Azure AI Searchben –
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ékkelne
: 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éllt
: Annak tesztelése, hogy egy mező kisebb-e állandó értéknélge
: Annak tesztelése, hogy egy mező nagyobb-e, mint egy állandó érték, vagy egyenlő-ele
: 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.distance
egy értéket. Olyan logikai függvények esetében, mint például search.ismatch
az 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.Double a 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 : , -INF vagy 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 : , -INF vagy 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.Double
ad 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')