Full-Text indexek feltöltése

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Kezelt Példány

A teljes szöveges index létrehozása és karbantartása magában foglalja az index feltöltését egy feltöltési (más néven feltérképezési) nevű folyamat használatával.

A populáció típusai

A teljes szöveges index a következő sokaságtípusokat támogatja:

  • teljes népesség
  • Automatikus vagy manuális feltöltés a változáskövetés alapján
  • Inkrementális populáció időbélyeg alapján

Teljes népesség

A teljes sokaság során az indexbejegyzések egy tábla vagy indexelt nézet összes sorához készülnek. Egy teljes szöveges index teljes sokasága az alaptábla vagy az indexelt nézet összes sorához létrehozza az indexbejegyzéseket.

Alapértelmezés szerint az SQL Server a létrehozás után teljesen feltölt egy új teljes szöveges indexet.

  • Egyfelől a teljes népesség jelentős mennyiségű erőforrást használhat fel. Ezért amikor csúcsidőszakokban teljes szöveges indexet hoz létre, gyakran ajánlott a teljes feltöltést csúcsidőn kívülre késleltetni, különösen akkor, ha a teljes szöveges index alaptáblája nagy.
  • Másrészt a teljes szöveges katalógus, amelyhez az index tartozik, nem használható mindaddig, amíg az összes teljes szöveges indexe fel nem töltődik.

Ha teljes szöveges indexet szeretne létrehozni anélkül, hogy azonnal feltöltenél, adja meg a CHANGE_TRACKING OFF, NO POPULATION záradékot a CREATE FULLTEXT INDEX utasításban. Ha CHANGE_TRACKING MANUALad meg, a Full-Text motor nem tölti ki az új teljes szöveges indexet, amíg nem hajt végre ALTER FULLTEXT INDEX utasítást a START FULL POPULATION vagy START INCREMENTAL POPULATION záradék használatával.

Példa – Teljes szöveges index létrehozása teljes sokaság futtatása nélkül

Az alábbi példa egy teljes szöveges indexet hoz létre a Production.Document mintaadatbázis AdventureWorks tábláján. Ez a példa WITH CHANGE_TRACKING OFF, NO POPULATION-t használja a kezdeti teljes népesség késleltetésére.

CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
CREATE FULLTEXT CATALOG AW_Production_FTCat;  
CREATE FULLTEXT INDEX ON Production.Document  
(  
    Document                         --Full-text index column name   
        TYPE COLUMN FileExtension    --Name of column that contains file type information  
        Language 1033                 --1033 is LCID for the English language  
)  
    KEY INDEX ui_ukDoc  
    ON AW_Production_FTCat  
    WITH CHANGE_TRACKING OFF, NO POPULATION;  
GO  
  

Példa – Teljes adathalmaz futtatása egy táblán

Az alábbi példa egy teljes sokaságot futtat a Production.Document mintaadatbázis AdventureWorks tábláján.

ALTER FULLTEXT INDEX ON Production.Document  
   START FULL POPULATION;  

Populáció a változáskövetés alapján

Választhatóan használhatja a változáskövetést, hogy a teljes szöveges indexet fenntartsa az elsődleges teljes feltöltés után. A változáskövetés kis többletterhelést jelent, mivel az SQL Server olyan táblát tart fenn, amelyben nyomon követi az alaptábla változásait az utolsó sokaság óta. Változáskövetés használata esetén az SQL Server megőrzi az alaptábla vagy indexelt nézet azon sorait, amelyeket frissítések, törlések vagy beszúrások módosítottak. A WRITETEXT és AZ UPDATETEXT használatával végrehajtott adatmódosítások nem jelennek meg a teljes szöveges indexben, és nem jelennek meg a változáskövetésben.

Jegyzet

Az időbélyeget oszlopot tartalmazó táblák esetében a változáskövetés helyett növekményes sokaságot használhat.

Ha engedélyezi a változáskövetést az index létrehozása során, az SQL Server a létrehozás után azonnal feltölti az új teljes szöveges indexet. Ezt követően a rendszer nyomon követi és propagálja a módosításokat a teljes szöveges indexre.

Változáskövetés engedélyezése

A változáskövetésnek két típusa van:

  • Automatikus (CHANGE_TRACKING AUTO beállítás). Az automatikus változáskövetés az alapértelmezett viselkedés.
  • Manuális (CHANGE_TRACKING MANUAL beállítás).

A változáskövetés típusa az alábbiak szerint határozza meg a teljes szöveges index feltöltését:

  • Automatikus kitöltés

    Alapértelmezés szerint, vagy ha megadja a CHANGE_TRACKING AUTOértéket, a Full-Text rendszer automatikus kitöltést használ a teljes szöveges indexben. A kezdeti teljes adatfeltöltés után a rendszer nyomon követi a változtatásokat, ahogy az adatok módosulnak az alaptáblában, és a nyomon követett változásokat automatikusan továbbítja. A teljes szöveges index a háttérben frissül, ezért előfordulhat, hogy a propagált módosítások nem jelennek meg azonnal az indexben.

    Változások nyomon követésének megkezdése automatikus populációs

    Példa – Teljes szöveges index módosítása az automatikus változáskövetés használatára
    Az alábbi példa a HumanResources.JobCandidate mintaadatbázis AdventureWorks táblázatának teljes szöveges indexét módosítja a változáskövetés automatikus sokaságtal való használatához.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;  
    GO   
    
  • manuális populációs

    Ha CHANGE_TRACKING MANUÁLIS értéket ad meg, a Full-Text motor manuális sokaságot használ a teljes szöveges indexen. A kezdeti teljes sokaság befejeződése után a rendszer nyomon követi a módosításokat, amint az adatok módosulnak az alaptáblában. A program azonban nem propagálja őket a teljes szöveges indexbe, amíg nem hajt végre egy ALTER FULLTEXT INDEX ... START UPDATE POPULATION utasítás. Az SQL Server Agent használatával rendszeresen meghívhatja ezt a Transact-SQL utasítást.

    A változások követésének megkezdése manuális adatbevitel segítségével

    Példa – Teljes szöveges index létrehozása manuális változáskövetési módszerrel
    Az alábbi példa egy teljes szöveges indexet hoz létre, amely a HumanResources.JobCandidate mintaadatbázis AdventureWorks táblázatában manuális sokaságú változáskövetést használ.

    USE AdventureWorks;  
    GO  
    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 CHANGE_TRACKING=MANUAL;  
    GO  
    

    Példa – Futtasson le egy manuális populációt
    Az alábbi példa egy manuális sokaságot futtat a HumanResources.JobCandidate mintaadatbázis AdventureWorks táblázatának változáskövetésű teljes szöveges indexén.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;  
    GO  
    

Változáskövetés letiltása

Növekményes népesség időbélyeg alapján

A növekményes sokaság egy alternatív mechanizmus a teljes szöveges index manuális feltöltéséhez. Ha egy táblázat nagy mennyiségű beszúrást tapasztal, a növekményes sokaság használata hatékonyabb lehet, ha manuális sokaságot használ.

Növekményes feltöltést futtathat olyan teljes szöveges indexekhez, amelyeknél a CHANGE_TRACKING MANUÁLIS vagy KI állapotra van állítva.

Az növekményes adatpopuláció követelménye az, hogy az indexelt táblának rendelkeznie kell időbélyeg adattípusú oszloppal. Ha nem létezik időbélyeg oszlop, inkrementális feltöltés nem hajtható végre.

Az SQL Server a időbélyeg-oszlop használatával azonosítja a legutóbbi adatfeltöltés óta megváltozott sorokat. A növekményes frissítés ezután frissíti a teljes szöveges indexet a hozzáadott, törölt vagy módosított sorokhoz, amelyek az utolsó indexelés után kerültek változtatásra, vagy amíg az utolsó indexelés folyamatban volt. A populáció végén a Full-Text motor rögzít egy új időbélyeg értéket. Ez az érték az SQL Gatherer által talált legnagyobb időbélyeg érték. Ezt az értéket a rendszer a következő növekményes sokaság indításakor fogja használni.

Bizonyos esetekben a növekményes sokaság kérése teljes sokaságot eredményez.

  • Ha egy táblán növekményes feltöltést kér időbélyeg oszlop nélkül, az teljes feltöltési műveletet eredményez.
  • Ha a teljes szöveges index első sokasága növekményes sokaság, akkor az összes sort indexeli, így teljes sokaságnak felel meg.
  • Ha a táblázat teljes szöveges indexét érintő metaadatok az utolsó sokaság óta megváltoztak, a növekményes sokaságkérések teljes sokaságként lesznek implementálva. Ide tartoznak az oszlopok, indexek vagy teljes szöveges indexdefiníciók módosítása által okozott metaadat-módosítások.

Növekményes feltöltés végrehajtása

Növekményes sokaság futtatásához hajtsa végre a ALTER FULLTEXT INDEX utasítást a START INCREMENTAL POPULATION záradék használatával.

Inkrementális feltöltés ütemezésének létrehozása vagy módosítása

  1. A Management Studióban az Object Explorerben bontsa ki a kiszolgálót.

  2. Bontsa ki a(z) adatbázisokat, majd bontsa ki azt az adatbázist, amely tartalmazza a teljes szöveges indexet.

  3. Bontsa ki Táblák.

    Kattintson a jobb gombbal arra a táblára, amelyen a teljes szöveges index definiálva van, válassza Full-Text index, majd a Full-Text index helyi menüben kattintson a Tulajdonságokparancsra. Ekkor megnyílik a Teljes szöveges index tulajdonságai párbeszédpanel.

    Fontos

    Ha az alaptábla vagy nézet nem tartalmazza a időbélyeg adattípus oszlopát, a növekményes sokaság nem lehetséges.

  4. A Lap kiválasztása panelen válassza ki a Ütemezéseklehetőséget.

    Ezen a lapon ütemezéseket hozhat létre vagy kezelhet egy SQL Server Agent-feladathoz, amely növekményes táblapopulációt indít el az alaptáblán vagy a teljes szöveges index indexelt nézetén.

    A lehetőségek a következők:

    • Egy új ütemezés létrehozásához kattintson az Újgombra.

      Ekkor megnyílik az Új Full-Text Indexelési táblázat ütemezése párbeszédpanel, ahol ütemezést hozhat létre. Az ütemezés mentéséhez kattintson az OKgombra.

      Fontos

      Egy SQL Server-ügynökfeladat (növekményes táblapopuláció indítása database_name.table_name) az Full-Text Index tulajdonságai párbeszédpanelről való kilépés után új ütemezéshez van társítva. Ha több ütemezést hoz létre ugyanahhoz a teljes szöveges indexhez, mindegyik ugyanazt a feladatot használja.

    • A meglévő ütemezés módosításához válassza ki a meglévő ütemezést, majd kattintson a Szerkesztésgombra.

      Ekkor megnyílik az Új Full-Text Indexelési táblázat ütemezése párbeszédpanel, ahol módosíthatja az ütemezést.

      Jegyzet

      Az SQL Server Agent-feladat módosításáról további információt Feladat módosításacímű témakörben talál.

    • Meglévő ütemezés eltávolításához jelölje ki a meglévő ütemezést, majd kattintson a Törlésgombra.

  5. Válassza OKlehetőséget.

Teljes szöveges sokaság hibáinak elhárítása (bejárás)

Ha egy bejárás során hiba történik, a Full-Text Keresési bejárás naplózási létesítmény létrehoz és karbantart egy bejárási naplót, amely egy egyszerű szöveges fájl. Minden bejárási napló egy adott teljes szöveges katalógusnak felel meg. Alapértelmezés szerint egy adott példány bejárási naplói (ebben a példában az alapértelmezett példány) %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG mappában találhatók.

A bejárási naplófájl a következő elnevezési sémát követi:

SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]

A bejárási naplófájl nevének változó részei a következők.

  • < DatabaseID> – Az adatbázis azonosítója. < dbid> egy ötjegyű szám, kezdő nullákkal.
  • < FullTextCatalogID> – Teljes szöveges katalógusazonosító. < catid> egy ötjegyű szám kezdő nullákkal.
  • < n> – Egy egész szám, amely azt jelzi, hogy ugyanannak a teljes szöveges katalógusnak egy vagy több bejárási naplója létezik.

A SQLFT0000500008.2 például egy adatbázis bejárási naplófájlja, amelynek adatbázis-azonosítója = 5, a teljes szöveges katalógus azonosítója pedig = 8. A fájlnév végén lévő 2 azt jelzi, hogy az adatbázis-/katalóguspár két bejárási naplófájlt tartalmaz.