OData-gyűjtemény-operátorok az Azure AI Searchben – any
és all
Amikor OData-szűrőkifejezést ír az Azure AI Search szolgáltatással való használatra, gyakran hasznos a gyűjteménymezőkre szűrni. Ezt az operátorok és all
az any
operátorok használatával érheti el.
Syntax
Az alábbi EBNF (Extended Backus-Naur Form) egy olyan OData-kifejezés nyelvtanát határozza meg, amely vagy all
azt használjaany
.
collection_filter_expression ::=
field_path'/all(' lambda_expression ')'
| field_path'/any(' lambda_expression ')'
| field_path'/any()'
lambda_expression ::= identifier ':' boolean_expression
Interaktív szintaxisdiagram is elérhető:
Feljegyzés
A teljes EBNF-hez tekintse meg az Azure AI Search OData-kifejezésszintaxis-hivatkozását.
A gyűjteményeket három kifejezésforma szűri.
- Az első két iteráció egy gyűjteménymezőn keresztül, és egy lambda kifejezés formájában megadott predikátumot alkalmaz a gyűjtemény minden elemére.
- Ha a predikátum igaz a gyűjtemény minden elemére, a visszaadott
true
értéket használóall
kifejezés. - A visszaadott kifejezés
any
,true
ha a predikátum a gyűjtemény legalább egy elemére igaz.
- Ha a predikátum igaz a gyűjtemény minden elemére, a visszaadott
- A gyűjteményszűrő harmadik formája lambda kifejezés nélkül teszteli
any
, hogy egy gyűjteménymező üres-e. Ha a gyűjtemény tartalmaz elemeket, az visszaadja a következőttrue
: . Ha a gyűjtemény üres, az eredményfalse
.
A gyűjteményszűrők lambda-kifejezése olyan, mint egy programozási nyelv hurkojának törzse. Egy tartományváltozónak nevezett változót definiál, amely a gyűjtemény aktuális elemét tartalmazza az iteráció során. Emellett definiál egy másik logikai kifejezést is, amely a gyűjtemény egyes elemeire alkalmazandó szűrőfeltétel.
Példák
Egyezik azokkal a dokumentumokkal, amelyek tags
mezőjében pontosan a "wifi" sztring található:
tags/any(t: t eq 'wifi')
Egyeznie kell azokkal a dokumentumokkal, ahol a ratings
mező minden eleme 3 és 5 közé esik, beleértve a következőt:
ratings/all(r: r ge 3 and r le 5)
Egyezik azokkal a dokumentumokkal, amelyekben a locations
mező geokoordinátái az adott sokszögben találhatók:
locations/any(loc: geo.intersects(loc, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))
Egyezik azokkal a dokumentumokkal, ahol a rooms
mező üres:
not rooms/any()
Egyezik azokkal a dokumentumokkal, ahol (az összes helyiségben) a rooms/amenities
mező "tv"-t tartalmaz, és rooms/baseRate
100-nál kisebb:
rooms/all(room: room/amenities/any(a: a eq 'tv') and room/baseRate lt 100.0)
Korlátozások
A szűrőkifejezések nem minden funkciója érhető el a lambda kifejezés törzsében. A korlátozások a szűrni kívánt gyűjteménymező adattípusától függően eltérőek. Az alábbi táblázat összefoglalja a korlátozásokat.
Adattípus | Lambda-kifejezésekben engedélyezett funkciók a következőkkel: any |
Lambda-kifejezésekben engedélyezett funkciók a következőkkel: all |
---|---|---|
Collection(Edm.ComplexType) |
Minden, kivéve search.ismatch és search.ismatchscoring |
Ugyanaz |
Collection(Edm.String) |
Összehasonlítások a eq search.in Alkifejezések kombinálása or |
Összehasonlítások a ne not search.in() Alkifejezések kombinálása and |
Collection(Edm.Boolean) |
Összehasonlítások a eq ne |
Ugyanaz |
Collection(Edm.GeographyPoint) |
Használat geo.distance a következővel vagy lt le geo.intersects Alkifejezések kombinálása or |
Használat geo.distance a következővel vagy gt ge not geo.intersects(...) Alkifejezések kombinálása and |
Collection(Edm.DateTimeOffset) , Collection(Edm.Double) , Collection(Edm.Int32) Collection(Edm.Int64) |
Összehasonlítások a következőkkel: eq , ne , lt , gt , le vagy ge Összehasonlítások kombinálása más alkifejezésekkel or Összehasonlítások kombinálása más alkifejezések kivételével ne and Kifejezések disjunctive Normal Form (DNF) és "Disjunctive Normal Form" (Disjunctive Normal Form, DNF) kombinációit and or használó kifejezések |
Összehasonlítások a következőkkel: eq , ne , lt , gt , le vagy ge Összehasonlítások kombinálása más alkifejezésekkel and Összehasonlítások kombinálása más alkifejezések kivételével eq or Kifejezések a conjunctive Normal Form (CNF) és a and or "Conjunctive Normal Form" (Conjunctive Normal Form) kombinációit használó kifejezések |
Ezekről a korlátozásokról és példákról további információt az Azure AI Search gyűjteményszűrőinek hibaelhárítása című témakörben talál. A korlátozások okaival kapcsolatos részletesebb információkért tekintse meg az Azure AI Search gyűjteményszűrőinek ismertetését.