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.
Logické operátory 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.
Výrazy filtru OData ve službě Azure AI Vyhledávač jsou logické výrazy, které se vyhodnocují jako true nebo false. Složitý filtr můžete napsat tak, že napíšete řadu jednodušších filtrů a vytvoříte je pomocí logických operátorů z logické algebry:
-
and: Binární operátor, který se vyhodnocuje jakotrue, pokud jsou jak levý, tak pravý dílčí výraz vyhodnocenytrue. -
or: Binární operátor, který se vyhodnotí natrue, pokud jeden z jeho levého nebo pravého dílčího výrazu se vyhodnotí natrue. -
not: Unární operátor, který se vyhodnotí natruepokud jeho dílčí výraz vyhodnotí nafalse, a naopak.
Ty společně s operátory any kolekce a allumožňují vytvořit filtry, které mohou vyjádřit velmi složitá kritéria hledání.
Syntaxe
Následující ebNF (Extended Backus-Naur Form) definuje gramatiku výrazu OData, který používá logické operátory.
logical_expression ::=
boolean_expression ('and' | 'or') boolean_expression
| 'not' boolean_expression
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 logických výrazů: binární (and/or), kde existují dva dílčí výrazy a unární (not), kde je jen jeden. Dílčí výrazy můžou být logické výrazy libovolného druhu:
- Pole nebo proměnné rozsahu typu
Edm.Boolean - Funkce, které vracejí hodnoty typu
Edm.Boolean, napříkladgeo.intersectsnebosearch.ismatch -
Porovnávací výrazy, například
rating gt 4 -
Kolekce výrazy, například
Rooms/any(room: room/Type eq 'Deluxe Room') - Logické literály
truenebofalse. - Jiné logické výrazy vytvořené pomocí
and,oranot.
Důležité
V některých situacích se nedají použít and/orvšechny druhy dílčích výrazů, zejména uvnitř výrazů lambda. Podrobnosti najdete v tématu Operátory kolekce OData ve službě Azure AI Vyhledávač .
Logické operátory a null
Většina logických výrazů, jako jsou funkce a porovnání, nemůže vytvořit null hodnoty a logické operátory nelze použít přímo na null literál (například x and null není povoleno). Logická pole však mohou být null, takže je třeba vědět, jak se operátory and, or a not chovají v přítomnosti hodnoty null. Toto je shrnuto v následující tabulce, kde b je pole typu Edm.Boolean:
| Výraz | Výsledek, pokud b je null |
|---|---|
b |
false |
not b |
true |
b eq true |
false |
b eq false |
false |
b eq null |
true |
b ne true |
true |
b ne false |
true |
b ne null |
false |
b and true |
false |
b and false |
false |
b or true |
true |
b or false |
false |
Když se ve výrazu filtru zobrazí logické pole b, chová se to, jako by bylo napsáno b eq true, takže pokud b je null, výraz se vyhodnotí jako false. Podobně se not b chová jako not (b eq true), takže se vyhodnotí jako true. Tímto způsobem null se pole chovají stejně jako false. To je konzistentní s tím, jak se chovají v kombinaci s jinými výrazy používajícími and a or, jak je znázorněno v tabulce výše. Navzdory tomu bude přímé porovnání s false (b eq false) mít stále hodnotu false. Jinými slovy, null není rovno false, i když se v logických výrazech chová jako by byly stejné.
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 jsou všechny prvky ratings pole menší než 3 nebo větší než 5:
ratings/all(r: r lt 3 or r gt 5)
Porovná dokumenty, ve kterých location je pole v daném mnohoúhelníku, a dokument neobsahuje termín "public".
geo.intersects(location, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))') and not search.ismatch('public')
Porovnejte dokumenty pro hotely ve Vancouveru, Kanada, kde je luxusní pokoj se základní sazbou nižší než 160:
Address/City eq 'Vancouver' and Address/Country eq 'Canada' and Rooms/any(room: room/Type eq 'Deluxe Room' and room/BaseRate lt 160)