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 logikai 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ései olyan logikai kifejezések, amelyek vagy true vagy false eredményre vezetnek. Összetett szűrőt egyszerűbb szűrők megírásával és a logikai algebra logikai operátorainak használatával állíthat össze.
-
and: Egy bináris operátor, amely igazra értékelődik ki, ha mind a bal, mind a jobb oldali alkifejezéstrueértéket ad vissza. -
or: Egy bináris operátor, amely kiértékeli, hogytruea bal vagy a jobb oldali alkifejezések egyikének értéke a következő lesztrue. -
not: Egy egyváltozós operátor, amely kiértékelés során aztrueeredményére jut, ha az alkifejezésfalse-ra értekelődik ki, és fordítva.
Ezek a gyűjtemény operátoraival anyallegyütt lehetővé teszik olyan szűrők összeállítását, amelyek nagyon összetett keresési feltételeket képesek kifejezni.
Szintaxis
A következő EBNF (Extended Backus-Naur Form) a logikai operátorokat használó OData-kifejezés nyelvtanát határozza meg.
logical_expression ::=
boolean_expression ('and' | 'or') boolean_expression
| 'not' boolean_expression
Interaktív szintaxisdiagram is elérhető:
Feljegyzés
A teljes EBNF megtekintéséhez lásd az Azure AI Keresés OData kifejezés szintaxishivatkozását.
A logikai kifejezéseknek két formája van: bináris (and/or), ahol két alkifejezés van, és unary (not), ahol csak egy van. Az alkifejezések tetszőleges logikai kifejezések lehetnek:
- Típusú mezők vagy tartományváltozók
Edm.Boolean - Olyan függvények, amelyek típusértékeket
Edm.Booleanadnak vissza, példáulgeo.intersectsvagysearch.ismatch -
Összehasonlító kifejezések, például
rating gt 4 -
Gyűjteménykifejezések, például
Rooms/any(room: room/Type eq 'Deluxe Room') - Logikai literálok
truevagyfalse. - Más logikai kifejezések, amelyek a
and,orésnothasználatával lettek létrehozva.
Fontos
Vannak olyan helyzetek, amikor nem minden alkifejezés használható and/or, különösen a lambda kifejezéseken belül. Részletekért tekintse meg az OData-gyűjtemény operátorainak adatait az Azure AI Keresésben .
Logikai operátorok és null
A legtöbb logikai kifejezés, például a függvények és az összehasonlítások nem hozhatnak létre null értékeket, és a logikai operátorok nem alkalmazhatók közvetlenül a null literálra (például x and null nem engedélyezett). Azonban a logikai mezők lehetnek null, ezért tisztában kell lennie azzal, hogy a and, or és not operátorok hogyan viselkednek null érték jelenlétében. Ezt a következő táblázatban foglaljuk össze, ahol a b egy Edm.Boolean típusú mező.
| kifejezés | Eredmény, ha b van 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 |
Amikor egy logikai mező b önmagában jelenik meg egy szűrőkifejezésben, úgy viselkedik, mintha b eq true lenne írva, tehát ha bnull, akkor a kifejezés kiértékelése false. Hasonlóképpen, a not b úgy viselkedik, mint a not (b eq true), így ez true-re értékelődik ki. Így a null mezők ugyanúgy viselkednek, mint a false. Ez összhangban van azzal, hogy hogyan viselkednek más kifejezésekkel and kombinálva, és ora fenti táblázatban látható módon. Ennek ellenére a false közvetlen b eq false összehasonlítása továbbra is false értékre fog kiértékelődni. Más szóval, null nem egyenlő false-val, még akkor sem, ha logikai kifejezésekben ugyanúgy viselkednek.
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
Egyezzen meg azokkal a dokumentumokkal, amelyekben a ratings mező összes eleme kisebb, mint 3 vagy nagyobb, mint 5.
ratings/all(r: r lt 3 or r gt 5)
Egyezik azokkal a dokumentumokkal, amelyekben a location mező az adott sokszögön belül van, és a dokumentum nem tartalmazza a "public" kifejezést.
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')
Egyeztesd a kanadai Vancouver szállodáinak dokumentumait, ahol egy 160-nál alacsonyabb alapkamattal rendelkező deluxe szoba található:
Address/City eq 'Vancouver' and Address/Country eq 'Canada' and Rooms/any(room: room/Type eq 'Deluxe Room' and room/BaseRate lt 160)