Azure AI Search'te OData mantıksal işleçleri - and
, or
, not
Azure AI Search'teki OData filtre ifadeleri veya false
olarak 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 ifadelerinintrue
olarak değerlendirilip değerlendirilmediğini değerlendirentrue
bir ikili işleç.or
: Sol veya sağ alt ifadelerinden biri olarak değerlendirilirsetrue
olarak değerlendirilentrue
ikili işleç.not
: Alt ifadesinin olarak değerlendirilip değerlendirilmediğinitrue
değerlendirenfalse
birli işleç (veya tersi).
Bunlar, koleksiyon işleçleri any
ve all
ile 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:
Not
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ürdeEdm.Boolean
değ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
veyafalse
. - ,
or
venot
kullanılarakand
yapılan diğer mantıksal ifadeler.
Önemli
özellikle lambda ifadelerinin içinde ile and
/or
her 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 , or
ve not
işleçlerinin null varlığında nasıl and
davrandığını bilmeniz gerekir. Bu, türündeki bir alan Edm.Boolean
olan 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 true
nedenle, ise b
null
ifadesi 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 false
aynı şekilde davranır. Bu, yukarıdaki tabloda gösterildiği gibi ve or
kullanan 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 false
değerlendirilir. Başka bir deyişle, null
Boole ifadelerinde olduğu gibi davransa bile değerine eşit false
değ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)