Megosztás a következőn keresztül:


OData logikai operátorok az Azure AI Searchben – and, , ornot

Az Azure AI Search OData-szűrőkifejezései olyan logikai kifejezések, amelyek kiértékelése vagy true falsekiértékelése. Összetett szűrőt egyszerűbb szűrők megírásával és logikai algebra logikai operátorainak megírásával írhat:

  • and: Egy bináris operátor, amely kiértékeli, hogy true a bal és a jobb oldali alkifejezések is a true.
  • 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 unary operátor, amely kiértékeli, hogy true az alkifejezése kiértékeli-e, falseés fordítva.

Ezek a gyűjtemény operátoraival any allegyütt lehetővé teszik olyan szűrők összeállítását, amelyek nagyon összetett keresési feltételeket képesek kifejezni.

Syntax

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-hez tekintse meg az Azure AI Search OData-kifejezésszintaxis-hivatkozá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.
  • Az , orés nota . használatával andlétrehozott egyéb logikai kifejezések.

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 Searchben .

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). A logikai mezők azonban lehetnek null, ezért tisztában kell lennie azzal, hogy a , orés not az andoperátorok hogyan viselkednek null érték jelenlétében. Ezt a következő táblázatban foglaljuk össze, ahol b egy típusmező Edm.Booleantalálható:

Expression Eredmény, ha bnull
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 megírták b eq truevolna , tehát ha b igen null, akkor a kifejezés kiértékelése false. Hasonlóképpen viselkedik not (b eq true), not b így kiértékeli a .true Így a mezők ugyanúgy viselkednek, null mint falsea . 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 (b eq false)-hez false való közvetlen összehasonlítás továbbra is a következő leszfalse: . Más szóval nem egyenlő, falsemég akkor sem, null ha logikai kifejezésekben ugyanúgy viselkedik.

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

Egyezik azokkal a dokumentumokkal, amelyekben a ratings mező összes eleme 3-nál kisebb vagy 5-nél nagyobb:

    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