Megosztás a következőn keresztül:


TELJES SZÖVEG INDEX LÉTREHOZÁSA (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Teljes szöveges indexet hoz létre egy táblázaton vagy indexelt nézetben egy SQL Server adatbázisban. Csak egy teljes szöveges index engedélyezett egy táblázathoz vagy indexelt nézethez, és minden teljes szöveges index egyetlen táblára vagy indexelt nézetre vonatkozik. Egy teljes szöveges index akár 1024 oszlopot is tartalmazhat.

Transact-SQL szintaxis konvenciók

Szemantika

CREATE FULLTEXT INDEX ON table_name
   [ ( { column_name
             [ TYPE COLUMN type_column_name ]
             [ LANGUAGE language_term ]
             [ STATISTICAL_SEMANTICS ]
        } [ , ...n ]
      ) ]
    KEY INDEX index_name
    [ ON <catalog_filegroup_option> ]
    [ WITH ( <with_option> [ , ...n ] ) ]
[;]

<catalog_filegroup_option>::=
 {
    fulltext_catalog_name
 | ( fulltext_catalog_name , FILEGROUP filegroup_name )
 | ( FILEGROUP filegroup_name , fulltext_catalog_name )
 | ( FILEGROUP filegroup_name )
 }

<with_option>::=
 {
   CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
 | STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
 | SEARCH PROPERTY LIST [ = ] property_list_name
 }

Arguments

table_name

A tábla vagy indexelt nézet neve, amely tartalmazza a teljes szöveges indexben szereplő oszlopot vagy oszlopokat.

column_name

A teljes szöveges indexben szereplő oszlop neve. Csak a char, varchar, nchar, nvarchar, text, ntext, image,xml és varbinary(max) típusú oszlopok indexelhetők teljes szöveges kereséshez. Több oszlop megadásához ismételjük meg a column_name klauzulát a következőként:

TELJES SZÖVEGES INDEXET HOZZ LÉTRE table_name (column_name1 [...], column_name2 [...]) ...

TÍPUSOSZLOP type_column_name

Megadja egy táblaoszlop nevét, type_column_name, amely a varbinary(max) vagy képdokumentum dokumentumtípusának tárolására szolgál. Ezt az oszlopot, amelyet típusoszlopnak neveznek, egy felhasználó által biztosított fájlkiterjesztést tartalmaz (.doc, .pdf, .xls, és így tovább). A típusoszlopnak char,nchar, varchar vagy nvarchar típusúnak kell lennie.

A TYPE COLUMN type_column_name csak akkor határozzuk meg, ha column_nameegy varbináris (max) vagy képoszlopot jelöl, amelyben az adatokat bináris adatként tárolják; ellenkező esetben az SQL Server hibát ad vissza.

Megjegyzés:

Indexeléskor a Full-Text Engine minden táblázatsorban a típusoszlopban lévő rövidítést használja, hogy meghatározza a column_name-es dokumentumhoz használt teljes szöveges keresési szűrőt. A szűrő bináris folyamként tölti be a dokumentumot, eltávolítja a formázási információkat, és a szöveget a dokumentumból a szómegszakító komponenshez küldi. További információ: Keresés szűrőinek konfigurálása és kezelése.

NYELVI language_term

Az adat nyelve, amelyet column_name-ben tárolnak.

language_term opcionális, és megadható stringként, egész számban vagy hexadecimális értékként, amely megfelel egy nyelv helyi azonosítójának (LCID). Ha nincs megadva érték, akkor az SQL Server példány alapértelmezett nyelvét használják.

Ha language_term meg van jelölve, az általa képviselt nyelv a char, nchar, varchar, nvarchar, text és ntext oszlopokban tárolt adatok indexelésére szolgál. Ez a nyelv az alapértelmezett nyelv, amelyet lekérdezéskor használnak, ha language_term nem van megadva egy teljes szöveges predikátum részeként az oszlop ellen.

Ha karakterláncként van megadva, language_term megfelel a rendszer táblázatban szereplő alias oszlop értékének sys.syslanguages . A húrt idézőjelben kell bezárni, mint az 'language_term' esetében. Ha egész számként van megadva, language_term a nyelvet azonosító tényleges LCID. Ha hexadecimális értékként van megadva, language_term0x után jön az LCID hex értéke. A hex érték nem haladhatja meg a nyolc számjegyet, beleértve a vezető nullákat is.

Ha az érték kétbájtos karakterkészlet (DBCS) formátumban van, az SQL Server Unicode-ra konvertálja.

Az erőforrásokat, mint például a szótörők és a szárnyszerek, engedélyezni kell a language_term-ként megadott nyelvhez. Ha ezek az erőforrások nem támogatják a megadott nyelvet, az SQL Server hibát ad vissza.

Használja a sp_configure tárolt eljárást, hogy hozzáférjen a Microsoft SQL Server példány alapértelmezett teljes szöveges nyelvének információihoz. További információért lásd sp_configure (Transact-SQL).

Nem BLOB és nem XML oszlopok esetén, amelyek több nyelven tartalmaznak szövegadatokat, vagy ha az oszlopban tárolt szöveg nyelve ismeretlen, érdemes lehet a semleges (0x0) nyelvi erőforrást használni. Azonban először meg kell értened, milyen következményei lehetnek a semleges (0x0) nyelvi erőforrás használatának. A semleges (0x0) nyelvi erőforrás használatával kapcsolatos lehetséges megoldásokról és következményekről információért lásd : Nyelv kiválasztása Full-Text index létrehozásakor.

XML vagy BLOB típusú oszlopokban tárolt dokumentumok esetén a dokumentumban belüli nyelvkódolást használják az indexeléskor. Például XML oszlopokban az XML dokumentumokban az xml:lang attribútum azonosítja a nyelvet. A lekérdezés idején a language_term-ben korábban megadott érték lesz alapértelmezett nyelv a teljes szöveges lekérdezésekhez, kivéve, ha language_term teljes szöveges lekérdezés részeként van megadva.

STATISTICAL_SEMANTICS

Alkalmazható: SQL Server (SQL Server 2012 (11.x) és újabbabb)

Létrehozza a statisztikai szemantikai indexeléshez tartozó további kulcskifejezéseket és dokumentálja a hasonlósági indexeket. További információ: Szemantikai keresés (SQL Server).

KULCSFONTOSSÁGÚ INDEX index_name

Az egyedi kulcsindex neve table_name-n. A KULCSINDEXNEK egyedi, egyetlen kulcsú, nem nullálható oszlopnak kell lennie. Válaszd ki a legkisebb egyedi kulcsindexet a teljes szöveges egyedi kulcshoz. A legjobb teljesítmény érdekében a teljes szöveges kulcshoz egy egész szám adattípust ajánlunk.

fulltext_catalog_name

A teljes szöveges indexhez használt teljes szöveges katalógus. A katalógusnak már léteznie kell az adatbázisban. Ez a záradék nem kötelező. Ha nincs megadva, akkor alapértelmezett katalógust használnak. Ha nincs alapértelmezett katalógus, az SQL Server hibát ad vissza.

FÁJLCSOPORT filegroup_name

Létrehozza a megadott teljes szöveges indexet a megadott fájlcsoporton. A fájlcsoportnak már léteznie kell. Ha a FILEGROUP záradék nincs megadva, a teljes szöveges index ugyanabba a fájlcsoportba kerül, mint az alaptábla vagy nézet egy nem partíciós táblanál, vagy a fő fájlcsoportba egy partíciós táblanál.

CHANGE_TRACKING [ = ] { KÉZIKÖNYV | AUTO | KIKAPCSOLT [ , NINCS NÉPESSÉG ] }

Meghatározza, hogy a teljes szöveges index által lefedett táblázatoszlopokban végrehajtott változtatások (frissítések, törlések vagy beillesztések) az SQL Server által továbbításra kerül-e a teljes szöveges indexbe. A WRITETEXT és UPDATETEXT adatváltozásai nem jelennek meg a teljes szöveges indexben, és nem veszik fel őket a változáskövetéssel.

  • KÉZIKÖNYV

    Megadja, hogy a nyomon követett változásokat manuálisan kell terjeszteni az ALTER FULLTEXT INDEX ... START UPDATE populáció Transact-SQL állítás (manuális népesség). Az SQL Server Agent használatával rendszeresen meghívhatja ezt a Transact-SQL utasítást.

  • AUTO

    Megadja, hogy a nyomon követett változások automatikusan terjednek, ahogy az adatok az alaptáblában (automatikus népesség) módosítódnak. Bár a változások automatikusan terjednek, ezek a változások nem feltétlenül jelennek meg azonnal a teljes szöveges indexben. Az AUTO az alapértelmezett.

KIKAPCSOLT [ , NINCS NÉPESSÉG ]

Megadja, hogy az SQL Server nem tart listát az indexelt adatokon történt változásokról. Ha NINCS NÉPESSÉG (NINCS NÉPESSÉG) megadva, az SQL Server teljesen feltölti az indexet a létrehozása után.

A NINCS NÉPESSÉG OPCIÓ csak akkor használható, ha CHANGE_TRACKING KI van kapcsolva. Ha NINCS NÉPESSÉG, az SQL Server nem tölti fel az indexet a létrehozása után. Az index csak akkor jelenik meg, amikor a felhasználó végrehajtja az ALTER FULLTEXT INDEX parancsot a START FULL POPULATION vagy START INCREMENTAL POPULATION záradékkal.

MEGÁLLÍTÓ LISTA [ = ] { KIKAPCSOLT | RENDSZER | stoplist_name }

Teljes szöveges stoplistát társít az indexhez. Az indexben nincs olyan token, amely a megadott stoplistához tartozik. Ha a STOPLIST nincs megadva, az SQL Server a rendszer teljes szöveges stoplistáját az indexhez társítja.

  • KI

    Megadja, hogy nincs stoplista a teljes szöveges indexhez kötve.

  • SYSTEM

    Megadja, hogy ehhez a teljes szöveges indexhez az alapértelmezett teljes szöveges rendszer, a STOPLIST-et kell használni.

  • stoplist_name

    Megadja a teljes szöveges indexhez társítandó stoplista nevét.

KERESÉS TULAJDONSÁGLISTÁJA [ = ] property_list_name

Alkalmazható: SQL Server (SQL Server 2012 (11.x) és újabbabb)

Keresési tulajdonságlistát társít az indexhez.

  • KI

    Megadja, hogy nincs tulajdonságlista a teljes szöveges indexhez kötve.

  • property_list_name

    Megadja a keresési tulajdonságlista nevét, amelyet a teljes szöveges indexhez kell társítani.

Megjegyzések

XML oszlopokon létrehozhatsz egy teljes szöveges indexet, amely indexeli az XML elemek tartalmát, de figyelmen kívül hagyja az XML jelölést. Az attribútumértékek teljes szövegben indexelnek, hacsak nem numerikus értékek. Az elemcímkéket token határként használják. Jól formált XML vagy HTML dokumentumok és több nyelvet tartalmazó töredékek támogatottak. További információ: Full-Text keresés használata XML-oszlopokkal.

Javasoljuk, hogy az indexkulcsoszlop egész számú adattípus legyen. Ez optimalizálást biztosít a lekérdezés végrehajtási idején.

A CREATE FULLTEXT INDEX nem helyezhető el felhasználói tranzakcióban. Ezt a kijelentést saját implicit tranzakcióban kell futtatni.

További információért a teljes szöveges indexekről lásd: Létrehozás és Full-Text indexek kezelése.

A változáskövetés és a NINCS POPULÁCIÓ paraméter kölcsönhatásai

Az, hogy a teljes szöveges index fel van-e töltve, attól függ, hogy engedélyezett-e a változáskövetés, és hogy az ALTER FULLTEXT INDEX állításban szerepel-e a WITH NO POPULATION kifejezés. Az alábbi táblázat összefoglalja az interakciójuk eredményét.

Change Tracking LAKOSSÁG NÉLKÜL Result
Nem engedélyezett Nincs megadva Az indexen teljes populációt végeznek.
Nem engedélyezett Megadott Az index populációja nem jelenik meg, amíg TELJES SZÖVEG INDEXÉNEK MÓDOSÍTÁSA nem történik... Kiadják a START NÉPESSÉGI nyilatkozatot.
Enabled Megadott Hiba keletkezik, és az index nem változik.
Enabled Nincs megadva Az indexen teljes populációt végeznek.

További információért a teljes szövegű indexek feltöltéséről lásd: Fillite Full-Text Indexes.

Permissions

A felhasználónak engedélyt REFERENCES kell kell szereznie a teljes szöveges katalógusra, ALTER valamint engedélyt kell adnia a táblára vagy az indexelt nézetre, vagy tagnak kell lennie a sysadmin fix szerver szerepnek, vagy db_owner, vagy db_ddladmin rögzített adatbázis szerepeknek.

Ha SET STOPLIST meg van jelölve, a felhasználónak REFERENCES jogosultsággal kell rendelkeznie a megadott stoplistán. A STOPLIST tulajdonosa megadhatja ezt az engedélyt.

Megjegyzés:

A nyilvánosság HIVATKOZÁSI engedélyt kap az alapértelmezett stop listára, amelyet az SQL Server csomagol.

Példák

A. Hozzon létre egyedi indexet, teljes szöveges katalógust és teljes szöveges indexet

Az alábbi példa egyedi indexet hoz létre az JobCandidateID AdventureWorks2025 mintaadatbázis táblázatának oszlopán HumanResources.JobCandidate . A példa ezután létrehoz egy alapértelmezett teljes szöveges katalógust, ft. Végül a példa teljes szöveges indexet hoz létre az Resume oszlopon, a ft katalógus és a rendszer stoplista segítségével.

CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)
   KEY INDEX ui_ukJobCand
   WITH STOPLIST = SYSTEM;
GO

B. Készíts teljes szöveges indexet több táblázatoszlopon

Az alábbi példa egy teljes szöveges katalógust production_cataloghoz létre a AdventureWorks mintaadatbázisban. A példa ezután létrehoz egy teljes szöveges indexet, amely ezt az új katalógust használja. A teljes szöveg index ReviewerNamea , EmailAddress, , és Comments oszlopain Production.ProductReviewtalálható . Minden oszlophoz a példa meghatározza az angol LCID-jét, 1033amely az oszlopokban lévő adatok nyelve. Ez a teljes szöveges index egy meglévő egyedi kulcsindexet használ, PK_ProductReview_ProductReviewID. Ahogy ajánlották, ez az index kulcs egy egész számoszlopon található, ProductReviewID.

CREATE FULLTEXT CATALOG production_catalog;
GO

CREATE FULLTEXT INDEX ON Production.ProductReview (
    ReviewerName LANGUAGE 1033,
    EmailAddress LANGUAGE 1033,
    Comments LANGUAGE 1033
) KEY INDEX PK_ProductReview_ProductReviewID ON production_catalog;
GO

C. Hozz létre egy teljes szöveges indexet kereső tulajdonságlistával anélkül, hogy azt töltenéd fel

A következő példa teljes szöveges indexet hoz létre a tábla , TitleDocumentSummary, és Document oszlopainProduction.Document. A példa megadja az angol LCID-jét, 1033amely az oszlopokban lévő adatok nyelve. Ez a teljes szöveges index az alapértelmezett teljes szöveges katalógusot és egy meglévő egyedi kulcsindexet, PK_Document_DocumentIDaz . Ahogy ajánlották, ez az index kulcs egy egész számoszlopon található, DocumentID.

A példa megadja a SYSTEM stoplistát. Emellett megad egy kereső tulajdonságlistát is; DocumentPropertyListegy olyan példát, amely létrehozza ezt a tulajdonságlistát, lásd: CREATE SEARCH PROPERTY LIST (Transact-SQL)

A példa kimondja, hogy a változáskövetés nem működik, ha nincs népesség. Később, csúcsidőn kívül, a példa egy ALTER FULLTEXT INDEX utasítást használ, hogy teljes populációt indítson az új indexen, és engedélyezze az automatikus változáskövetést.

CREATE FULLTEXT INDEX ON Production.Document (
    Title LANGUAGE 1033,
    DocumentSummary LANGUAGE 1033,
    Document TYPE COLUMN FileExtension LANGUAGE 1033
) KEY INDEX PK_Document_DocumentID
WITH STOPLIST = SYSTEM,
    SEARCH PROPERTY LIST = DocumentPropertyList,
    CHANGE_TRACKING OFF,
    NO POPULATION;
GO

Később csúcsidőn kívüli időpontban az index feltöltődik:

ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO;
GO

Lásd még