Logické operátory OData ve službě Azure AI Vyhledávač – and, ornot

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 jako true, pokud jsou jak levý, tak pravý dílčí výraz vyhodnoceny true.
  • or: Binární operátor, který se vyhodnotí na true, pokud jeden z jeho levého nebo pravého dílčího výrazu se vyhodnotí na true.
  • not: Unární operátor, který se vyhodnotí na true pokud jeho dílčí výraz vyhodnotí na false, 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:

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říklad geo.intersects nebo search.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 true nebo false.
  • Jiné logické výrazy vytvořené pomocí and, ora not.

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)

Další kroky