Share via


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 allazt 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ő:

Megjegyzé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.
  • 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őt true: . Ha a gyűjtemény üres, az eredmény false.

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)

Limitations

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 eqsearch.in

Alkifejezések kombinálása or
Összehasonlítások a nenot search.in()

Alkifejezések kombinálása and
Collection(Edm.Boolean) Összehasonlítások a eqne Ugyanaz
Collection(Edm.GeographyPoint) Használat geo.distance a következővel vagy ltle

geo.intersects

Alkifejezések kombinálása or
Használat geo.distance a következővel vagy gtge

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, levagy 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 neand

Kifejezések disjunctive Normal Form (DNF) és "Disjunctive Normal Form" (Disjunctive Normal Form, DNF) kombinációit andorhasználó kifejezések
Összehasonlítások a következőkkel: eq, ne, lt, gt, levagy 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 eqor

Kifejezések a conjunctive Normal Form (CNF) és a andor"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.

Következő lépések