Azure AI Search'te OData mantıksal işleçleri - and, or, not

Azure AI Search'teki OData filtre ifadeleri veya falseolarak değerlendirilen true Boole ifadeleridir. Boole cebirinden mantıksal işleçleri kullanarak bir dizi daha basit filtre yazıp bunları oluşturarak karmaşık bir filtre yazabilirsiniz:

  • and: Hem sol hem de sağ alt ifadelerinin true olarak değerlendirilip değerlendirilmediğini değerlendiren truebir ikili işleç.
  • or: Sol veya sağ alt ifadelerinden biri olarak değerlendirilirse true olarak değerlendirilen trueikili işleç.
  • not: Alt ifadesinin olarak değerlendirilip değerlendirilmediğini true değerlendiren falsebirli işleç (veya tersi).

Bunlar, koleksiyon işleçleri any ve allile birlikte, çok karmaşık arama ölçütlerini ifade eden filtreler oluşturmanıza olanak sağlar.

Sözdizimi

Aşağıdaki EBNF (Genişletilmiş Backus-Naur Formu), mantıksal işleçleri kullanan bir OData ifadesinin dil bilgisini tanımlar.

logical_expression ::=
    boolean_expression ('and' | 'or') boolean_expression
    | 'not' boolean_expression

Etkileşimli söz dizimi diyagramı da kullanılabilir:

Dekont

EbNF'nin tamamı için bkz . Azure AI Search için OData ifade söz dizimi başvurusu.

İki mantıksal ifade biçimi vardır: iki alt ifadenin bulunduğu ikili ()and/or ve yalnızca bir tane olan birli ( .not Alt ifadeler herhangi bir türde Boole ifadeleri olabilir:

  • Türe ait alanlar veya aralık değişkenleri Edm.Boolean
  • veya gibi geo.intersects türde Edm.Booleandeğerler döndüren işlevlersearch.ismatch
  • Karşılaştırma ifadeleri, örneğin rating gt 4
  • Koleksiyon ifadeleri, örneğin Rooms/any(room: room/Type eq 'Deluxe Room')
  • Boole değişmez değerleri true veya false.
  • , orve notkullanılarak andyapılan diğer mantıksal ifadeler.

Önemli

özellikle lambda ifadelerinin içinde ile and/orher türlü alt ifadenin kullanılamadığı bazı durumlar vardır. Ayrıntılar için bkz . Azure AI Search'te OData koleksiyon işleçleri.

Mantıksal işleçler ve null

İşlevler ve karşılaştırmalar gibi Boole ifadelerinin çoğu değer üretemez null ve mantıksal işleçler değişmez değere null doğrudan uygulanamaz (örneğin, x and null izin verilmez). Ancak, Boole alanları olabilirnull, bu nedenle , orve not işleçlerinin null varlığında nasıl anddavrandığını bilmeniz gerekir. Bu, türündeki bir alan Edm.Booleanolan b aşağıdaki tabloda özetlenmiştir:

Expression Şu durumlarda b sonuç: 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

Boole alanı b bir filtre ifadesinde tek başına göründüğünde, yazılmış gibi davranır; bu b eq truenedenle, ise bnullifadesi olarak değerlendirilir false. Benzer şekilde, not b gibi not (b eq true)davranır, bu nedenle olarak değerlendirilir true. Bu şekilde, null alanlar ile falseaynı şekilde davranır. Bu, yukarıdaki tabloda gösterildiği gibi ve orkullanan and diğer ifadelerle birleştirildiğinde nasıl davrandıklarıyla tutarlıdır. Buna rağmen, (b eq false) ile doğrudan karşılaştırma false yine de olarak falsedeğerlendirilir. Başka bir deyişle, null Boole ifadelerinde olduğu gibi davransa bile değerine eşit falsedeğildir.

Örnekler

Alanın 3 ile 5 (dahil) arasında olduğu rating belgeleri eşleştirin:

    rating ge 3 and rating le 5

Alanın tüm öğelerinin ratings 3'ten küçük veya 5'ten büyük olduğu belgeleri eşleştirin:

    ratings/all(r: r lt 3 or r gt 5)

Alanın verilen çokgen içinde olduğu location ve belgenin "genel" terimini içermediği belgeleri eşleştirin.

    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')

Taban fiyatı 160'tan az olan deluxe bir odanın bulunduğu Vancouver, Kanada'daki oteller için belgeleri eşleştirin:

    Address/City eq 'Vancouver' and Address/Country eq 'Canada' and Rooms/any(room: room/Type eq 'Deluxe Room' and room/BaseRate lt 160)

Sonraki adımlar