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.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Amikor teljes szöveges indexet hozol létre, határozz meg egy oszlopszintű nyelvet az indexelt oszlophoz. Az oszlop teljes szövegű lekérdezései a megadott nyelv szóelválasztóját és szótövezőit használják. Gondold át, hogyan tokenizálja és indexeli a Full-Text Engine a szöveget, amikor kiválasztod az oszlopnyelvet.
Megjegyzés:
A teljes szöveges index oszlopának oszlopszintű nyelvének megadásához használja a LANGUAGE <language_term> záradékot az oszlop megadásakor. További információ: CREATE FULLTEXT INDEX és ALTER FULLTEXT INDEX.
Nyelvi támogatás a Full-Text Keresésben
Ez a szakasz bemutatja a szóhatárolókat és a szótövezőket, valamint ismerteti, hogyan használja a teljes szöveges keresés az oszlop szintjén beállított nyelv nyelvkód-azonosítóját (LCID).
Bevezetés a szóelválasztókba és a szótövezőkbe
Az SQL Server adatbázismotor számos nyelvhez tartalmaz szóelválasztókat és szótövezőket, amelyek alapértelmezés szerint engedélyezve vannak. A Microsoft Natural Language Group (NLG) implementálja és támogatja ezeket a nyelvi összetevőket. A támogatott nyelvek listájáért lásd sys.fulltext_languages.
Külső komponenseket, például szótörőket és szűrőket kell aláírni a biztonság javítása érdekében. Az aláírás ellenőrzéséhez futtatjuk a következő nyilatkozatot:
EXECUTE sp_fulltext_service 'verify_signature';
Hogyan használja Full-Text keresés az oszlopszintű nyelv nevét?
Amikor teljes szöveges indexet hozol létre, minden oszlophoz egy érvényes nyelvnevet adj meg. Ha egy nyelvnév érvényes, de a sys.fulltext_languages katalógusnézet nem adja vissza, akkor a Full-Text keresés visszakerül a legközelebbi elérhető nyelvnévhez ugyanabban a nyelvcsaládban, ha van. Ellenkező esetben a Teljes szöveges keresés a semleges szóra bontót használja. Ennek a visszalépési viselkedésnek a elkerülése érdekében határozz meg egy érvényes és elérhető nyelvnevet.
Megjegyzés:
Az LCID a teljes szöveges indexelésre jogosult összes adattípushoz (például karakterhez vagy ncharhoz) használható. Ha egy karakter, varchar vagy szöveg típusú oszlop rendezési sorrendje az LCID által azonosított nyelvtől eltérő nyelvre van beállítva, akkor az LCID mindenképpen az oszlopok teljes szöveges indexelése és lekérdezése során használatos.
Szótörés
A szóhatároló tokenizálja az indexelt szöveget a szóhatárokon, amelyek nyelvspecifikusak. Ezért a szótörési viselkedés különböző nyelvek között különbözik. Ha egy nyelvet használ, xtöbb nyelv ({x, yés z}) indexeléséhez a viselkedés egy része váratlan eredményeket okozhat. Például egy csík (-) vagy vessző (,) lehet egy szószünet elem, amelyet egyik nyelven eldobnak, másikban nem. Ritkán előfordulhat váratlan szótövezési viselkedés, mert egy adott szó különböző nyelvekben eltérően szótöveződhet. Az angol nyelvben például a szóhatárok általában fehérek, vagy valamilyen írásjelek. Más nyelvekben, például németben, szavakat vagy karaktereket lehet kombinálni. Ezért a választott oszlopszintű nyelvnek az oszlop soraiban tárolni kívánt nyelvet kell jelölnie.
Nyugati nyelvek
A nyugati nyelvcsalád esetében, ha nem biztos abban, hogy mely nyelvek lesznek egy oszlopban tárolva, vagy ha egynél több nyelv tárolására számít, az általános kerülő megoldás az, hogy az oszlopban tárolt legösszetettebb nyelvhez használja a szóválasztót.
Előfordulhat például, hogy az angol, a spanyol és a német tartalmat egyetlen oszlopban kell tárolnia. Ez a három nyugati nyelv hasonló szómegtörő mintákkal rendelkezik, és a német minták a legösszetettebbek. Ezért ebben az esetben jó választás a német szótörő használata, amely helyesen képes angol és spanyol szöveget feldolgozni. Ezzel szemben előfordulhat, hogy az angol szóhatár-felismerő a német nyelvre jellemző összetett szavak miatt nem képes hibátlanul feldolgozni a német szöveget.
A nyelvi család legösszetettebb nyelvének szóhatárolójának használata nem garantálja a család minden nyelvének tökéletes indexelését. Előfordulhatnak olyan sarokesetek, amelyekben a legbonyolultabb szóválasztó nem tudja megfelelően kezelni a más nyelven írt szöveget.
Nem nyugati nyelvek
Nem nyugati nyelveknél (például kínai, japán, hindi stb.) a korábbi megoldás nem feltétlenül működik, nyelvi okokból. Nem nyugati nyelvek esetén fontoljuk meg az alábbi megoldások egyikét:
Különböző családokból származó nyelvek esetén
Ha egy oszlop jelentősen eltérő nyelveket tartalmazhat, például spanyol és japán nyelveket, fontolja meg a különböző nyelvek tartalmának külön oszlopokban való tárolását. Ez a szétválasztás lehetővé teszi, hogy minden oszlophoz a nyelvspecifikus szómegszakítót használd. Ha ezt a megoldást választja, és nem ismeri a lekérdezés nyelvét a lekérdezéskor, előfordulhat, hogy mindkét oszlopra ki kell adnia a lekérdezést, hogy a lekérdezés megtalálja a megfelelő sort vagy dokumentumot.
Bináris tartalomhoz (például Microsoft Word dokumentumokhoz)
Ha az indexelt tartalom bináris típusú, a Full-Text Search szűrő, amely a szöveges tartalmat feldolgozza a szószökőhöz küldése előtt, tiszteletben tarthatja a bináris fájlban lévő bizonyos nyelvi címkéket. Ebben az esetben az indexeléskor a szűrő a dokumentum vagy a dokumentum egy szakasza számára a megfelelő LCID-t bocsátja ki. A teljes szöveges keresőmotor ezután meghívja az adott LCID-hez tartozó nyelv szóelválasztóját. Azonban a többnyelvű tartalom indexelése után ellenőrizd, hogy a tartalom helyesen indexelve volt.
Egyszerű szöveges tartalom esetén
Ha a tartalom egyszerű szöveg, konvertálhatja xml-adattípussá , és hozzáadhat olyan nyelvi címkéket, amelyek az egyes dokumentum- vagy dokumentumszakaszok nyelvét jelzik. Ahhoz azonban, hogy ez működjön, a teljes szöveges indexelés előtt ismernie kell a nyelvet.
Szótövezés
Az oszlopszintű nyelv kiválasztásakor egy másik szempont a stemming. A teljes szöveges lekérdezésekben a szótövezés egy szó összes szótövezett (ragozott) alakjának keresési folyamata egy adott nyelven. Ha általános szóhatárolót használ több nyelv feldolgozásához, a szótövezési folyamat csak az oszlophoz megadott nyelv esetén működik, az oszlop többi nyelvén nem. Például a német szótövezők nem működnek angol vagy spanyol nyelven (és így tovább). Ez a viselkedés befolyásolhatja a visszahívást attól függően, hogy melyik nyelvet választod a lekérdezés idején.
Az oszloptípus hatása Full-Text Keresésre
A nyelvválasztás másik szempontja az adatok ábrázolása. A nem varbinary(max) oszlopban tárolt adatok esetében nincs speciális szűrés. Ehelyett a szöveg általában változtatás nélkül halad át a szótörési összetevőn.
Emellett a szóhatárolókat elsősorban az írott szövegek feldolgozására tervezték. Ha a szöveged jelölőt tartalmaz (például HTML), akkor az indexelésnél és keresésnél a nyelvi pontosság csökkenhet. Ebben az esetben két lehetőséged van: a legkedveltebb módszer a szöveges adatokat egy varbináris (maximum) oszlopban tárolni, és a dokumentum típusának megjelölése, hogy szűrhető legyen. Ha ez a megközelítés nem jöhet szóba, érdemes a semleges szóelválasztót használni, és ha lehetséges, jelölőnyelvi elemeket (például a HTML-ben a „br” elemet) is felvenni a zajszólistákba.
Megjegyzés:
A nyelvalapú szótövezés nem használható, ha semleges nyelvet ad meg.
Határozz meg egy nem alapértelmezett oszlopszintű nyelvet egy teljes szöveges lekérdezésben
Alapértelmezés szerint a Database Engine-ben a Full-Text Search a lekérdezési kifejezéseket a teljes szöveges záradékban az egyes oszlopokhoz megadott nyelv használatával elemzi. A viselkedés felülbírálásához adjon meg egy nem alapértelmezett nyelvet lekérdezéskor. Azon támogatott nyelvek esetében, amelyek erőforrásai telepítve vannak, a LANGUAGE <language_term>CONTAINS, CONTAINSTABLE, FREETEXT vagy FREETEXTTABLE lekérdezés záradéka használható a lekérdezési kifejezések szótöréséhez, származtatásához, szinonimaszótárához és stopword feldolgozásához használt nyelv megadásához.
Kapcsolódó tartalom
- CONTAINS (Transact-SQL)
- CONTAINSTABLE (Transact-SQL)
- adattípusok (Transact-SQL)
- SZABADSZÖVEG (Transact-SQL)
- FREETEXTTABLE (Transact-SQL)
- Szűrők konfigurálása és kezelése
- sys.sp_fulltext_service (Transact-SQL)
- sys.fulltext_languages (Transact-SQL)
- A szóelválasztók és szótövezők konfigurálása és kezelése