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 kifejezésekkel létrehozott $filter
tartománykereséseket.
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 search
keresé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=2024-07-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~analyst
a 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\-7676
né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ó wifi luxury 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 (NOT
vagy !
-
) 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éstwifi
tartalmazó dokumentumokat olvassa be, majd alkalmazza a negációt-luxury
ezekre a dokumentumokra.
- A teljes szintaxisú lekérdezés
- 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ó motel
hotel
dokumentumok 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
, bee
de beee
nembet
bet
. 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 és az infix egyezését. Használjon reguláris kifejezésszintaxist az utótag-egyeztetéshez.
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őképző | 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. |
toldalék | 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*al non-numerical és nonsensical . |
Az operátorokat egyetlen kifejezésben kombinálhatja. Például egyezések 980?2*
?
98072-1222
98052-1234
egy 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óért lásd: Részleges kifejezéskeresés és minták speciális karakterekkel.
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 terminate
a , 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 termination
terminates
például terminate
az 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 , terminate
terminates
é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 wifi
luxury
(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 gym
hotelAmenities
, é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.