Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Operátory porovnání OData ve službě Azure AI Vyhledávač –
Poznámka:
Azure AI Vyhledávač je k dispozici prostřednictvím portálu Azure, rozhraní REST API a Sady Azure SDK. Podporuje také Foundry IQ, spravovanou znalostní vrstvu, která transformuje podnikový obsah na opakovaně použitelné znalostní báze s podporou oprávnění pro agenty na portálu Microsoft Foundry.
Nejzásadnější operací ve výrazu filtru OData ve službě Azure AI Vyhledávač je porovnání pole s danou hodnotou. Možné jsou dva typy porovnání – porovnání rovnosti a porovnání rozsahu. K porovnání pole s konstantní hodnotou můžete použít následující operátory:
Operátory rovnosti:
-
eq: Test, zda je pole rovno konstantní hodnotě -
ne: Test, zda pole není rovno konstantní hodnotě
Operátory rozsahu
-
gt: Test, zda je pole větší než konstantní hodnota -
lt: Test, zda je pole menší než konstantní hodnota -
ge: Test, zda je pole větší nebo rovno konstantní hodnotě -
le: Test, zda je pole menší nebo rovno konstantní hodnotě
Operátory rozsahu můžete použít v kombinaci s logickými operátory a otestovat, jestli je pole v určitém rozsahu hodnot. Podívejte se na příklady dále v tomto článku.
Poznámka:
Pokud chcete, můžete konstantní hodnotu umístit na levou stranu operátoru a název pole na pravé straně. U operátorů rozsahu je význam porovnání obrácený. Pokud je například konstantní hodnota vlevo, otestuje, gt jestli je konstantní hodnota větší než pole. Pomocí relačních operátorů můžete také porovnat výsledek funkce, například geo.distances hodnotou. U logických funkcí, jako je například search.ismatch, je volitelné porovnávat výsledek s true nebo alternativně s false.
Syntaxe
Následující ebNF (Extended Backus-Naur Form) definuje gramatiku výrazu OData, který používá relační operátory.
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'
K dispozici je také interaktivní diagram syntaxe:
Poznámka:
Úplný soubor EBNF najdete v referenčních informacích k syntaxi výrazů OData pro Azure AI Vyhledávač .
Existují dvě formy porovnávacích výrazů. Jediným rozdílem mezi nimi je to, jestli se konstanta zobrazuje na levé nebo pravé straně operátoru. Výraz na druhé straně operátoru musí být proměnná nebo volání funkce. Proměnná může být buď název pole, nebo proměnná rozsahu v případě výrazu lambda.
Datové typy pro porovnání
Datové typy na obou stranách relačního operátoru musí být kompatibilní. Pokud je například levá strana pole typu Edm.DateTimeOffset, musí být pravá strana konstantou data a času. Číselné datové typy jsou flexibilnější. Proměnné a funkce libovolného číselného typu můžete porovnat s konstantami jiného číselného typu s několika omezeními, jak je popsáno v následující tabulce.
| Typ proměnné nebo funkce | Typ konstantní hodnoty | Omezení |
|---|---|---|
Edm.Double |
Edm.Double |
Porovnání podléhá zvláštním pravidlům pro NaN |
Edm.Double |
Edm.Int64 |
Konstanta je převedena na Edm.Double, což vede ke ztrátě přesnosti pro hodnoty velkého rozsahu. |
Edm.Double |
Edm.Int32 |
Není k dispozici |
Edm.Int64 |
Edm.Double |
Porovnání s NaN, -INFnebo INF nejsou povoleny |
Edm.Int64 |
Edm.Int64 |
Není k dispozici |
Edm.Int64 |
Edm.Int32 |
Konstanta se převede na Edm.Int64 před porovnáním. |
Edm.Int32 |
Edm.Double |
Porovnání s NaN, -INFnebo INF nejsou povoleny |
Edm.Int32 |
Edm.Int64 |
Není k dispozici |
Edm.Int32 |
Edm.Int32 |
Není k dispozici |
Pro porovnání, která nejsou povolená, například porovnání pole typu Edm.Int64 s NaN, rozhraní REST API služby Azure AI Vyhledávač vrátí chybu "HTTP 400: Chybný požadavek".
Důležité
I když jsou porovnání číselných typů flexibilní, důrazně doporučujeme psát porovnání ve filtrech, aby konstantní hodnota byla stejného datového typu jako proměnná nebo funkce, se kterou se porovnává. To je obzvláště důležité při kombinování hodnot s plovoucí desetinnou čárkou a celých čísel, kde mohou implicitní převody vést ke ztrátě přesnosti.
Zvláštní případy pro null a NaN
Při použití operátorů porovnání je důležité si uvědomit, že všechna pole mimo kolekci ve službě Azure AI Vyhledávač mohou být potenciálně null. V následující tabulce jsou uvedeny všechny možné výsledky pro porovnávací výraz, kde může být nullna obou stranách:
| Operátor | Výsledek, pokud je pouze pole nebo proměnná null |
Výsledek, pokud je pouze konstanta null |
Výsledek, pokud jsou pole nebo proměnná i konstanta null |
|---|---|---|---|
gt |
false |
HTTP 400: Chybný požadavek | HTTP 400: Chybný požadavek |
lt |
false |
HTTP 400: Chybný požadavek | HTTP 400: Chybný požadavek |
ge |
false |
HTTP 400: Chybný požadavek | HTTP 400: Chybný požadavek |
le |
false |
HTTP 400: Chybný požadavek | HTTP 400: Chybný požadavek |
eq |
false |
false |
true |
ne |
true |
true |
false |
V souhrnu se null rovná pouze sobě a není menší nebo větší než jakákoli jiná hodnota.
Pokud má váš index pole typu Edm.Double a do těchto polí nahrajete NaN hodnoty, budete to muset vzít v úvahu při psaní filtrů. Azure AI Vyhledávač implementuje standard IEEE 754 pro zpracování NaN hodnot a porovnání s těmito hodnotami vytváří nestandardní výsledky, jak je znázorněno v následující tabulce.
| Operátor | Výsledek, pokud je alespoň jeden operand NaN |
|---|---|
gt |
false |
lt |
false |
ge |
false |
le |
false |
eq |
false |
ne |
true |
V souhrnu NaN se nerovná žádné hodnotě, včetně samotné.
Porovnání geografických prostorových dat
Pole typu Edm.GeographyPoint nelze přímo porovnat s konstantní hodnotou, ale funkci můžete použít geo.distance . Tato funkce vrátí hodnotu typu Edm.Double, takže ji můžete porovnat s číselnou konstantou pro filtrování na základě vzdálenosti od konstantních geografických souřadnic. Podívejte se na následující příklady .
Porovnání řetězcových dat
Řetězce se dají porovnat ve filtrech pro přesné shody pomocí operátorů eq a ne. Tato porovnání rozlišují malá a velká písmena.
Příklady
Porovná dokumenty, ve kterých je pole v rozsahu Rating 3 až 5 včetně:
Rating ge 3 and Rating le 5
Porovná dokumenty, ve kterých Location je pole menší než 2 kilometry od dané zeměpisné šířky a délky:
geo.distance(Location, geography'POINT(-122.031577 47.578581)') lt 2.0
Porovnejte dokumenty, kde je pole LastRenovationDate větší nebo rovno 1. lednu 2015, půlnoc UTC.
LastRenovationDate ge 2015-01-01T00:00:00.000Z
Najde dokumenty, kde pole Details/Sku není null.
Details/Sku ne null
Spárujte dokumenty pro hotely, kde alespoň jeden pokoj má typ "Pokoj Deluxe", kde řetězec Rooms/Type pole přesně odpovídá filtru:
Rooms/any(room: room/Type eq 'Deluxe Room')