OData logikai operátorok az Azure AI Keresésben – and, , ornot

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és true értéket ad vissza.
  • or: Egy bináris operátor, amely kiértékeli, hogy true a bal vagy a jobb oldali alkifejezések egyikének értéke a következő lesz true.
  • not: Egy egyváltozós operátor, amely kiértékelés során az true eredményére jut, ha az alkifejezés false-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ául geo.intersects vagy search.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 true vagy false.
  • Más logikai kifejezések, amelyek a and, or és not haszná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)

Következő lépések