Azure AI Search'teki OData koleksiyon işleçleri - any ve all

Azure AI Search ile kullanılacak bir OData filtre ifadesi yazarken, koleksiyon alanlarına göre filtrelemek genellikle yararlıdır. Bunu ve all işleçlerini any kullanarak gerçekleştirebilirsiniz.

Sözdizimi

Aşağıdaki EBNF (Genişletilmiş Backus-Naur Formu), veya allkullanan any bir OData ifadesinin dil bilgisini tanımlar.

collection_filter_expression ::=
    field_path'/all(' lambda_expression ')'
    | field_path'/any(' lambda_expression ')'
    | field_path'/any()'

lambda_expression ::= identifier ':' 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.

Koleksiyonları filtreleyen üç ifade biçimi vardır.

  • İlk ikisi bir koleksiyon alanı üzerinde yinelenir ve koleksiyonun her öğesine lambda ifadesi biçiminde verilen bir koşul uygulanır.
    • kullanan all bir ifade, koşul koleksiyonun her öğesi için true ise döndürür true .
    • kullanan any bir ifade, koşul koleksiyonun en az bir öğesi için true ise döndürür true .
  • Koleksiyon filtresinin üçüncü biçimi, bir koleksiyon alanının boş olup olmadığını test etmek için lambda ifadesi olmadan kullanır any . Koleksiyonun herhangi bir öğesi varsa döndürür true. Koleksiyon boşsa döndürür false.

Koleksiyon filtresindeki lambda ifadesi , bir programlama dilindeki döngünün gövdesi gibidir. Yineleme sırasında koleksiyonun geçerli öğesini tutan aralık değişkeni olarak adlandırılan bir değişken tanımlar. Ayrıca, koleksiyonun her öğesi için aralık değişkenine uygulanacak filtre ölçütü olan başka bir boole ifadesi tanımlar.

Örnekler

Alanı tam olarak "wifi" dizesini içeren belgeleri tags eşleştirin:

tags/any(t: t eq 'wifi')

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

ratings/all(r: r ge 3 and r le 5)

Alandaki coğrafi koordinatlardan locations herhangi birinin verilen çokgen içinde olduğu belgeleri eşleştirin:

locations/any(loc: geo.intersects(loc, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))

Alanın boş olduğu rooms belgeleri eşleştir:

not rooms/any()

Alanın "tv" içerdiği ve rooms/baseRate 100'den küçük olduğu (tüm odalar için) rooms/amenities belgeleri eşleştirin:

rooms/all(room: room/amenities/any(a: a eq 'tv') and room/baseRate lt 100.0)

Sınırlamalar

Filtre ifadelerinin her özelliği bir lambda ifadesinin gövdesinde kullanılamaz. Sınırlamalar, filtrelemek istediğiniz koleksiyon alanının veri türüne bağlı olarak farklılık gösterir. Aşağıdaki tabloda sınırlamalar özetlemektedir.

Veri türü ile lambda ifadelerinde izin verilen özellikler any ile lambda ifadelerinde izin verilen özellikler all
Collection(Edm.ComplexType) ve dışındaki search.ismatch her şey search.ismatchscoring Aynısı
Collection(Edm.String) veya ile eq karşılaştırmalar search.in

Alt ifadeleri ile birleştirme or
veya ile ne karşılaştırmalar not search.in()

Alt ifadeleri ile birleştirme and
Collection(Edm.Boolean) veya ile eq karşılaştırmalar ne Aynısı
Collection(Edm.GeographyPoint) veya ile kullanma geo.distanceltle

geo.intersects

Alt ifadeleri ile birleştirme or
veya ile kullanma geo.distancegtge

not geo.intersects(...)

Alt ifadeleri ile birleştirme and
Collection(Edm.DateTimeOffset), Collection(Edm.Double), Collection(Edm.Int32), Collection(Edm.Int64) , , ne, lt, gt, leveya kullanan eqkarşılaştırmalarge

kullanarak karşılaştırmaları diğer alt ifadelerle birleştirme or

Kullanarak diğer alt ifadeler dışında ne karşılaştırmaları birleştirme and

Disjunctive Normal Form (DNF) içinde ve or birleşimlerini kullanan ifadeler and
, , ne, lt, gt, leveya kullanan eqkarşılaştırmalarge

kullanarak karşılaştırmaları diğer alt ifadelerle birleştirme and

Kullanarak diğer alt ifadeler dışında eq karşılaştırmaları birleştirme or

Konjonktif and Normal Formda (CNF) ve or birleşimlerini kullanan ifadeler

Bu sınırlamalar ve örnekler hakkında daha fazla bilgi için bkz . Azure AI Search'te koleksiyon filtreleriyle ilgili sorunları giderme. Bu sınırlamaların neden mevcut olduğu hakkında daha ayrıntılı bilgi için bkz . Azure AI Search'te koleksiyon filtrelerini anlama.

Sonraki adımlar