Azure Bilişsel Arama OData mantıksal işleçleri- and , or , not

Azure Bilişsel Arama 'de OData filtre ifadeleri , veya sonucunu veren Boole ifadeleridir true false . Bir dizi daha basit filtre yazarak ve bunları Boolean ALKU'dan mantıksal işleçler kullanarak oluşturarak karmaşık bir filtre yazabilirsiniz:

  • and: true Hem sol hem de sağ alt ifadelerinin olarak değerlendirilmesi için değerlendirilen bir ikili işleç true .
  • or: true Sol veya sağ alt ifadelerden birinin olarak değerlendirilip değerlendirilmeyeceğini değerlendiren bir ikili işleç true .
  • not: true Alt ifadesi olarak değerlendirilen false ve tam tersi olarak değerlendirilen birli bir işleç.

Bunlar, koleksiyon işleçleri any ve all ile birlikte çok karmaşık arama ölçütlerine hızlı bir şekilde ifade edebilen filtreler oluşturmanız için izin verir.

Syntax

Aşağıdaki EBNF (genişletilmiş Backus-Naur formu) mantıksal işleçleri kullanan bir OData ifadesinin dilbilgisini tanımlar.

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

Etkileşimli bir sözdizimi diyagramı da kullanılabilir:

İki mantıksal ifade biçimi vardır: ikili (), and / or burada iki alt ifade ve birli () vardır; not burada yalnızca bir tane vardır. Alt ifadeler herhangi bir türden Boolean ifadeler olabilir:

  • Türündeki alanlar veya Aralık değişkenleri Edm.Boolean
  • Türü değer döndüren işlevler, örneğin Edm.Boolean geo.intersects veya search.ismatch
  • Karşılaştırma ifadeleri, örneğin rating gt 4
  • Gibi koleksiyon ifadeleriRooms/any(room: room/Type eq 'Deluxe Room')
  • Boolean sabit değerleri true veya false .
  • , Ve kullanılarak oluşturulan diğer mantıksal ifadeler and or not .

Önemli

and / or Özellikle lambda ifadeleri içinde, tüm alt ifade türlerinin birlikte kullanılabileceği bazı durumlar vardır. Ayrıntılar için bkz. Azure 'Da OData koleksiyon işleçleri bilişsel arama .

Mantıksal işleçler ve null

İşlevler ve karşılaştırmalar gibi çoğu Boole ifadesi değer üretemiyor null ve mantıksal işleçler null doğrudan sabit değere uygulanamaz (örneğin, x and null buna izin verilmez). Ancak, Boolean alanları olabilir null , bu nedenle, and or ve işleçlerinin, not null durumunda nasıl davrandığına dikkat etmeniz gerekir. Bu, aşağıdaki tabloda özetlenmiştir, burada, b türünde bir alandır Edm.Boolean :

Expression bNe zaman 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

Bir Boole alanı b bir filtre ifadesinde kendisiyle göründüğünde, yazılmış gibi davranır b eq true , b yani ise null ifadesi olarak değerlendirilir false . Benzer şekilde, not b gibi davranır not (b eq true) , olarak değerlendirilir true . Bu şekilde, null alanlar aynı şekilde davranır false . Bu, and or Yukarıdaki tabloda gösterildiği gibi ve kullanan diğer ifadelerle birleştirildiğinde, nasıl davrandıklarından tutarlıdır. Buna rağmen, () öğesine doğrudan false karşılaştırma b eq false olmaya devam edecektir false . Diğer bir deyişle, null false Boolean ifadelerde gibi davransa bile, öğesine eşit değildir.

Örnekler

ratingAlanın 3 ile 5 arasında (dahil) olduğu 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)

locationAlanın verilen çokgen içinde bulunduğu belgeleri eşleştirin ve belge "genel" terimini içermez.

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

160 'den düşük bir temel fiyata sahip olan bir lüks, Kanada 'daki otel belgelerini 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