Intelligens keresés a helyesírási hibák és elírások kijavításához
Azure Cognitive Search támogatja az intelligens keresést, amely a bemeneti sztringben szereplő elírásokat és hibásan írt kifejezéseket kompenzáló lekérdezéstípus. Ezt úgy teszi, hogy hasonló összetételű kifejezéseket keres. A közeli találatokat lefedő keresés kibontása az elírás automatikus javításának hatására jár, ha az eltérés csak néhány téves karakterből áll.
Mi az a homályos keresés?
Ez egy lekérdezésbővítési gyakorlat, amely hasonló összetételű kifejezések alapján hoz létre egyezést. Ha intelligens keresést ad meg, a keresőmotor létrehoz egy hasonlóan összeállított kifejezésekből álló gráfot ( determinisztikus véges automatonelmélet alapján) a lekérdezés összes teljes kifejezéséhez. Ha például a lekérdezés három kifejezést tartalmaz: "washingtoni egyetem", a lekérdezés search=university~ of~ washington~
minden kifejezéséhez létrejön egy gráf (a homályos keresésben nincs leállítási szó, ezért az "of" gráfot kap).
A gráf legfeljebb 50 bővítésből vagy permutációból áll minden kifejezésből, és rögzíti a helyes és a helytelen változatokat is a folyamatban. A motor ezután visszaadja a legfontosabb találatokat a válaszban.
Az "egyetem" kifejezéshez hasonló kifejezések esetében a gráf "unversty, universty, university, universe, inverz" kifejezéssel rendelkezhet. A gráfban szereplő dokumentumok az eredmények között szerepelnek. Ellentétben azokkal a lekérdezésekkel, amelyek a szöveget elemzik ugyanannak a szónak a különböző formáinak ("egerek" és "egér") kezeléséhez, a homályos lekérdezések összehasonlítását arcértéken, a szöveg nyelvi elemzése nélkül végzik el. A "világegyetem" és az "inverz", amelyek szemantikailag eltérőek, egyezni fognak, mert a szintaktikai eltérések kicsik.
Az egyezés akkor sikeres, ha az eltérések kettő vagy kevesebb szerkesztésre korlátozódnak, ahol a szerkesztés egy beszúrt, törölt, helyettesített vagy transzponált karakter. A különbséget meghatározó sztringkorrekciós algoritmus a Damerau-Levenshtein távolságmetrika . Ez a "műveletek minimális száma (beszúrások, törlések, helyettesítések vagy két szomszédos karakter átültetése) szükséges, hogy az egyik szót a másikra módosítsuk".
A Azure Cognitive Search:
Az intelligens lekérdezések a teljes kifejezésekre vonatkoznak, de a kifejezéseket ÉS szerkezeteken keresztül is támogathatja. Az "Unviersty~ of~ "Wshington~" például a "Washingtoni Egyetem" szerint egyezik.
A szerkesztés alapértelmezett távolsága 2. Egy érték
~0
nem jelez bővítést (csak a pontos kifejezés számít egyezésnek), de megadhat~1
egy különbségi fokot vagy egy szerkesztést.Az intelligens lekérdezések legfeljebb 50 permutációval bővíthetik a kifejezéseket. Ez a korlát nem konfigurálható, de hatékonyan csökkentheti a bővítések számát, ha a szerkesztési távolságot 1-re csökkenti.
A válaszok olyan dokumentumokból állnak, amelyek megfelelő egyezést tartalmaznak (legfeljebb 50).
A lekérdezések feldolgozása során az intelligens lekérdezések nem esnek át lexikális elemzésen. A lekérdezés bemenete közvetlenül a lekérdezési fához lesz hozzáadva, és ki van bontva a kifejezések diagramjának létrehozásához. Az egyetlen végrehajtott átalakítás az alsó burkolat.
A gráfokat együttesen a rendszer az indexben lévő tokenekkel egyező feltételekként küldi el. Képzelhető el, hogy a homályos keresés eredendően lassabb, mint a többi lekérdezési űrlap. Az index mérete és összetettsége meghatározhatja, hogy az előnyök elegendőek-e a válasz késésének ellensúlyozásához.
Megjegyzés
Mivel a homályos keresés általában lassú, érdemes lehet megvizsgálni az olyan alternatívákat, mint az n-gram indexelés, a rövid karaktersorozatok (két és három karaktersorozat a bigram és a trigram tokenek esetében). A nyelvtől és a lekérdezési felülettől függően az n-gram jobb teljesítményt nyújthat. A kompromisszum az, hogy az n-gram indexelés nagyon tárolóigényes, és sokkal nagyobb indexeket hoz létre.
Egy másik alternatíva, amelyet figyelembe vehet, ha csak a legrégibb eseteket szeretné kezelni, szinonimatérkép lenne. Például a "search" leképezése a "serach, serch, sarch" vagy "retrieve" értékre a "retreive" értékre.
Indexelés intelligens kereséshez
A "kereshetőként" attribútumú sztringmezők intelligens keresésre alkalmasak.
Az elemzők nem használhatók bővítőgráf létrehozásához, de ez nem jelenti azt, hogy az elemzőket figyelmen kívül kell hagyni a homályos keresési forgatókönyvekben. Az elemzők az indexelés során fontos szerepet játszik a tokenizálásban, ahol az invertált indexekben lévő tokenek a gráftal való egyeztetéshez használatosak.
Mint mindig, ha a teszt lekérdezések nem a várt egyezéseket állítják elő, kísérletezzen különböző indexelő elemzőkkel. Próbálkozzon például egy nyelvelemzővel , és ellenőrizze, hogy jobb eredményeket kap-e. Egyes nyelvek, különösen a magánhangzó-mutációkkal rendelkezők, kihasználhatják a Microsoft természetes nyelvi feldolgozók által generált inflexiós és szabálytalan szóformákat. Bizonyos esetekben a megfelelő nyelvelemző használata különbséget tehet abban, hogy a kifejezés jogkivonata a felhasználó által megadott értékkel kompatibilis módon van-e jogkivonatosítva.
Intelligens keresés meghívása
Az intelligens lekérdezések a teljes Lucene-lekérdezési szintaxissal jönnek létre, a teljes Lucene lekérdezéselemzőt invokálják, és egy tilde karaktert ~
fűznek hozzá a felhasználó által megadott összes teljes kifejezés után.
Íme egy példa egy olyan lekérdezési kérelemre, amely intelligens keresést hív meg. Négy kifejezést tartalmaz, amelyek közül kettő hibásan van beírva:
POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{
"search": "seatle~ waterfront~ view~ hotle~",
"queryType": "full",
"searchMode": "any",
"searchFields": "HotelName, Description",
"select": "HotelName, Description, Address/City,",
"count": "true"
}
Állítsa a lekérdezés típusát a teljes Lucene szintaxisra (
queryType=full
).Adja meg azt a lekérdezési sztringet, amelyben az egyes kifejezéseket egy tilde (
~
) operátor követi az egyes kifejezések végén (search=<string>~
). A lekérdezés bemenetének minden kifejezéséhez létrejön egy bővítőgráf.Adjon meg egy választható paramétert, egy 0 és 2 közötti számot (alapértelmezett), ha meg szeretné adni a szerkesztési távolságot (
~1
). A "blue~" vagy a "blue~1" kifejezés például a "blue", a "blues" és a "glue" értéket adja vissza.
Igény szerint javíthatja a lekérdezési teljesítményt úgy, hogy a kérést adott mezőkre hatókörrel adhatja meg. A paraméter használatával searchFields
adja meg, hogy mely mezőkben szeretne keresni. A tulajdonsággal select
azt is megadhatja, hogy mely mezők lesznek visszaadva a lekérdezési válaszban.
Intelligens keresés tesztelése
Az egyszerű teszteléshez a Kereséskezelőt vagy a Postmant javasoljuk egy lekérdezési kifejezésen keresztüli iteráláshoz. Mindkét eszköz interaktív, ami azt jelenti, hogy gyorsan végiglépkedhet egy kifejezés több változatán, és kiértékelheti a visszaadandó válaszokat.
Ha az eredmények nem egyértelműek, a találatok kiemelésével azonosíthatja az egyezést a válaszban.
Megjegyzés
A találatok kiemelésének használata a homályos találatok azonosítására korlátozásokkal rendelkezik, és csak az alapszintű intelligens kereséshez működik. Ha az index pontozási profilokkal rendelkezik, vagy ha a lekérdezést több szintaxissal rétegezi, előfordulhat, hogy a találatkiemelés nem tudja azonosítani az egyezést.
1. példa: intelligens keresés a pontos kifejezéssel
Tegyük fel, hogy a következő sztring létezik egy keresési dokumentum egyik "Description"
mezőjében: "Test queries with special characters, plus strings for MSFT, SQL and Java."
Kezdje egy intelligens kereséssel a "special" kifejezésre, és adja hozzá a találatok kiemelését a Leírás mezőhöz:
search=special~&highlight=Description
A válaszban, mivel hozzáadott találatkiemelést, a formázás a "special" kifejezésre lesz alkalmazva az egyező kifejezésként.
"@search.highlights": {
"Description": [
"Test queries with <em>special</em> characters, plus strings for MSFT, SQL and Java."
]
Próbálkozzon újra a kéréssel, és írja le a "különleges" szöveget több levél ("pe") kivételével:
search=scial~&highlight=Description
Eddig nem történt változás a válaszban. Az alapértelmezett 2 fokos távolság használatával a két karakter "pe" eltávolítása a "speciális" karakterből továbbra is lehetővé teszi a sikeres egyezést ezen a kifejezésen.
"@search.highlights": {
"Description": [
"Test queries with <em>special</em> characters, plus strings for MSFT, SQL and Java."
]
Még egy kéréssel tovább módosíthatja a keresési kifejezést úgy, hogy kivesz egy utolsó karaktert összesen három törléshez (a "speciálistól" a "scal"-ig):
search=scal~&highlight=Description
Figyelje meg, hogy a rendszer ugyanazt a választ adja vissza, de most a "special" helyett az intelligens egyezés az "SQL"-en van.
"@search.score": 0.4232868,
"@search.highlights": {
"Description": [
"Mix of special characters, plus strings for MSFT, <em>SQL</em>, 2019, Linux, Java."
]
Ennek a kibontott példának a lényege annak az egyértelműségnek a szemléltetése, hogy a találatok kiemelése nem egyértelmű eredményeket hozhat. A függvény minden esetben ugyanazt a dokumentumot adja vissza. Ha a dokumentumazonosítókra támaszkodott volna az egyezés ellenőrzéséhez, előfordulhat, hogy elmulasztotta a "speciális" helyett az "SQL" közötti váltást.