OData-gyűjtemény-operátorok az Azure AI Keresésben – any és all

Feljegyzés

Azure AI Keresés a Azure portálon, REST API-kon és Azure SDK-k keresztül érhető el. Emellett a Foundry IQ-t is támogatja, amely a vállalati tartalmakat újrafelhasználható, engedélytudatos tudásbázisokká alakítja át az Microsoft Foundry portálon található ügynökök számára.

Amikor OData-szűrőkifejezést ír az Azure AI Keresés szolgáltatással való használatra, gyakran hasznos a gyűjteménymezőkre szűrni. Ezt a any és all operátorok használatával érheti el.

Szintaxis

Az alábbi EBNF (Extended Backus-Naur Form) meghatározza egy OData-kifejezés nyelvtanát, amely any vagy all használ.

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 megtekintéséhez lásd az Azure AI Keresés OData kifejezés szintaxishivatkozását.

A gyűjteményeket három kifejezésforma szűri.

  • Az első kettő iterál egy gyűjteménymezőn, és egy lambda kifejezés formájában megadott predikátumot alkalmaz a gyűjtemény minden elemére.
    • A all kifejezés true értéket ad vissza, ha a predikátum igaz a gyűjtemény minden elemére.
    • Egy kifejezés, amely a(z) any-t használja, a true-t adja vissza, 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énynek vannak elemei, visszaadja 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 tartományváltozóra mint szűrőfeltétel alkalmazandó a gyűjtemény egyes elemeire.

Példák

Egyezik azokkal a dokumentumokkal, amelyek tags mezőjében pontosan a "wifi" karakterlánc 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ő bármelyik geokoordinátája az adott sokszögben található:

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()

Keresse meg azokat a dokumentumokat, ahol (az összes helyiségben) a rooms/amenities mező "tv"-t tartalmaz, és a rooms/baseRate kisebb mint 100.

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 a következő jellemzők engedélyezettek: any Lambda-kifejezésekben a következő jellemzők engedélyezettek: all
Collection(Edm.ComplexType) Minden, kivéve search.ismatch és search.ismatchscoring Ugyanaz
Collection(Edm.String) Összehasonlítások a eq vagy a search.in-vel

A részkifejezések kombinálása or
Összehasonlítások a ne vagy a not search.in()-vel

A részkifejezések kombinálása and
Collection(Edm.Boolean) Összehasonlítások a eq vagy a ne-vel Ugyanaz
Collection(Edm.GeographyPoint) Használat geo.distance a következővel: lt vagy le

geo.intersects

A részkifejezések kombinálása or
Használat geo.distance a következővel: gt vagy ge

not geo.intersects(...)

A részkifejezé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 ne kivételével más alkifejezések and történő kombinálása

Kifejezések, amelyek and és or kombinációit használják a Diszjunktív Normál Forma (DNF)-ban
Ö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 eq kivételével más alkifejezések or történő kombinálása

Kifejezések a and és or kombinációit használva a konjunktív normál formában (CNF)

Ezekről a korlátozásokról és példákról további információt az Azure AI Keresés 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 Keresés gyűjteményszűrőinek ismertetését.

Következő lépések