Lucene lekérdezési szintaxis az Azure AI Searchben

Amikor lekérdezéseket hoz létre az Azure AI Searchben, választhatja a Lucene Query Parser teljes szintaxisát a speciális lekérdezési űrlapokhoz: helyettesítő karakterek, homályos keresés, közelségi keresés, reguláris kifejezések. A Lucene Query Parser szintaxis nagy része érintetlenül implementálva van az Azure AI Searchben, kivéve a *tartománykereséseket, amelyek kifejezésekkel vannak létrehozva $filter .

A teljes Lucene szintaxis használatához állítsa be a queryType függvényt egy helyettesítő karakterhez, homályos kereséshez vagy a teljes szintaxis által támogatott többi lekérdezési űrlaphoz mintául szolgáló lekérdezési kifejezéshez, és adja át a lekérdezéstípust full . A REST-ben a lekérdezési kifejezéseket a searchkeresési dokumentumok (REST API) kérés paramétere adja meg.

Példa (teljes szintaxis)

Az alábbi példa egy teljes szintaxissal létrehozott keresési kérelem. Ebben a konkrét példában a helyszíni keresés és a kifejezések kiemelése látható. Olyan szállodákat keres, ahol a kategóriamező tartalmazza a kifejezést budget. A kifejezést "recently renovated" tartalmazó dokumentumok a kiemelési érték (3) alapján magasabbra kerülnek.

POST /indexes/hotels-sample-index/docs/search?api-version=2023-11-01
{
  "queryType": "full",
  "search": "category:budget AND \"recently renovated\"^3",
  "searchMode": "all"
}

Bár a paraméter nem tartozik egyetlen lekérdezéstípusra sem, a paraméter ebben a searchMode példában releváns. Amikor operátorok szerepelnek a lekérdezésben, általában úgy kell beállítania searchMode=all , hogy az összes feltétel megfeleltetve legyen.

További példákat a Lucene-lekérdezés szintaxisának példáiban talál. A lekérdezési kérelemről és a paraméterekről , beleértve a searchMode-ot is, lásd: Keresési dokumentumok (REST API).

Szintaxis alapjai

Az alábbi szintaxis alapjai a Lucene szintaxist használó összes lekérdezésre érvényesek.

Operátorok kiértékelése a kontextusban

Az elhelyezés határozza meg, hogy egy szimbólum operátorként vagy csak egy sztring egy másik karaktereként van-e értelmezve.

A Lucene teljes szintaxisában például a tilde (~) a homályos kereséshez és a közelségi kereséshez is használható. Idézett kifejezés ~ után elhelyezve közelségi keresést hív meg. Amikor egy kifejezés végére kerül, ~ a rendszer homályos keresést hív meg.

Egy kifejezésen belül, például business~analysta karakter nem lesz operátorként értékelve. Ebben az esetben, feltételezve, hogy a lekérdezés kifejezés vagy kifejezés lekérdezés, teljes szöveges keresés lexikális elemzés csíkok ki a ~ kifejezést, és megszakítja a kifejezést business~analyst két: business VAGYanalyst.

A fenti példa a tilde (~), de ugyanez az elv minden operátorra érvényes.

Speciális karakterek menekülése

Annak érdekében, hogy bármelyik keresési operátort a keresési szöveg részeként használja, egy fordított perjellel (\) előtaggal meneküljön el a karakter elől. Ha például egy helyettesítő karaktert keres https://, ahol :// a lekérdezési sztring része, meg kell adnia search=https\:\/\/*. Hasonlóképpen, egy szökött telefonszám minta is így \+1 \(800\) 642\-7676néz ki.

A menekülést igénylő speciális karakterek a következők:
+ - & | ! ( ) { } [ ] ^ " ~ * ? : \ /

Feljegyzés

Bár a menekülés együtt tartja a jogkivonatokat, az indexelés során végzett lexikális elemzések eltávolíthatják őket. A standard Lucene-elemző például megszakítja a szavakat kötőjeleken, szóközökön és más karaktereken. Ha speciális karaktereket igényel a lekérdezési sztringben, szükség lehet egy elemzőre, amely megőrzi őket az indexben. Egyes lehetőségek közé tartoznak a Microsoft természetes nyelvelemzői, amelyek megőrzik a kötőjeles szavakat, vagy egy egyéni elemzőt az összetettebb mintákhoz. További információ: Részleges kifejezések, minták és speciális karakterek.

Nem biztonságos és fenntartott karakterek kódolása URL-címekben

Győződjön meg arról, hogy minden nem biztonságos és fenntartott karakter URL-címben van kódolva. Például egy nem biztonságos karakter, # mert egy URL-cím töredék/horgonyazonosítója. A karaktert az URL-címben való használat esetén kódolni %23 kell. & és = példák a fenntartott karakterekre, mivel elválasztják a paramétereket, és értékeket adnak meg az Azure AI Searchben. További részletekért lásd: RFC1738: Uniform Resource Locators (URL).

A nem biztonságos karakterek a következők " ` < > # % { } | \ ^ ~ [ ]: . A fenntartott karakterek a következők ; / ? : @ = + &: .

Logikai operátorok

Logikai operátorokat beágyazhat egy lekérdezési sztringbe egyezés pontosságának javítása érdekében. A teljes szintaxis a karakteroperátorok mellett a szöveg operátorokat is támogatja. Mindig adjon meg szöveges logikai operátorokat (AND, OR, NOT) az összes nagybetűben.

Szöveg operátor Karakter Példa Használat
ÉS + wifi AND luxury Megadja azokat a kifejezéseket, amelyeket egy egyezésnek tartalmaznia kell. A példában a lekérdezési motor olyan dokumentumokat keres, amelyek mindkettőt wifi és luxury. A plusz karakter (+) közvetlenül egy kifejezés előtt is használható, hogy szükség legyen rá. Például azt írja elő, +wifi +luxury hogy mindkét kifejezésnek valahol egy dokumentum mezőjében kell megjelennie.
VAGY (nincs) 1 wifi OR luxury Egyezést talál, ha bármelyik kifejezés megtalálható. A példában a lekérdezési motor egyezést ad vissza a vagy mindkettőt tartalmazó wifiluxury dokumentumokon. Mivel az OR az alapértelmezett kötőkötő operátor, azt is kihagyhatja, így wifi luxury az egyenértékű a következővel wifi OR luxury: .
NEM !, - wifi –luxury Egyezést ad vissza a kifejezést kizáró dokumentumokon. Például olyan dokumentumokat keres, amelyek kifejezéssel rendelkeznek, wifi –luxury de nemluxury.wifi

1 A | karakter nem támogatott az OR-műveletek esetében.

NEM logikai operátor

Fontos

A NOT operátor (NOTvagy !-) a teljes szintaxisban másképp viselkedik, mint az egyszerű szintaxisban.

  • Egyszerű szintaxis esetén a negációval rendelkező lekérdezések mindig automatikusan hozzáadnak egy helyettesítő karaktert. A lekérdezés például automatikusan ki lesz bontva a következőre -luxury-luxury *: .
  • A teljes szintaxisban a tagadással rendelkező lekérdezések nem kombinálhatók helyettesítő karakterekkel. A lekérdezések például nem engedélyezettek -luxury * .
  • A teljes szintaxisban az egyetlen negációval rendelkező lekérdezések nem engedélyezettek. A lekérdezés -luxury például nem engedélyezett.
  • A teljes szintaxisban a negációk úgy fognak viselkedni, mintha mindig AND-ként jelennek meg a lekérdezésben a keresési módtól függetlenül.
    • A teljes szintaxisú lekérdezés wifi -luxury például csak a kifejezést wifitartalmazó dokumentumokat olvassa be, majd alkalmazza a negációt -luxury ezekre a dokumentumokra.
  • Ha negations használatával szeretne keresni az index összes dokumentumában, ajánlott egyszerű szintaxist használni a any keresési móddal.
  • Ha negations használatával szeretne keresni az indexben lévő dokumentumok egy részhalmazán, akkor a teljes szintaxis vagy az egyszerű szintaxis az összes keresési móddal ajánlott.
Lekérdezés típusa Keresési mód Példa lekérdezés Működés
Egyszerű bármelyik wifi -luxury Az indexben lévő összes dokumentumot visszaadja. A "wifi" kifejezéssel vagy a "luxus" kifejezéssel nem rendelkező dokumentumok rangsorolása magasabb, mint a többi dokumentum. A lekérdezés ki van bontva a következőre wifi OR -luxury OR *: .
Egyszerű mind wifi -luxury Csak olyan dokumentumokat ad vissza az indexben, amelyek tartalmazzák a "wifi" kifejezést, és nem tartalmazzák a "luxus" kifejezést. A lekérdezés ki van bontva a következőre wifi AND -luxury AND *: .
Teljes bármelyik wifi -luxury Csak a "wifi" kifejezést tartalmazó dokumentumokat adja vissza az indexben, majd a "luxus" kifejezést tartalmazó dokumentumok törlődnek az eredményekből.
Teljes mind wifi -luxury Csak a "wifi" kifejezést tartalmazó dokumentumokat adja vissza az indexben, majd a "luxus" kifejezést tartalmazó dokumentumok törlődnek az eredményekből.

Mezős keresés

A szintaxissal fieldName:searchExpression mezős keresési műveletet definiálhat, ahol a keresési kifejezés lehet egyetlen szó vagy kifejezés, vagy egy összetettebb kifejezés zárójelben, opcionálisan logikai operátorokkal. Néhány példa a következőkre:

  • genre:jazz NOT history

  • artists:("Miles Davis" "John Coltrane")

Ügyeljen arra, hogy több sztringet is idézőjelek közé helyezzen, ha azt szeretné, hogy mindkét sztringet egyetlen entitásként értékelje ki, ebben az esetben két különböző művészt keres a artists mezőben.

A megadott fieldName:searchExpression mezőnek mezőnek searchable kell lennie. Az indexattribútumok meződefiníciókban való használatáról az Index létrehozása című témakörben olvashat.

Feljegyzés

Mezős keresési kifejezések használatakor nem kell használnia a searchFields paramétert, mert minden mezővel rendelkező keresési kifejezéshez külön mezőnév van megadva. A paramétert azonban akkor is használhatja searchFields , ha olyan lekérdezést szeretne futtatni, amelyben bizonyos részek hatóköre egy adott mezőre terjed ki, a többi pedig több mezőre is vonatkozhat. A lekérdezés search=genre:jazz NOT history&searchFields=description például csak a genre mezővel egyezikjazz, míg a description mezővel egyezikNOT history. A megadott mezőnév fieldName:searchExpression mindig elsőbbséget élvez a searchFields paraméternél, ezért ebben a példában nem kell belefoglalnunk genre a searchFields paraméterbe.

Intelligens keresés

A homályos keresések hasonló szerkezetű kifejezésekben talál találatokat, és legfeljebb 50 olyan kifejezést bontanak ki, amelyek megfelelnek a két vagy kevesebb távolságra vonatkozó feltételeknek. További információ: Fuzzy search.

Ha homályos keresést szeretne végezni, használja az egyetlen szó végén lévő tilde ~ szimbólumot egy választható paraméterrel, egy 0 és 2 közötti számmal (alapértelmezett), amely megadja a szerkesztési távolságot. Például, blue~ vagy blue~1 visszaadja blue, bluesés glue.

A homályos keresés csak kifejezésekre alkalmazható, idézőjelbe foglalt kifejezésekre nem, de a tilde minden kifejezéshez külön-külön hozzáfűzhető egy többrészes névben vagy kifejezésben. Például egyezne Unviersty~ of~ Wshington~ a következőn University of Washington: .

Közelségi keresés

A közelségi keresések olyan kifejezéseket keresnek, amelyek egy dokumentumban egymás közelében találhatók. Szúrjon be egy tilde ~ szimbólumot egy kifejezés végére, amelyet a közelségi határt létrehozó szavak száma követ. Megkeresi például "hotel airport"~5 a kifejezéseket hotel és airport egymás öt szava között egy dokumentumban.

Kifejezés kiemelése

A kifejezésnövelés azt jelenti, hogy egy dokumentumot magasabbra rangsorolt, ha a kiemelt kifejezést tartalmazza, a nem a kifejezést tartalmazó dokumentumokhoz képest. Ez eltér attól, hogy a pontozási profilok konkrét kifejezések helyett egyes mezőket emelnek ki.

Az alábbi példa a különbségek szemléltetésében segít. Tegyük fel, hogy van egy pontozó profil, amely egy adott területen növeli a találatokat, például a műfajt a musicstoreindex-példában. A kifejezések kiemelésével tovább növelhetők bizonyos keresési kifejezések, mint mások. Például növeli azokat a dokumentumokat, rock^2 electronic amelyek a műfaji mezőben a keresési kifejezéseket tartalmazzák, magasabbra, mint az index más kereshető mezői. Továbbá a kőzet keresési kifejezését tartalmazó dokumentumok magasabb rangsorban vannak, mint a többi elektronikus keresési kifejezés a "kiemelési érték" (2) eredményeként.

Egy kifejezés kiemeléséhez használja a caret , ^szimbólumot a keresett kifejezés végén egy kiemelési tényezővel (számmal). A kifejezéseket is növelheti. Minél magasabb a kiemelési tényező, annál relevánsabb a kifejezés a többi keresési kifejezéshez képest. Alapértelmezés szerint a kiemelési tényező 1. Bár a boost faktornak pozitívnak kell lennie, 1-nél kisebb lehet (például 0,20).

Reguláris kifejezéskeresés

A reguláris kifejezéskeresés az Apache Lucene alatt érvényes minták alapján talál egyezést a RegExp osztályban dokumentált módon. Az Azure AI Searchben egy reguláris kifejezés van elzárva a perjelek /között.

Például a dokumentumokat tartalmazó motelhoteldokumentumok megkereséséhez adja meg a következőt /[mh]otel/: A reguláris kifejezéskeresések egyetlen szóhoz vannak igazítva.

Egyes eszközök és nyelvek az Azure AI Search által előírt menekülési szabályokon túl további menekülési karakterkövetelményeket írnak elő. JSON esetén az előre perjelet tartalmazó sztringek visszafelé perjellel kerülnek ki: microsoft.com/azure/ ez lesz search=/.*microsoft.com\/azure\/.*/ az a hely, ahol search=/.* <string-placeholder>.*/ a reguláris kifejezés be van állítva, és microsoft.com\/azure\/ az a sztring, amely egy szökött perjellel rendelkezik.

A regex lekérdezések két gyakori szimbóluma az és *a . . Egy . karakter egyezik egy karakterrel, egy pedig * az előző karakter nullával vagy több alkalommal. Például egyezik a feltételekkel, /be./ és a feltételek /be*/bee megegyeznek be, beede beee nembetbet. Együtt, lehetővé teszi, .* hogy egyezzen bármilyen karaktersorozatot, így /be.*/ minden olyan kifejezés, amely kezdődik be , mint például better.

Ha szintaxishibákat kap a reguláris kifejezésben, tekintse át a speciális karakterek feloldó szabályait . Egy másik ügyfelet is megpróbálhat ellenőrizni, hogy a probléma eszközspecifikus-e.

Helyettesítő karakterek keresése

Általánosan felismert szintaxist használhat több (*) vagy egy (?) karakteres helyettesítő karakter kereséséhez. A teljes Lucene szintaxis támogatja az előtag, az infix és az utótag egyeztetését.

Vegye figyelembe, hogy a Lucene lekérdezéselemző egyetlen kifejezéssel, nem pedig kifejezéssel támogatja ezeknek a szimbólumoknak a használatát.

Rögzítés típusa Leírás és példák
Előtag A kifejezéstöredék elé * vagy ?elé kerül. Például a visszatérések lekérdezési kifejezése search=alpha*alphanumeric vagy alphabetical. Az előtag-egyeztetés egyszerű és teljes szintaxisban is támogatott.
Utótag A kifejezéstöredék a szerkezet elhatárolásához egy perjellel vagy utána jön *?. Például a search=/.*numeric/ visszaadott érték alphanumeric.
Infix Kifejezéstöredékek belefoglalják * vagy ?. Például visszaadja search=non*alnon-numerical és nonsensical.

Az operátorokat egyetlen kifejezésben kombinálhatja. Például egyezések 980?2*?98072-122298052-1234egy adott (kötelező) karakteren, egy * tetszőleges hosszúságú karaktereken pedig az alábbi egyezések.

Az utótag-egyeztetéshez a reguláris kifejezés perjelelválasztóira / van szükség. Általában nem használhat egy vagy ? több szimbólumot * a kifejezés első karaktereként a /. Azt is fontos megjegyezni, hogy a * regex lekérdezéseken kívül másként viselkedik. A regex perjelelválasztón / kívül az * egy helyettesítő karakter, amely a regexhez hasonlóan .* minden karaktersorozatot megfeleltet. Példaként ugyanazt az eredményhalmazt hozza létre, search=/non.*al/ mint a search=non*al.

Feljegyzés

A mintaegyeztetés általában lassú, ezért érdemes lehet alternatív módszereket keresni, például az él n-gram tokenizálását, amely jogkivonatokat hoz létre egy kifejezésben szereplő karaktersorozatokhoz. Az n-gram tokenizálással az index nagyobb lesz, de a lekérdezések gyorsabban hajthatók végre a minta felépítésétől és az indexelt sztringek hosszától függően. További információ: Részleges kifejezéskeresés és speciális karakterekkel ellátott minták.

Az elemző hatása helyettesítő karakterek lekérdezéseire

A lekérdezéselemzés során az előtagként, utótagként, helyettesítő karakterként vagy reguláris kifejezésként megfogalmazott lekérdezéseket a rendszer a lexikális elemzés megkerülésével továbbítja a lekérdezésfának. Az egyezések csak akkor jelennek meg, ha az index a lekérdezés által megadott formátumban tartalmazza a sztringeket. A legtöbb esetben olyan elemzőre van szükség az indexelés során, amely megőrzi a sztring integritását, hogy a részleges kifejezés és mintaegyezés sikeres legyen. További információ: Részleges kifejezéskeresés az Azure AI Search-lekérdezésekben.

Fontolja meg azt a helyzetet, hogy a keresési lekérdezés terminal* olyan találatokat ad vissza, amelyek olyan kifejezéseket tartalmaznak, mint terminatea , terminationés terminates.

Ha az en.lucene (angol Lucene) elemzőt használná, az minden kifejezés agresszív származtatását alkalmazná. A rendszer terminationterminates például terminateaz indexben lévő jogkivonatig összes jogkivonatot jogkivonatként termi fogja használni. A másik oldalon a helyettesítő karaktereket vagy homályos kereséseket használó lekérdezések kifejezéseit egyáltalán nem elemzi a rendszer, így nem lenne olyan eredmény, amely megfelelne a terminat* lekérdezésnek.

A másik oldalon a Microsoft-elemzők (ebben az esetben az en.microsoft analyzer) egy kicsit fejlettebbek, és lemmatizálást használnak a lemmatizálás helyett. Ez azt jelenti, hogy minden létrehozott jogkivonatnak érvényes angol szavaknak kell lennie. Például , terminateterminatesés termination többnyire teljes marad az indexben, és előnyösebb választás lenne olyan forgatókönyvekhez, amelyek sokat függenek a helyettesítő karakterektől és a homályos kereséstől.

Helyettesítő és regex lekérdezések pontozása

Az Azure AI Search gyakoriságalapú pontozást (BM25) használ a szöveges lekérdezésekhez. A helyettesítő és regex lekérdezések esetében azonban, ahol a kifejezések hatóköre potenciálisan széles lehet, a gyakorisági tényező figyelmen kívül lesz hagyva, hogy a rangsor ne torzítsa a találatok felé a ritkábban előforduló kifejezéseket. A rendszer minden találatot egyformán kezel helyettesítő és regex keresések esetén.

Speciális karakterek

Bizonyos esetekben érdemes lehet egy speciális karaktert keresni, például egy "❤" hangulatjelet vagy egy "€" jelet. Ilyen esetekben győződjön meg arról, hogy a használt elemző nem szűri ki ezeket a karaktereket. A standard elemző számos speciális karaktert ad át, kivéve őket az indexből.

A speciális karaktereket tokenizáló elemzők közé tartozik a whitespace analyzer, amely figyelembe veszi a szóközökkel jogkivonatként elválasztott karaktersorozatokat (így a sztring jogkivonatnak minősül). Emellett egy olyan nyelvelemző, mint a Microsoft English Analyzer ("en.microsoft"), jogkivonatként veszi fel az "€" sztringet. Tesztelheti az elemzőt , hogy lássa, milyen jogkivonatokat hoz létre egy adott lekérdezéshez.

Unicode-karakterek használatakor ellenőrizze, hogy a szimbólumok megfelelően vannak-e feloldva a lekérdezés URL-címében (például a feloldósorozatot %E2%9D%A4+használná). Egyes REST-ügyfelek automatikusan elvégzik ezt a fordítást.

Elsőbbség (csoportosítás)

Zárójelek használatával allekérdezéseket hozhat létre, beleértve a zárójeles utasításban szereplő operátorokat is. Például megkeresi a motel kifejezést tartalmazó dokumentumokat, motel+(wifi|luxury) vagy wifiluxury (vagy mindkettőt).

A mezőcsoportozás hasonló, de a csoportosítás egyetlen mezőre terjed ki. Például hotelAmenities:(gym+(wifi|pool)) keres a mezőben gymhotelAmenities, és wifi, vagy gym éspool.

Lekérdezésméretkorlátok

Az Azure AI Search korlátozza a lekérdezések méretét és összetételét, mert a kötetlen lekérdezések destabilizálhatják a keresési szolgáltatást. A lekérdezések méretére és összetételére (a záradékok száma) korlátozások vonatkoznak. Az előtagkeresés hosszára, valamint a regex keresés és a helyettesítő karakterek keresésének összetettségére vonatkozó korlátozások is léteznek. Ha az alkalmazás programozott módon hoz létre keresési lekérdezéseket, javasoljuk, hogy úgy tervezzen meg, hogy ne hozzon létre kötetlen méretű lekérdezéseket.

További információ a lekérdezési korlátokról: API-kérések korlátai.

Lásd még