Auffüllen von VolltextindizesPopulate Full-Text Indexes

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Das Erstellen und Verwalten eines Volltextindexes umfasst das Auffüllen des Indexes mithilfe eines Prozesses, der als Auffüllung (oder auch als Crawl) bezeichnet wird.Creating and maintaining a full-text index involves populating the index by using a process called a population (also known as a crawl).

Types of populationTypes of population

Ein Volltextindex unterstützt die folgenden Auffüllungstypen:A full-text index supports the following types of population:

  • Vollständige AuffüllungFull population
  • Automatische oder manuelle Auffüllung basierend auf der ÄnderungsnachverfolgungAutomatic or manual population based on change tracking
  • Inkrementelle Auffüllung basierend auf einem ZeitstempelIncremental population based on a timestamp

Vollständige AuffüllungFull population

Während einer vollständigen Auffüllung werden Indexeinträge für alle Zeilen einer Tabelle oder einer indizierten Sicht erstellt.During a full population, index entries are built for all the rows of a table or indexed view. Eine vollständige Auffüllung eines Volltextindexes erstellt Indexeinträge für alle Zeilen der Basistabelle oder der indizierten Sicht.A full population of a full-text index, builds index entries for all the rows of the base table or indexed view.

Standardmäßig füllt SQL ServerSQL Server einen neuen Volltextindex vollständig auf, sobald er erstellt wird.By default, SQL ServerSQL Server populates a new full-text index fully as soon as it is created.

  • Die vollständige Auffüllung kann einerseits eine deutliche Beanspruchung der Ressourcen bedeuten.On the one hand, a full population can consume a significant amount of resources. Beim Erstellen eines Volltextindexes zu Zeiten mit hohen Lastwerten wird daher empfohlen, die vollständige Auffüllung bis zu einem späteren Zeitpunkt mit geringerer Auslastung zu verzögern, insbesondere, wenn die Basistabelle eines Volltextindexes sehr groß ist.Therefore, when creating a full-text index during peak periods, it is often a best practice to delay the full population until an off-peak time, particularly if the base table of an full-text index is large.
  • Der Volltextkatalog ist andererseits bis zum Abschluss der vollständigen Auffüllung der zugehörigen Volltextindizes nicht verfügbar.On the other hand, the full-text catalog to which the index belongs is not usable until all of its full-text indexes are populated.

Geben Sie in der CREATE FULLTEXT INDEX-Anweisung die CHANGE_TRACKING OFF, NO POPULATION-Klausel an, um einen Volltextindex zu erstellen, ohne ihn sofort aufzufüllen.To create a full-text index without populating it immediately, specify the CHANGE_TRACKING OFF, NO POPULATION clause in the CREATE FULLTEXT INDEX statement. Bei Angabe von CHANGE_TRACKING MANUAL füllt die Volltext-Engine den neuen Volltextindex erst auf, wenn Sie eine ALTER FULLTEXT INDEX-Anweisung mithilfe der START FULL POPULATION- oder START INCREMENTAL POPULATION-Klausel ausführen.If you specify CHANGE_TRACKING MANUAL, the Full-Text Engine doesn't populate the new full-text index until you execute an ALTER FULLTEXT INDEX statement using the START FULL POPULATION or START INCREMENTAL POPULATION clause.

Beispiel: Erstellen eines Volltextindexes ohne Ausführung der vollständigen AuffüllungExample - Create a full-text index without running a full population

Im folgenden Beispiel wird ein Volltextindex für die Production.Document -Tabelle der AdventureWorks -Beispieldatenbank erstellt.The following example creates a full-text index on the Production.Document table of the AdventureWorks sample database. In diesem Beispiel wird WITH CHANGE_TRACKING OFF, NO POPULATION verwendet, um die erste vollständige Auffüllung zu verzögern.This example uses WITH CHANGE_TRACKING OFF, NO POPULATION to delay the initial full population.

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  
  

Beispiel: Ausführen einer vollständigen Auffüllung für eine TabelleExample - Run a full population on a table

Im folgenden Beispiel wird eine vollständige Auffüllung der Production.Document -Tabelle der AdventureWorks -Beispieldatenbank ausgeführt.The following example runs a full population on the Production.Document table of the AdventureWorks sample database.

ALTER FULLTEXT INDEX ON Production.Document  
   START FULL POPULATION;  

Auffüllung basierend auf der ÄnderungsnachverfolgungPopulation based on change tracking

Optional können Sie die Änderungsnachverfolgung verwenden, um nach seiner ursprünglichen vollständigen Auffüllung einen Volltextindex beizubehalten.Optionally, you can use change tracking to maintain a full-text index after its initial full population. Die Änderungsnachverfolgung bedeutet einen geringen zusätzlichen Leistungsaufwand, da SQL ServerSQL Server eine Tabelle verwaltet, in der Änderungen der Basistabelle seit der letzten Auffüllung verfolgt werden.There is a small overhead associated with change tracking because SQL ServerSQL Server maintains a table in which it tracks changes to the base table since the last population. Beim Verwenden der Änderungsnachverfolgung verwaltet SQL ServerSQL Server eine Aufzeichnung der Zeilen in der Basistabelle oder indizierten Sicht, die durch Updates, Löschungen oder Einfügungen geändert wurden.When you use change tracking, SQL ServerSQL Server maintains a record of the rows in the base table or indexed view that have been modified by updates, deletes, or inserts. Datenänderungen durch WRITETEXT und UPDATETEXT werden im Volltextindex nicht wiedergegeben und bei der Änderungsnachverfolgung nicht ausgewählt.Data changes made through WRITETEXT and UPDATETEXT are not reflected in the full-text index, and are not picked up with change tracking.

Hinweis

Für Tabellen, die eine Zeitstempel-Spalte enthalten, können Sie die inkrementelle Auffüllung anstatt der Änderungsnachverfolgung verwenden.For tables containing a timestamp column, you can use incremental population instead of change tracking.

Wenn Sie die Änderungsnachverfolgung während der Indexerstellung aktivieren, führt SQL ServerSQL Server die vollständige Auffüllung des neuen Volltextindexes unmittelbar nach dessen Erstellung aus.When you enable change tracking during index creation, SQL ServerSQL Server fully populates the new full-text index immediately after it is created. Danach werden Änderungen nachverfolgt und an den Volltextindex weitergegeben.Thereafter, changes are tracked and propagated to the full-text index.

Änderungsnachverfolgung aktivierenEnable change tracking

Es gibt zwei Typen der Änderungsnachverfolgung:There are two types of change tracking:

  • Automatisch (Option CHANGE_TRACKING AUTO)Automatic (CHANGE_TRACKING AUTO option). Die automatische Änderungsnachverfolgung ist das Standardverhalten.Automatic change tracking is the default behavior.
  • Manuell (Option CHANGE_TRACKING MANUAL)Manual (CHANGE_TRACKING MANUAL option).

Der Typ der Änderungsnachverfolgung bestimmt, wie der Volltextindex aufgefüllt wird, wie im Folgenden dargestellt:The type of change tracking determines how the full-text index is populated, as follows:

  • Automatische AuffüllungAutomatic population

    Die Volltext-Engine verwendet standardmäßig die automatische Auffüllung für den Volltextindex oder bei Angabe von CHANGE_TRACKING AUTO.By default, or if you specify CHANGE_TRACKING AUTO, the Full-Text Engine uses automatic population on the full-text index. Nachdem die ursprüngliche vollständige Auffüllung abgeschlossen wurde, werden Änderungen nachverfolgt und automatisch weitergegeben, wenn Daten in der Basistabelle geändert werden.After the initial full population completes, changes are tracked as data is modified in the base table, and the tracked changes are propagated automatically. Der Volltextindex wird im Hintergrund aktualisiert. Die so weitergegebenen Änderungen werden u. U. jedoch nicht sofort im Index wiedergegeben.The full-text index is updated in the background, however, so propagated changes might not be reflected immediately in the index.

    Starten der Änderungsnachverfolgung mit automatischer AuffüllungTo start tracking changes with automatic population

    Beispiel: Umstellen eines Volltextindexes auf die automatische ÄnderungsnachverfolgungExample - Alter a full-text index to use automatic change tracking
    Im folgenden Beispiel wird der Volltextindex für die HumanResources.JobCandidate -Tabelle der AdventureWorks -Beispieldatenbank so geändert, dass dieser die automatische Auffüllung mit Änderungsnachverfolgung verwendet.The following example changes the full-text index of the HumanResources.JobCandidate table of the AdventureWorks sample database to use change tracking with automatic population.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;  
    GO   
    
  • Manuelle AuffüllungManual population

    Wenn Sie CHANGE_TRACKING MANUAL angeben, verwendet die Volltext-Engine die manuelle Auffüllung für den Volltextindex.If you specify CHANGE_TRACKING MANUAL, the Full-Text Engine uses manual population on the full-text index. Nachdem die ursprüngliche vollständige Auffüllung abgeschlossen wurde, werden Änderungen nachverfolgt, wenn Daten in der Basistabelle geändert werden.After the initial full population completes, changes are tracked as data is modified in the base table. Sie werden jedoch nicht an den Volltextindex weitergegeben, bis Sie eine ALTER FULLTEXT INDEX ... START UPDATE POPULATION -Anweisung anwenden.However, they are not propagated to the full-text index until you execute an ALTER FULLTEXT INDEX ... START UPDATE POPULATION statement. Sie können den SQL ServerSQL Server -Agent verwenden, um die Transact-SQLTransact-SQL -Anweisung in regelmäßigen Abständen aufzurufen.You can use SQL ServerSQL Server Agent to call this Transact-SQLTransact-SQL statement periodically.

    So beginnen Sie die Änderungsnachverfolgung mit manueller AuffüllungTo start tracking changes with manual population

    Beispiel: Erstellen eines Volltextindexes mit manueller ÄnderungsnachverfolgungExample - Create a full-text index with manual change tracking
    Im folgenden Beispiel wird ein Volltextindex mit Änderungsnachverfolgung und manueller Auffüllung für die HumanResources.JobCandidate -Tabelle der AdventureWorks -Beispieldatenbank erstellt.The following example creates a full-text index that will use change tracking with manual population on the HumanResources.JobCandidate table of the AdventureWorks sample database.

    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  
    

    Beispiel: Ausführen einer manuellen AuffüllungExample - Run a manual population
    Im folgenden Beispiel wird eine manuelle Auffüllung des Volltextindexes mit Änderungsnachverfolgung für die HumanResources.JobCandidate -Tabelle der AdventureWorks -Beispieldatenbank ausgeführt.The following example runs a manual population on the change-tracked full-text index of the HumanResources.JobCandidate table of the AdventureWorks sample database.

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

Deaktivieren der ÄnderungsnachverfolgungDisable change tracking

Inkrementelle Auffüllung basierend auf einem ZeitstempelIncremental population based on a timestamp

Eine inkrementelle Auffüllung ist ein alternativer Mechanismus zum manuellen Auffüllen eines Volltextindexes.An incremental population is an alternative mechanism for manually populating a full-text index. Wenn in einer Tabelle sehr viele Einfügungen stattfinden, ist die inkrementelle Auffüllung ggf. effizienter als die manuelle Auffüllung.If a table experiences a high volume of inserts, using incremental population can be more efficient that using manual population.

Sie können eine inkrementelle Auffüllung für einen Volltextindex ausführen, für den CHANGE_TRACKING auf den Wert MANUAL oder OFF festgelegt ist.You can run an incremental population for a full-text index that has CHANGE_TRACKING set to MANUAL or OFF.

Voraussetzung für die inkrementelle Auffüllung ist, dass die indizierte Tabelle eine Spalte vom Datentyp timestamp aufweist.The requirement for incremental population is that the indexed table must have a column of the timestamp data type. Ist keine timestamp -Spalte vorhanden, kann die inkrementelle Auffüllung nicht ausgeführt werden.If a timestamp column does not exist, incremental population cannot be performed.

SQL ServerSQL Server verwendet die Spalte timestamp , um Zeilen zu identifizieren, die sich seit der letzten Auffüllung geändert haben.uses the timestamp column to identify rows that have changed since the last population. Bei der inkrementellen Auffüllung wird der Volltextindex bezüglich der Zeilen aktualisiert, die seit der letzten Auffüllung oder während des letzten Auffüllungsvorgangs hinzugefügt, gelöscht oder geändert wurden.The incremental population then updates the full-text index for rows added, deleted, or modified after the last population, or while the last population was in progress. Am Ende einer Auffüllung wird von der Volltext-Engine ein neuer timestamp-Wert aufgezeichnet.At the end of a population, the Full-Text Engine records a new timestamp value. Dieser Wert entspricht dem größten in SQL Gatherer gefundenen Zeitstempel-Wert.This value is the largest timestamp value that SQL Gatherer has found. Der Wert wird verwendet, wenn die nachfolgende inkrementelle Auffüllung gestartet wird.This value will be used when the next incremental population starts.

In einigen Fällen führt die Anforderung für eine inkrementelle Auffüllung zu einer vollständigen Auffüllung.In some cases, the request for an incremental population results in a full population.

  • Eine Anforderung für eine inkrementelle Auffüllung für eine Tabelle ohne timestamp -Spalte führt zu einer vollständigen Auffüllung.A request for incremental population on a table without a timestamp column results in a full population operation.
  • Wenn es sich bei der ersten Auffüllung eines Volltextindexes um eine inkrementelle Auffüllung handelt, werden alle Zeilen indiziert. Damit entspricht die Auffüllung einer vollständigen Auffüllung.If the first population on a full-text index is an incremental population, it indexes all rows, making it equivalent to a full population.
  • Anforderungen für eine inkrementelle Auffüllung werden als vollständige Auffüllung implementiert, wenn sich Metadaten, die sich auf den Volltextindex für die Tabelle auswirken, seit der letzten Auffüllung geändert haben.If any metadata that affects the full-text index for the table has changed since the last population, incremental population requests are implemented as full populations. Dies umfasst Metadatenänderungen durch Spalten-, Index- oder Volltextindexdefinitionen.This includes metadata changes caused by altering any column, index, or full-text index definitions.

Ausführen einer inkrementellen AuffüllungRun an incremental population

Führen Sie mithilfe der START INCREMENTAL POPULATION-Klausel eine ALTER FULLTEXT INDEX-Anweisung aus, um eine inkrementelle Auffüllung auszuführen.To run an incremental population, execute an ALTER FULLTEXT INDEX statement using the START INCREMENTAL POPULATION clause.

Erstellen oder Ändern eines Zeitplans für die inkrementelle AuffüllungCreate or change a schedule for incremental population

  1. Erweitern Sie in Management Studio im Objekt-Explorer den Server.In Management Studio, in Object Explorer, expand the server.

  2. Erweitern Sie Datenbanken, und erweitern Sie dann die Datenbank, die den Volltextindex enthält.Expand Databases, and then expand the database that contains the full-text index.

  3. Erweitern Sie Tabellen.Expand Tables.

    Klicken Sie mit der rechten Maustaste auf die Tabelle, für die der Volltextindex definiert ist. Wählen Sie Volltextindex, und klicken Sie dann im Kontextmenü Volltextindex auf Eigenschaften.Right-click the table on which the full-text index is defined, select Full-Text index, and on the Full-Text index context menu, click Properties. Das Dialogfeld Volltextindexeigenschaften wird geöffnet.This opens the Full-text index Properties dialog box.

    Wichtig

    Wenn die Basistabelle oder Sicht keine Spalte für den Datentyp Zeitstempel enthält, ist eine inkrementelle Auffüllung nicht möglich.If the base table or view does not contain a column of the timestamp data type, incremental population is not possible.

  4. Wählen Sie im Bereich Seite auswählen Zeitpläne aus.In the Select a page pane, select Schedules.

    Verwenden Sie diese Seite, um Zeitpläne für einen SQL Server-Agent-Auftrag zu erstellen oder zu verwalten, der eine inkrementelle Tabellenauffüllung für die Basistabelle oder indizierte Sicht eines Volltextindex beginnt.Use this page to create or manage schedules for a SQL Server Agent job that starts an incremental table population on the base table or indexed view of the full-text index.

    Folgende Optionen stehen zur Verfügung:The options are as follows:

    • Um einen neuen Zeitplan zu erstellen, klicken Sie auf Neu.To create a new schedule, click New.

      Das Dialogfeld Neuer Zeitplan für Tabellen-Volltextindizierung wird geöffnet und erlaubt das Erstellen eines neuen Zeitplans.This opens the New Full-Text Indexing Table Schedule dialog box, where you can create a schedule. Klicken Sie auf OK, um den Zeitplan zu speichern.To save the schedule, click OK.

      Wichtig

      Einem neuen Zeitplan wird ein SQL Server-Agent-Auftrag (Start Incremental Table Population on database_name.table_name) zugeordnet, sobald Sie das Dialogfeld Volltextindexeigenschaften schließen.A SQL Server Agent job (Start Incremental Table Population on database_name.table_name) is associated with a new schedule after you exit the Full-Text Index Properties dialog box. Wenn Sie mehrere Zeitpläne für denselben Volltextindex erstellen, verwenden alle denselben Auftrag.If you create multiple schedules for the same full-text index, they all use the same job.

    • Um einen vorhandenen Zeitplan zu ändern, wählen Sie den vorhandenen Zeitplan aus, und klicken Sie auf Bearbeiten.To change an existing schedule, select the existing schedule and click Edit.

      Das Dialogfeld Neuer Zeitplan für Tabellen-Volltextindizierung wird geöffnet und erlaubt das Bearbeiten des Zeitplans.This opens the New Full-Text Indexing Table Schedule dialog box, where you can modify the schedule.

      Hinweis

      Informationen zum Ändern eines Auftrags des SQL Server-Agents finden Sie unter Ändern eines Auftrags.For information about modifying a SQL Server Agent job, see Modify a Job.

    • Um einen vorhandenen Zeitplan zu entfernen, wählen Sie den vorhandenen Zeitplan aus, und klicken Sie auf Löschen.To remove an existing schedule, select the existing schedule and click Delete.

  5. Klicken Sie auf OK.Click OK.

Beheben von Fehlern in einer Volltextauffüllung (Durchforstung)Troubleshoot errors in a full-text population (crawl)

Tritt während eines Durchforstungsvorgangs ein Fehler auf, wird von der Durchforstungsprotokollfunktion der Volltextsuche ein Durchforstungsprotokoll erstellt und gewartet. Dabei handelt es sich um eine Nur-Text-Datei.When an error occurs during a crawl, the Full-Text Search crawl logging facility creates and maintains a crawl log, which is a plain text file. Jedes Durchforstungsprotokoll gehört zu einem bestimmten Volltextkatalog.Each crawl log corresponds to a particular full-text catalog. Standardmäßig befinden sich Durchforstungsprotokolle für eine bestimmte Instanz (in diesem Beispiel die Standardinstanz) im Ordner %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG.By default, crawl logs for a given instance (in this example, the default instance) are located in %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG folder.

Das Benennungsschema für Durchforstungsprotokolldateien lautet folgendermaßen:The crawl log file follows the following naming scheme:

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

Die variablen Teile des Durchforstungsprotokolldatei-Namens sind die folgenden.The variable parts of the crawl log file name are the following.

  • <DatabaseID>: Die ID einer Datenbank.<DatabaseID> - The ID of a database. <dbid> ist eine fünfstellige Zahl mit führenden Nullen.<dbid> is a five digit number with leading zeros.
  • <Volltext-Katalog-ID>: Die ID eines Volltextkatalogs.<FullTextCatalogID> - Full-text catalog ID. <catid> ist eine fünfstellige Zahl mit führenden Nullen.<catid> is a five digit number with leading zeros.
  • <n>: Ist eine ganze Zahl, die angibt, dass mindestens ein Durchforstungsprotokoll desselben Volltextkatalogs vorhanden ist.<n> - Is an integer that indicates one or more crawl logs of the same full-text catalog exist.

SQLFT0000500008.2 ist z.B. die Durchforstungsprotokolldatei für eine Datenbank mit der Datenbank-ID = 5 und der Volltextkatalog-ID = 8.For example, SQLFT0000500008.2 is the crawl log file for a database with database ID = 5, and full-text catalog ID = 8. Die 2 am Ende des Dateinamens gibt an, dass zwei Durchforstungsprotokolldateien für dieses Datenbank-Katalog-Paar vorhanden sind.The 2 at the end of the file name indicates that there are two crawl log files for this database/catalog pair.

Weitere InformationenSee Also

sys.dm_fts_index_population (Transact-SQL) sys.dm_fts_index_population (Transact-SQL)
Erste Schritte mit der Volltextsuche Get Started with Full-Text Search
Erstellen und Verwalten von Volltextindizes Create and Manage Full-Text Indexes
CREATE FULLTEXT INDEX (Transact-SQL) CREATE FULLTEXT INDEX (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)ALTER FULLTEXT INDEX (Transact-SQL)