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 Keresésben –
Feljegyzés
Azure AI Keresés a Azure portálon, REST API-kon és Azure SDK-k keresztül érhető el. Emellett a Foundry IQ-t is támogatja, amely a vállalati tartalmakat újrafelhasználható, engedélytudatos tudásbázisokká alakítja át az Microsoft Foundry portálon található ügynökök számára.
Az Azure AI Keresés 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 megfordul. 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.ismatch, az eredmény true vagy false való összehasonlítása nem kötelező.
Szintaxis
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 Keresés 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 Edm.Double átalakítja, ami a nagy nagyságrendű é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ó Edm.Int64-ra konvertálódik az összehasonlítás előtt |
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.Int64NaNösszehasonlítása esetén az Azure AI Keresés 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 és NaN
Összehasonlító operátorok használatakor fontos megjegyezni, hogy az Azure AI Keresés minden nem gyűjtési mezője potenciálisan lehet 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ó van jelen null |
Az eredmény akkor jön létre, ha mind a mező vagy a változó, mind az állandó 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 Keresés 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 szűrőkben a sztringek összehasonlíthatók a pontos egyezésekhez a eq és ne 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
Keresse meg azokat a dokumentumokat, amelyeknél a Location mező kevesebb mint 2 kilométerre van a megadott földrajzi szélesség és hosszúság alapján:
geo.distance(Location, geography'POINT(-122.031577 47.578581)') lt 2.0
Olyan dokumentumokat keres, ahol a LastRenovationDate mező nagyobb vagy egyenlő 2015. január 1. éjfélkor (UTC):
LastRenovationDate ge 2015-01-01T00:00:00.000Z
Olyan dokumentumokhoz illeszkedik, 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')