Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzé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.
Az Azure AI Keresés gyűjteménymezőire való szűréshez használhatja a és any operátorokat együtt all. A lambda kifejezés egy olyan alszűrő, amelyet a rendszer a gyűjtemény minden elemére alkalmaz.
A szűrőkifejezések nem minden funkciója érhető el a lambda kifejezésben. Az elérhető funkciók a szűrni kívánt gyűjteménymező adattípusától függenek. Ez a korlátozás hibát okozhat, ha olyan szolgáltatást próbál használni egy lambda kifejezésben, amely ebben a környezetben nem támogatott. Ha ilyen hibákba ütközik, amikor összetett szűrőt próbál írni a gyűjteménymezőkre, ez a cikk segít elhárítani a problémát.
Gyakori gyűjteményszűrő-hibák
Az alábbi táblázat felsorolja azokat a hibákat, amelyeket a gyűjteményszűrők végrehajtásakor tapasztalhat. Ezek a hibák akkor fordulnak elő, ha olyan szűrőkifejezéseket használ, amelyek nem támogatottak a lambda kifejezésben. Minden hiba útmutatást ad a szűrő újraírásához a hiba elkerülése érdekében. A táblázat a cikk megfelelő szakaszára mutató hivatkozást is tartalmaz, amely további információt nyújt a hiba elkerüléséről.
| Hibaüzenet | Helyzet | Részletek |
|---|---|---|
A függvény ismatch nem rendelkezik az 's' tartományváltozóhoz kötött paraméterekkel. Csak a kötött mezőhivatkozások támogatottak a Lambda-kifejezésekben ('any' vagy 'all'). Módosíthatja azonban a szűrőt, hogy a ismatch függvény a lambda kifejezésen kívül legyen, és próbálkozzon újra. |
Lambda-kifejezésben a search.ismatch vagy search.ismatchscoring használata |
Az összetett gyűjtemények szűrésének szabályai |
| Érvénytelen lambda kifejezés. Olyan egyenlőségi vagy egyenlőtlenségi tesztet talált, amelyben az ellenkezője várt egy Lambda-kifejezésben, amely a Collection(Edm.String) típusú mezőn iterál. Az "any" kifejezéshez használja az "x eq y" vagy a "search.in(...)" kifejezéseket. Az 'all' kifejezéshez használjon az "x ne y", a "not (x eq y)" vagy a "not search.in(...)" alakú kifejezéseket. | Szűrés egy típusmezőn Collection(Edm.String) |
Sztringgyűjtemények szűrésének szabályai |
Érvénytelen lambda kifejezés. Egy nem támogatott formájú összetett logikai kifejezést találtak. Az "any" kifejezésnél használja az "AND-k ORs-eit", más néven disjunctive Normal Form(ak) kifejezéseket. Például: (a and b) or (c and d) ahol az a, b, c és d összehasonlítási vagy egyenlőségi alexpressziók. Az "összes" kifejezéshez használja az "ORS AND-jei" kifejezést, más néven conjunctive Normal Formot. Például: (a or b) and (c or d) ahol az a, b, c és d összehasonlítási vagy egyenlőtlenségi alexpressziók. Példák összehasonlító kifejezésekre: "x gt 5", "x le 2". Példa egyenlőségi kifejezésre: "x eq 5". Példa egy egyenlőtlenségi kifejezésre: "x ne 5". |
Szűrés típusmezőkönCollection(Edm.DateTimeOffset), Collection(Edm.Double)vagy Collection(Edm.Int32)Collection(Edm.Int64) |
Az összehasonlítható gyűjtemények szűrésének szabályai |
| Érvénytelen lambda kifejezés. A geo.distance() vagy a geo.intersects() nem támogatott használatát találta egy lambda kifejezésben, amely a Collection (Edm.GeographyPoint) típusú mezőn halad át. Az "any" esetében győződjön meg arról, hogy összehasonlítja a geo.distance() függvényt az "lt" vagy a "le" operátor használatával, és győződjön meg arról, hogy a geo.intersects() használata nincs negagálva. Az "összes" esetében győződjön meg arról, hogy összehasonlítja a geo.distance() függvényt a "gt" vagy a "ge" operátorok használatával, és győződjön meg arról, hogy a geo.intersects() bármely használata negagálva van. | Szűrés egy típusmezőn Collection(Edm.GeographyPoint) |
A GeographyPoint-gyűjtemények szűrésének szabályai |
| Érvénytelen lambda kifejezés. Az összetett logikai kifejezések nem támogatottak a Lambda-kifejezésekben, amelyek a Collection(Edm.GeographyPoint) típusú mezőkön iterálnak. Az "any" esetében csatolja össze az alkifejezéseket a "vagy" operátorral; az 'és' operátor nem támogatott. Az "összes" esetében kösse össze a részkifejezéseket az 'és' operátorral; az "or" nem támogatott. | Szűrés mezők, amelyek típusa Collection(Edm.String) vagy Collection(Edm.GeographyPoint) |
Sztringgyűjtemények szűrésének szabályai A GeographyPoint-gyűjtemények szűrésének szabályai |
| Érvénytelen lambda kifejezés. Összehasonlító operátort (az "lt", a "le", a "gt" vagy a "ge" egyikét) talált. Csak egyenlőségi operátorok engedélyezettek a Lambda-kifejezésekben, amelyek a Collection(Edm.String) típusú mezőket iterálják. Az „any” esetében használjon „x eq y” formájú kifejezéseket. Az "összes" esetében használja az "x ne y" vagy a "not (x eq y)" form kifejezéseit. | Szűrés egy típusmezőn Collection(Edm.String) |
Sztringgyűjtemények szűrésének szabályai |
Érvényes gyűjteményszűrők írása
Az érvényes gyűjteményszűrők írására vonatkozó szabályok minden adattípus esetében eltérőek. A következő szakaszok olyan példákat mutatnak be a szabályokra, amelyek a támogatott szűrőfunkciókat támogatják, és amelyek nem:
- Sztringgyűjtemények szűrésének szabályai
- Logikai gyűjtemények szűrésének szabályai
- A GeographyPoint-gyűjtemények szűrésének szabályai
- Az összehasonlítható gyűjtemények szűrésének szabályai
- Az összetett gyűjtemények szűrésének szabályai
Sztringgyűjtemények szűrésének szabályai
A sztringgyűjtemények lambda-kifejezésein belül az egyetlen használható összehasonlító operátorok a eq és a ne.
Megjegyzés
Az Azure AI Keresés nem támogatja a lt/le/gt/gesztringek operátorait, akár egy lambda kifejezésen belül, akár azon kívül.
A any teste csak az egyenlőséget tesztelheti, míg a all csak az egyenlőtlenséget tesztelheti.
Több kifejezést is kombinálhat a or törzsében lévő any és a and törzsében lévő all keresztül. Mivel a search.in függvény egyenértékű az egyenlőségi ellenőrzések or-val való kombinálásával, ez a függvény a any törzsében is megengedett. Ezzel szemben a not search.in engedélyezett egy all törzsében.
Ezek a kifejezések például engedélyezettek:
tags/any(t: t eq 'books')tags/any(t: search.in(t, 'books, games, toys'))tags/all(t: t ne 'books')tags/all(t: not (t eq 'books'))tags/all(t: not search.in(t, 'books, games, toys'))tags/any(t: t eq 'books' or t eq 'games')tags/all(t: t ne 'books' and not (t eq 'games'))
Bár ezek a kifejezések nem engedélyezettek:
tags/any(t: t ne 'books')tags/any(t: not search.in(t, 'books, games, toys'))tags/all(t: t eq 'books')tags/all(t: search.in(t, 'books, games, toys'))tags/any(t: t eq 'books' and t ne 'games')tags/all(t: t ne 'books' or not (t eq 'games'))
Logikai gyűjtemények szűrésének szabályai
A típus Edm.Boolean csak az és eq az ne operátorokat támogatja. Ezért nem érdemes olyan záradékokat kombinálni, amelyek ugyanazt a tartományváltozót and/or ellenőrzik, mivel ez mindig tautológiákhoz vagy ellentmondásokhoz vezetne.
Íme néhány példa az engedélyezett logikai gyűjtemények szűrőire:
flags/any(f: f)flags/all(f: f)flags/any(f: f eq true)flags/any(f: f ne true)flags/all(f: not f)flags/all(f: not (f eq true))
A sztringgyűjteményekkel ellentétben a logikai gyűjtemények nem korlátozzák, hogy melyik operátor milyen típusú lambdakifejezésben használható. Mind eq, mind ne használható a any vagy all törzsében.
Logikai gyűjteményekben nem engedélyezettek az olyan kifejezések, mint a következők:
flags/any(f: f or not f)flags/any(f: f or f)flags/all(f: f and not f)flags/all(f: f and f eq true)
A GeographyPoint-gyűjtemények szűrésének szabályai
A gyűjtemények típusértékei Edm.GeographyPoint nem hasonlíthatók össze közvetlenül egymással. Ehelyett őket a geo.distance és geo.intersects függvények paramétereként kell használni. A geo.distance függvényt egy távolságértékkel kell összehasonlítani az összehasonlító operátorok ltegyikével , legtvagy ge. Ezek a szabályok a nemcollection Edm.GeographyPoint mezőkre is érvényesek.
A sztringgyűjteményekhez Edm.GeographyPoint hasonlóan a gyűjtemények is rendelkeznek bizonyos szabályokkal a térbeli függvények használatához és kombinálásához a lambdakifejezések különböző típusaiban:
- A függvényhez
geo.distancehasználható összehasonlító operátorok a lambda kifejezés típusától függenek. Ehhez aany-hez csak altvagy alehasználható. Ehhez aall-hez csak agtvagy agehasználható. Ageo.distancetartalmazó kifejezéseket tagadhatja, de módosítania kell az összehasonlító operátort: azgeo.distance(...) lt xhelyettnot (geo.distance(...) ge x)lesz, és ageo.distance(...) le xhelyettnot (geo.distance(...) gt x)válik. - Egy
allesetén ageo.intersectsfüggvényt meg kell tagadni. Ezzel szemben aanytesten belül ageo.intersectsfüggvényt nem szabad tagadni. - A
anytestben geotérbeli kifejezések kombinálhatókorsegítségével. A törzsbenall, az ilyen kifejezések kombinálhatókand.
A fenti korlátozások ugyanazokból az okokból léteznek, mint a karakterlánc-gyűjtemények egyenlőségi/egyenlőtlenségi korlátozása. Az OData-gyűjteményszűrők ismertetése az Azure AI Keresésben ezen okok részletesebb ismertetését ismerteti.
Íme néhány példa az engedélyezett gyűjtemények szűrőire Edm.GeographyPoint :
locations/any(l: geo.distance(l, geography'POINT(-122 49)') lt 10)locations/any(l: not (geo.distance(l, geography'POINT(-122 49)') ge 10) or geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))locations/all(l: geo.distance(l, geography'POINT(-122 49)') ge 10 and not geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))
Edm.GeographyPoint kollekciók esetén nem engedélyezettek az olyan kifejezések, mint a következők:
locations/any(l: l eq geography'POINT(-122 49)')locations/any(l: not geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))locations/all(l: geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))locations/any(l: geo.distance(l, geography'POINT(-122 49)') gt 10)locations/all(l: geo.distance(l, geography'POINT(-122 49)') lt 10)locations/any(l: geo.distance(l, geography'POINT(-122 49)') lt 10 and geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))locations/all(l: geo.distance(l, geography'POINT(-122 49)') le 10 or not geo.intersects(l, geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))'))
Az összehasonlítható gyűjtemények szűrésének szabályai
Ez a szakasz az alábbi adattípusokra vonatkozik:
Collection(Edm.DateTimeOffset)Collection(Edm.Double)Collection(Edm.Int32)Collection(Edm.Int64)
Az olyan típusok, mint a Edm.Int32 és Edm.DateTimeOffset, mind a hat összehasonlító operátort támogatják: eq, ne, lt, le, gt, és ge. Az ilyen típusú gyűjteményeken keresztüli Lambda-kifejezések ezen operátorok bármelyikét használó egyszerű kifejezéseket tartalmazhatnak. Ez vonatkozik mind a any, mind pedig a all-re. Ezek a szűrők például engedélyezettek:
ratings/any(r: r ne 5)dates/any(d: d gt 2017-08-24T00:00:00Z)not margins/all(m: m eq 3.5)
Vannak azonban korlátozások arra, hogy az ilyen összehasonlító kifejezések hogyan kombinálhatók összetettebb kifejezésekké egy lambda kifejezésen belül:
- Szabályok
anyszámára:Az egyszerű egyenlőtlenségi kifejezések nem kombinálhatók más kifejezésekkel. Ez a kifejezés például engedélyezett:
ratings/any(r: r ne 5)
de ez a kifejezés nem:
ratings/any(r: r ne 5 and r gt 2)
és bár ez a kifejezés engedélyezett, nem hasznos, mert a feltételek átfedésben vannak:
ratings/any(r: r ne 5 or r gt 7)
Egyszerű összehasonlító kifejezések, amelyek
eq,lt,le,gtvagyge-et tartalmaznak, kombinálhatókand/or-tel. Példa:ratings/any(r: r gt 2 and r le 5)ratings/any(r: r le 5 or r gt 7)
A
and(kötőszókkal) kombinált összehasonlító kifejezések tovább kombinálhatókor. Ez a forma a logikában "Disjunktív Normál Forma" (DNF) néven ismert. Példa:ratings/any(r: (r gt 2 and r le 5) or (r gt 7 and r lt 10))
- Szabályok
allszámára:Az egyszerű egyenlőségi kifejezések nem kombinálhatók más kifejezésekkel. Ez a kifejezés például engedélyezett:
ratings/all(r: r eq 5)
de ez a kifejezés nem:
ratings/all(r: r eq 5 or r le 2)
és bár ez a kifejezés engedélyezett, nem hasznos, mert a feltételek átfedésben vannak:
ratings/all(r: r eq 5 and r le 7)
Egyszerű összehasonlító kifejezések, amelyek
ne,lt,le,gtvagyge-et tartalmaznak, kombinálhatókand/or-tel. Példa:ratings/all(r: r gt 2 and r le 5)ratings/all(r: r le 5 or r gt 7)
Az összehasonlító kifejezéseket
or, azaz a kizárásokat, tovább lehet kombinálniand-nel. Ez az alak a Boole-algebrában "Konjunktív Normál Formaként" (CNF) ismert. Példa:ratings/all(r: (r le 2 or r gt 5) and (r lt 7 or r ge 10))
Az összetett gyűjtemények szűrésének szabályai
A Lambda-kifejezések összetett gyűjteményeken keresztül sokkal rugalmasabb szintaxist támogatnak, mint a lambda kifejezések a primitív típusú gyűjtemények esetében. Egy olyan lambdakifejezésen belül bármilyen szűrőszerkezetet használhat, amelyet az egyiken kívül is használhat, csak két kivétellel.
Először is, a függvények search.ismatch és search.ismatchscoring nem támogatottak a lambda kifejezésekben. További információ: OData-gyűjteményszűrők ismertetése az Azure AI Keresésben.
Másodszor, a tartományváltozóhoz (úgynevezett szabad változókhoz) nem kötött mezőkre való hivatkozás nem engedélyezett. Vegyük például a következő két egyenértékű OData-szűrőkifejezést:
stores/any(s: s/amenities/any(a: a eq 'parking')) and details/margin gt 0.5stores/any(s: s/amenities/any(a: a eq 'parking' and details/margin gt 0.5))
Az első kifejezés engedélyezett, míg a második űrlap elutasítva, mert details/margin nincs a tartományváltozóhoz skötve.
Ez a szabály olyan kifejezésekre is kiterjed, amelyek külső hatókörben kötött változókkal rendelkeznek. Az ilyen változók a megjelenési hatókörük tekintetében ingyenesek. Az első kifejezés például engedélyezett, míg a második egyenértékű kifejezés nem engedélyezett, mert s/name a tartományváltozó ahatóköre szempontjából ingyenes:
stores/any(s: s/amenities/any(a: a eq 'parking') and s/name ne 'Flagship')stores/any(s: s/amenities/any(a: a eq 'parking' and s/name ne 'Flagship'))
Ez a korlátozás a gyakorlatban nem jelent problémát, mivel mindig létrehozhatók olyan szűrők, amelyekben a lambda kifejezések csak kötött változókat tartalmaznak.
Gyűjteményszűrési szabályok csalólapja
Az alábbi táblázat összefoglalja az egyes gyűjtemény-adattípusok érvényes szűrőinek létrehozására vonatkozó szabályokat.
| Adattípus | A lambda-kifejezésekben engedélyezett funkciók: any |
A lambda-kifejezésekben engedélyezett funkciók: all |
|---|---|---|
Collection(Edm.ComplexType) |
Minden, kivéve search.ismatch és search.ismatchscoring |
Ugyanaz |
Collection(Edm.String) |
Összehasonlítások a eq vagy search.in Alkifejezések kombinálása or |
Összehasonlítások a ne vagy not search.in() Alkifejezések kombinálása and |
Collection(Edm.Boolean) |
Összehasonlítások a eq vagy ne |
Ugyanaz |
Collection(Edm.GeographyPoint) |
geo.distance használata lt vagy le geo.intersects Alkifejezések kombinálása or |
geo.distance használata gt vagy 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, 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 a and és or kombinációival a diszjunktív normál formában (DNF) |
Ö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, amelyek and és or kombinációkat használnak a konjunktív normál formában (CNF) |
Az egyes esetekhez érvényes szűrők létrehozására vonatkozó példákért tekintse meg az érvényes gyűjteményszűrők írását ismertető témakört.
Ha gyakran ír szűrőket, és jobban szeretné megérteni az első alapelvek szabályait mint csupán memorizálni őket, olvassa el az OData-gyűjteményszűrők megértése az Azure AI Keresés című dokumentációt.