OData search.in függvény az Azure AI Keresésben

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.

Az OData-szűrőkifejezések gyakori forgatókönyve annak ellenőrzése, hogy az egyes dokumentumok egyetlen mezője egyenlő-e a számos lehetséges érték egyikével. Egyes alkalmazások például így valósítják meg a biztonsági vágást : egy vagy több egyszerű azonosítót tartalmazó mezőnek a lekérdezést kibocsátó felhasználót képviselő egyszerű azonosítók listájában való ellenőrzésével. Egy ilyen lekérdezés megírásának egyik módja eq és or operátorok használata:

    group_ids/any(g: g eq '123' or g eq '456' or g eq '789')

Ezt azonban rövidebben is megírhatja a search.in függvény használatával:

    group_ids/any(g: search.in(g, '123, 456, 789'))

Fontos

Amellett, hogy rövidebb és könnyebben olvasható, a használata search.in teljesítménybeli előnyöket is biztosít, és elkerüli a szűrők bizonyos méretkorlátozásait, ha több száz vagy akár több ezer értéket kell belefoglalni a szűrőbe. Ezért határozottan javasoljuk, hogy egy bonyolultabb egyenlőségi kifejezések diszjunkciója helyett használja search.in.

Feljegyzés

Az OData szabvány 4.01-es verziója nemrég bevezette az in operátort, amely hasonló viselkedést mutat, mint az search.in Azure AI Keresés függvénye. Az Azure AI Keresés azonban nem támogatja ezt az operátort, ezért inkább a függvényt search.in kell használnia.

Szintaxis

A következő EBNF (Kiterjesztett Backus-Naur Form) határozza meg a függvény () nyelvtanát.

search_in_call ::=
    'search.in(' variable ',' string_literal(',' string_literal)? ')'

Interaktív szintaxisdiagram is elérhető:

Feljegyzés

A teljes EBNF-hez tekintse meg az Azure AI Keresés OData-kifejezésszintaxis-hivatkozását.

A search.in függvény ellenőrzi, hogy egy adott sztringmező vagy tartományváltozó egyenlő-e egy adott értéklista egyikével. A változó és a lista egyes értékei közötti egyenlőséget a kis- és nagybetűk megkülönböztetése határozza meg, ugyanúgy, mint az eq operátor esetében. Ezért egy hasonló search.in(myfield, 'a, b, c') kifejezés egyenértékű azzal myfield eq 'a' or myfield eq 'b' or myfield eq 'c', hogy search.in sokkal jobb teljesítményt eredményez.

A search.in függvénynek két túlterhelései vannak.

  • search.in(variable, valueList)
  • search.in(variable, valueList, delimiters)

A paraméterek a következő táblázatban vannak definiálva:

Paraméter neve Típus Leírás
variable Edm.String Karakterláncmező-hivatkozás (vagy egy tartományváltozó egy karakterláncgyűjtemény mezői között abban az esetben, ha search.in egy any vagy all kifejezésen belül van használva).
valueList Edm.String A karakterlánc olyan elválasztott értékek listáját tartalmazza, amelyeket egyeztetni kell a variable paraméterrel. Ha a delimiters paraméter nincs megadva, az alapértelmezett elválasztójelek a szóköz és a vessző.
delimiters Edm.String Egy sztring, amelyben az egyes karakterek elválasztóként vannak kezelve a valueList paraméter elemzésekor. Ennek a paraméternek az alapértelmezett értéke azt ' ,' jelenti, hogy a szóközökkel és/vagy vesszőkkel rendelkező értékek külön lesznek választva. Ha szóközök és vesszők kivételével más elválasztójeleket kell használnia, mert az értékek tartalmazzák ezeket a karaktereket, alternatív elválasztójeleket is megadhat, például '|' ebben a paraméterben.

A(z) search.in teljesítménye

Ha használja search.in, másodperc alatti válaszidőre számíthat, ha a második paraméter több száz vagy több ezer értéket tartalmazó listát tartalmaz. Nincs explicit korlátja az átengedhető search.inelemek számának, bár a maximális kérelemméret továbbra is korlátozott. A késés azonban az értékek számának növekedésével nő.

Példák

Keresse meg az összes olyan szállodát, amelynek neve megegyezik a "Sea View motel" vagy a "Budget hotel" névvel. A kifejezések szóközöket tartalmaznak, ami az alapértelmezett elválasztójel. A harmadik sztringparaméterként megadhat egy alternatív elválasztójelet egyetlen idézőjelben:

    search.in(HotelName, 'Sea View motel,Budget hotel', ',')

Keresse meg az összes olyan szállodát, amelynek neve "Sea View motel" vagy "Budget hotel" (|) által elválasztva van):

    search.in(HotelName, 'Sea View motel|Budget hotel', '|')

Keresse meg az összes olyan szállodát, amelynek "wifi" vagy "tub" címkéje van:

    Rooms/any(room: room/Tags/any(tag: search.in(tag, 'wifi, tub')))

Keressen egyezést a gyűjteményen belüli kifejezésekkel, például a címkékben található "fűtött törülközőtartókkal" vagy a "hajszárítóval együtt" kifejezésekkel.

    Rooms/any(room: room/Tags/any(tag: search.in(tag, 'heated towel racks,hairdryer included', ','))

Keresse meg az összes szállodát a "motel" vagy a "kabin" címke nélkül:

    Tags/all(tag: not search.in(tag, 'motel, cabin'))

Következő lépések