Megosztás a következőn keresztül:


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

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.
  • 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)

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 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 and or haszná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 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.

Következő lépések