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 all
kullanan 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ürtrue
. - kullanan
any
bir ifade, koşul koleksiyonun en az bir öğesi için true ise döndürürtrue
.
- kullanan
- 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ürtrue
. Koleksiyon boşsa döndürürfalse
.
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.distance lt le geo.intersects Alt ifadeleri ile birleştirme or |
veya ile kullanma geo.distance gt ge not geo.intersects(...) Alt ifadeleri ile birleştirme and |
Collection(Edm.DateTimeOffset) , Collection(Edm.Double) , Collection(Edm.Int32) , Collection(Edm.Int64) |
, , ne , lt , gt , le veya kullanan eq karşı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 , le veya kullanan eq karşı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.