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.
Az OData nyelvének áttekintése az
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.
Ez a cikk áttekintést nyújt az OData-kifejezésnyelvről, amelyet az Azure AI Keresésben a kulcsszókereséshez használnak a numerikus és sztringes (nem vektor) mezőknél $filter, $order-by, és $select kifejezésekben.
A nyelv "alulról felfelé" jelenik meg, kezdve a legalapvetőbb elemekkel. A lekérdezéskérelemben létrehozható OData-kifejezések az egyszerűtől a rendkívül összetettig terjednek, de mindegyik közös elemeket használ. A megosztott elemek a következők:
- Mezőútvonalak, amelyek az index adott mezőire vonatkoznak.
- Konstansok, amelyek egy adott adattípus konstans értékei.
Miután megismerte ezeket a gyakori fogalmakat, folytathatja az egyes kifejezések legfelső szintű szintaxisát:
- $filter kifejezések kiértékelése a lekérdezéselemzés során, a keresés adott mezőkre való korlátozása vagy az indexvizsgálatok során használt egyezési feltételek hozzáadása.
- $orderby kifejezések utófeldolgozási lépésként kerülnek alkalmazásra egy eredménykészleten a visszaadott dokumentumok rendezéséhez.
- $select kifejezések határozzák meg, hogy mely dokumentummezők szerepelnek az eredményhalmazban.
Ezeknek a kifejezéseknek a szintaxisa eltér a keresési paraméterben használt egyszerű vagy teljes lekérdezési szintaxistól, bár a hivatkozási mezők szintaxisa átfedésben van.
Más nyelveken, például a Pythonban vagy a C#-ban is találhat példákat az azure-search-vector-samples adattárban.
Feljegyzés
Az Azure AI Keresés terminológiája néhány szempontból eltér az OData szabványtól . Az Azure AI Keresés egy mezőjét OData-tulajdonságnak nevezzük, és hasonlóképpen a mező elérési útját és a tulajdonság elérési útját is. Az Azure AI Keresésben dokumentumokat tartalmazó indexet az OData általában entitásokat tartalmazó entitáskészletként hivatkozik. Ebben a hivatkozásban az Azure AI Keresés terminológiája használatos.
Mezőútvonalak
A mezőútvonalak nyelvtanát az alábbi EBNF (Extended Backus-Naur form) határozza meg.
field_path ::= identifier('/'identifier)*
identifier ::= [a-zA-Z_][a-zA-Z_0-9]*
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 mezőútvonalak egy vagy több , perjelekkel elválasztott azonosítóból állnak. Minden azonosító olyan karaktersorozat, amelynek ASCII betűvel vagy aláhúzásjellel kell kezdődnie, és csak ASCII-betűket, számjegyeket vagy aláhúzásjeleket tartalmaz. A betűk lehetnek nagybetűsek vagy kisbetűk.
Az azonosítók hivatkozhatnak egy mező nevére, vagy egy tartományváltozóra a szűrőben lévő gyűjteménykifejezés (any vagy all) kontextusában. A tartományváltozó olyan, mint egy hurokváltozó, amely a gyűjtemény aktuális elemét jelöli. Összetett gyűjtemények esetén ez a változó egy objektumot jelöl, ezért mezőútvonalak használatával hivatkozhat a változó almezőire. Ez sok programozási nyelv pontjegyzetéhez hasonló.
Példák a mezőútvonalakra az alábbi táblázatban:
| Mező elérési útja | Leírás |
|---|---|
HotelName |
Az index legfelső szintű mezőjére hivatkozik |
Address/City |
City Egy összetett mező almezőjére hivatkozik az indexben; Address a példa típusa Edm.ComplexType |
Rooms/Type |
Type almezőjére hivatkozik egy összetett gyűjteménymezőben az indexben; Rooms ebben a példában a Collection(Edm.ComplexType) típusú. |
Stores/Address/Country |
Country Egy összetett gyűjteménymező almezőjének Address almezőjére hivatkozik az indexben; Stores típusa Collection(Edm.ComplexType) és Address típusa Edm.ComplexType ebben a példában |
room/Type |
A Type a room tartományváltozó almezőjére hivatkozik, például a Rooms/any(room: room/Type eq 'deluxe') szűrőkifejezésben. |
store/Address/Country |
A Country a Address almező a store tartományváltozó almezőjére vonatkozik, például a szűrőkifejezésben Stores/any(store: store/Address/Country eq 'Canada'). |
A mezőútvonal jelentése a környezettől függően eltérő. A szűrőkben a mező elérési útja az aktuális dokumentumban lévő mező egyetlen példányának értékét jelenti. Más környezetekben, például $orderby, $select, vagy a teljes Lucene szintaxisban lévő mezős keresésben a mező elérési útja magára a mezőre utal. Ez a különbség bizonyos következményekkel jár arra nézve, hogy miként használja a mezőútvonalakat a szűrőkben.
Vegye figyelembe a mező útvonalát Address/City. A szűrőben ez az aktuális dokumentum egyetlen városára vonatkozik, például a "San Francisco"-ra. Ezzel szemben a Rooms/Type a Type almezőre hivatkozik számos szoba esetében (például "standard" az első szobára, "deluxe" a második szobára, és így tovább). Mivel Rooms/Type nem hivatkozik az almező egyedüli esetére Type, nem használható közvetlenül szűrésnél. Ehelyett a helyiségtípusra való szűréshez egy lambda kifejezést használna egy tartományváltozóval, például a következővel:
Rooms/any(room: room/Type eq 'deluxe')
Ebben a példában a tartományváltozó room megjelenik a room/Type mező elérési útján. Így room/Type az aktuális dokumentum aktuális helyiségének típusára utal. Ez az Type almező egyetlen példánya, így közvetlenül a szűrőben is használható.
Mezőútvonalak használata
A mezőútvonalak az Azure AI Keresés REST API-k számos paraméterében használhatók. Az alábbi táblázat felsorolja az összes helyet, ahol használhatók, valamint a használatukra vonatkozó korlátozásokat:
| API | Paraméter neve | Korlátozások |
|---|---|---|
| Index létrehozása vagy frissítése | suggesters/sourceFields |
Egyik sem |
| Index létrehozása vagy frissítése | scoringProfiles/text/weights |
Csak kereshető mezőkre hivatkozhat |
| Index létrehozása vagy frissítése | scoringProfiles/functions/fieldName |
Csak szűrhető mezőkre hivatkozhat |
| Keresés |
search mikor queryType van full |
Csak kereshető mezőkre hivatkozhat |
| Keresés | facet |
Csak facetable mezőkre hivatkozhat. |
| Keresés | highlight |
Csak kereshető mezőkre hivatkozhat |
| Keresés | searchFields |
Csak kereshető mezőkre hivatkozhat |
| Javaslat és automatikus kiegészítés | searchFields |
Csak olyan mezőkre hivatkozhat, amelyek egy javaslattevőhöz tartoznak |
| Keresés, javaslat és automatikus kiegészítés | $filter |
Csak szűrhető mezőkre hivatkozhat |
| Keresés és javaslat | $orderby |
Csak rendezhető mezőkre hivatkozhat |
| Keresés, javaslat és keresés | $select |
Csak visszakereshető mezőkre hivatkozhat |
Állandók
Az OData-konstansok egy adott Entity Data Model (EDM) típushoz tartozó literálértékek. Az Azure AI Keresésben támogatott típusok listáját a Támogatott adattípusok című témakörben találja. A gyűjteménytípusok állandói nem támogatottak.
Az alábbi táblázat az OData-kifejezéseket támogató nem adattípusok konstansainak példáit mutatja be:
| Adattípus | Példaállandók |
|---|---|
Edm.Boolean |
true, false |
Edm.DateTimeOffset |
2019-05-06T12:30:05.451Z |
Edm.Double |
3.14159, -1.2e7, NaN, INF-INF |
Edm.GeographyPoint |
geography'POINT(-122.131577 47.678581)' |
Edm.GeographyPolygon |
geography'POLYGON((-122.031577 47.578581, -122.031577 47.678581, -122.131577 47.678581, -122.031577 47.578581))' |
Edm.Int32 |
123, -456 |
Edm.Int64 |
283032927235 |
Edm.String |
'hello' |
Speciális karakterek megkerülése sztringkonstansokban
Az OData sztringkonstansait egyszeres idézőjelek határolják el. Ha olyan sztringállandóval rendelkező lekérdezést kell létrehoznia, amely maga is tartalmazhat egyetlen idézőjelet, a beágyazott idézőjelek megkétszerezésével elkerülheti őket.
Például egy olyan formázatlan aposztrófot tartalmazó kifejezés, mint "Alice autója" az OData-ban sztringállandóként 'Alice''s car'jelenik meg.
Fontos
A szűrők programozott létrehozásakor fontos megjegyezni, hogy a felhasználói bemenetből származó sztringállandók kivédésére van szükség. Ez az injekciós támadások lehetőségének mérséklését szolgálja, különösen akkor, ha szűrőket használ a biztonsági szűkítés megvalósításához.
Konstansok szintaxisa
Az alábbi EBNF (Extended Backus-Naur Form) a fenti táblázatban látható állandók többségének nyelvtanát határozza meg. A földrajzi térbeli típusok nyelvtana az Azure AI Keresés OData geo-térbeli függvényeiben található.
constant ::=
string_literal
| date_time_offset_literal
| integer_literal
| float_literal
| boolean_literal
| 'null'
string_literal ::= "'"([^'] | "''")*"'"
date_time_offset_literal ::= date_part'T'time_part time_zone
date_part ::= year'-'month'-'day
time_part ::= hour':'minute(':'second('.'fractional_seconds)?)?
zero_to_fifty_nine ::= [0-5]digit
digit ::= [0-9]
year ::= digit digit digit digit
month ::= '0'[1-9] | '1'[0-2]
day ::= '0'[1-9] | [1-2]digit | '3'[0-1]
hour ::= [0-1]digit | '2'[0-3]
minute ::= zero_to_fifty_nine
second ::= zero_to_fifty_nine
fractional_seconds ::= integer_literal
time_zone ::= 'Z' | sign hour':'minute
sign ::= '+' | '-'
/* In practice integer literals are limited in length to the precision of
the corresponding EDM data type. */
integer_literal ::= digit+
float_literal ::=
sign? whole_part fractional_part? exponent?
| 'NaN'
| '-INF'
| 'INF'
whole_part ::= integer_literal
fractional_part ::= '.'integer_literal
exponent ::= 'e' sign? integer_literal
boolean_literal ::= 'true' | 'false'
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.
Kifejezések létrehozása mezőútvonalakból és állandókból
A mezőútvonalak és -állandók az OData-kifejezések legalapvetőbb részei, de már maguk a teljes kifejezések. Az Azure AI Keresés $select paramétere valójában nem más, mint a mezőútvonalak vesszővel tagolt listája, és $orderby nem sokkal bonyolultabb, mint $select. Ha történetesen egy típusmező Edm.Boolean van az indexben, akár olyan szűrőt is írhat, amely nem más, mint a mező elérési útja. Az állandók true és false ugyanígy érvényes szűrők.
Gyakoribb azonban, hogy összetett kifejezések egynél több mezőre és állandóra hivatkoznak. Ezek a kifejezések a paramétertől függően különböző módokon épülnek fel.
A következő EBNF (Extended Backus-Naur form) határozza meg a $filter, $orderby és $select paraméterek nyelvtanát. Ezek a mezőútvonalakra és állandókra hivatkozó egyszerűbb kifejezésekből épülnek fel:
filter_expression ::= boolean_expression
order_by_expression ::= order_by_clause(',' order_by_clause)*
select_expression ::= '*' | field_path(',' field_path)*
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.
Következő lépések
A $orderby és $select paraméterek az egyszerűbb kifejezések vesszővel tagolt listái. A $filter paraméter egy logikai kifejezés, amely egyszerűbb részexpressziókból áll. Ezek az alkifejezések olyan logikai operátorok használatával vannak kombinálva, mint and, or és not, az összehasonlító operátorok, például eq, lt, gt stb., valamint a kollekciós operátorok, mint any és all.
A $filter, $orderby és $select paramétereket az alábbi cikkek részletesebben ismertetik: