Azure Yapay Zeka Arama'te OData mantıksal işleçleri - and, or, not

Not

Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.

Azure Yapay Zeka Arama'teki OData filtre ifadeleri, true veya false olarak değerlendirilen 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 ifadeleri true olarak değerlendirildiğinde true sonucunu veren bir ikili işlemci.
  • or: İkili işleç, sol veya sağ alt ifadelerinden biri true olarak değerlendirildiğinde true olarak değerlendirilir.
  • not: Alt ifadesi true olarak değerlendirildiğinde false olarak değerlendiren, aksi takdirde tersi geçerli olan tekil operatör.

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:

Not

EBNF'nin tamamı için Azure Yapay Zeka Arama için OData ifade söz dizimi başvurusu bölümüne bakın.

İ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
  • Fonksiyonlar Edm.Boolean türünde değerler döndürür, örneğin geo.intersects veya search.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.
  • Diğer mantıksal ifadeler, and, or ve not kullanılarak yapılmıştır.

Ö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 Yapay Zeka Arama'te OData koleksiyon işleçleri.

Mantıksal işleçler ve null

Boole ifadelerinin çoğu, işlevler ve karşılaştırmalar gibi, null değerlerini üretemez ve mantıksal işleçler, sabit değere null doğrudan uygulanamaz (örneğin, x and null'e izin verilmez). Ancak, Boole alanları null olabilir, bu nedenle and, or ve not işleçlerinin null varlığında nasıl davrandığını bilmeniz gerekir. Bu, b türünde bir alan olan Edm.Boolean'in yer aldığı aşağıdaki tabloda özetlenmiştir.

İfade b durumu null olduğunda sonuç
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 tek başına göründüğünde, sanki b eq true olarak yazılmış gibi davranır, bu nedenle eğer bnull ise, ifade false olarak değerlendirilir. Benzer şekilde, not b gibi not (b eq true) davranır, bu nedenle true olarak değerlendirilir. Bu şekilde, null alanlar ile falseaynı şekilde davranır. Bu, yukarıdaki tabloda gösterildiği gibi and ve or kullanan diğer ifadelerle birleştirildiğinde nasıl davrandıklarıyla tutarlıdır. Buna rağmen, false ile doğrudan karşılaştırma yine de b eq false olarak false şeklinde değ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ı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