Freigeben über


Volltextindizes auffüllen

Das Erstellen und Verwalten eines Volltextindex umfasst das Auffüllen des Indexes mithilfe eines Prozesses, der als Population bezeichnet wird (auch als Durchforstung bezeichnet).

Arten von Populationen

SQL Server unterstützt die folgenden Arten von Grundgesamtheiten: vollständige Grundgesamtheit, änderungsbasierte automatische oder manuelle Grundgesamtheit und inkrementelle Zeitstempelbasierte Grundgesamtheit.

Volle Bevölkerung

Während einer vollständigen Grundgesamtheit werden Indexeinträge für alle Zeilen einer Tabelle oder indizierten Ansicht erstellt. Eine vollständige Grundgesamtheit eines Volltextindexes erstellt Indexeinträge für alle Zeilen der Basistabelle oder indizierten Ansicht.

Sql Server füllt standardmäßig einen neuen Volltextindex vollständig auf, sobald er erstellt wird. Eine vollständige Bevölkerung kann jedoch eine erhebliche Menge an Ressourcen verbrauchen. Daher ist es bei der Erstellung eines Volltextindexes während der Hochsaison häufig empfehlenswert, die vollständige Indizierung bis zu einer Zeit außerhalb der Hochsaison zu verschieben, besonders wenn die Basistabelle eines Volltextindexes groß ist. Der Volltextkatalog, zu dem der Index gehört, kann jedoch erst verwendet werden, wenn alle Volltextindizes aufgefüllt werden. Um einen Volltextindex zu erstellen, ohne ihn sofort aufzufüllen, geben Sie die CHANGE_TRACKING OFF, NO POPULATION-Klausel in der CREATE FULLTEXT INDEX-Anweisung an. Wenn Sie CHANGE_TRACKING MANUAL angeben, nutzt die Full-Text Engine die Aussage. SQL Server füllt den neuen Volltextindex erst, wenn Sie eine ALTER FULLTEXT INDEX-Anweisung mit der Klausel START FULL POPULATION oder START INCREMENTAL POPULATION ausführen. Weitere Informationen finden Sie in den Beispielen "A. Erstellen eines Volltextindexes, ohne dass eine vollständige Population ausgeführt wird, und "B". Ausführen einer vollständigen Population in der Tabelle", weiter unten in diesem Thema.

Ändern Tracking-Based Bevölkerung

Optional können Sie die Änderungsnachverfolgung verwenden, um einen Volltextindex nach der anfänglichen vollständigen Population beizubehalten. Der Änderungsnachverfolgung ist ein geringer Aufwand zugeordnet, da SQL Server eine Tabelle verwaltet, in der änderungen an der Basistabelle seit der letzten Grundpopulation nachverfolgt werden. Wenn die Änderungsnachverfolgung verwendet wird, verwaltet SQL Server einen Datensatz der Zeilen in der Basistabelle oder indizierten Ansicht, die durch Aktualisierungen, Löschungen oder Einfügungen geändert wurden. Datenänderungen über WRITETEXT und UPDATETEXT werden nicht im Volltextindex widergespiegelt und werden nicht mit der Änderungsnachverfolgung aufgenommen.

Hinweis

Für Tabellen, die eine timestamp Spalte enthalten, können Sie inkrementelle Populationen verwenden.

Wenn die Änderungsnachverfolgung während der Indexerstellung aktiviert ist, füllt SQL Server den neuen Volltextindex sofort nach der Erstellung vollständig auf. Danach werden Änderungen nachverfolgt und an den Volltextindex weitergegeben. Es gibt zwei Arten von Änderungsnachverfolgung, automatisch (CHANGE_TRACKING AUTO-Option) und manuell (CHANGE_TRACKING MANUELLE Option). Die automatische Änderungsnachverfolgung ist das Standardverhalten.

Die Art der Änderungsnachverfolgung bestimmt, wie der Volltextindex aufgefüllt wird, wie folgt:

  • Automatische Population

    Wenn Sie standardmäßig CHANGE_TRACKING AUTO angeben, verwendet das Full-Text Modul die automatische Population für den Volltextindex. Nach Abschluss der anfänglichen vollständigen Grundgesamtheit werden Änderungen nachverfolgt, wenn Daten in der Basistabelle geändert werden, und die nachverfolgten Änderungen werden automatisch weitergegeben. Der Volltextindex wird jedoch im Hintergrund aktualisiert, sodass verteilte Änderungen möglicherweise nicht sofort im Index widergespiegelt werden.

    So richten Sie die Nachverfolgung von Änderungen mit automatischer Population ein

    Weitere Informationen finden Sie im Beispiel "E. Ändern eines Volltextindexes zur Verwendung der automatischen Änderungsnachverfolgung", weiter unten in diesem Thema.

  • Manuelle Population

    Wenn Sie CHANGE_TRACKING MANUAL angeben, verwendet die Full-Text Engine die manuelle Population für den Volltextindex. Nachdem die anfängliche vollständige Grundgesamtheit abgeschlossen ist, werden Änderungen nachverfolgt, wenn Daten in der Basistabelle geändert werden. Sie werden jedoch erst an den Volltextindex weitergegeben, wenn Sie eine ALTER FULLTEXT INDEX ... START UPDATE POPULATION-Anweisung ausführen. Sie können den SQL Server-Agent verwenden, um diese Transact-SQL Anweisung regelmäßig aufzurufen.

    So beginnen Sie mit der Nachverfolgung von Änderungen mit manueller Population

    Weitere Informationen finden Sie in den Beispielen "C. Erstellen eines Volltextindexes mit manueller Änderungsnachverfolgung" und "D" Ausführen einer manuellen Population, weiter unten in diesem Thema.

So deaktivieren Sie die Änderungsnachverfolgung

Inkrementelle Timestamp-Based Population

Eine inkrementelle Grundgesamtheit ist ein alternativer Mechanismus zum manuellen Auffüllen eines Volltextindexes. Sie können eine inkrementelle Grundgesamtheit für einen Volltextindex ausführen, der CHANGE_TRACKING auf MANUAL oder OFF festgelegt ist. Wenn die erste Grundgesamtheit eines Volltextindex eine inkrementelle Grundgesamtheit ist, werden alle Zeilen indiziert, sodass sie einer vollständigen Grundgesamtheit entspricht.

Die Anforderung für die inkrementelle Grundgesamtheit besteht darin, dass die indizierte Tabelle über eine Spalte des timestamp Datentyps verfügen muss. Wenn keine timestamp Spalte vorhanden ist, kann die inkrementelle Population nicht ausgeführt werden. Eine Anfrage für inkrementelle Auffüllung in einer Tabelle ohne timestamp-Spalte führt zu einem vollständigen Auffüllvorgang. Wenn metadaten, die sich auf den Volltextindex für die Tabelle auswirken, seit der letzten Grundgesamtheit geändert wurden, werden inkrementelle Populationsanforderungen als vollständige Populationen implementiert. Dazu gehören Metadatenänderungen, die durch Ändern von Spalten-, Index- oder Volltextindexdefinitionen verursacht werden.

SQL Server verwendet die timestamp Spalte, um Zeilen zu identifizieren, die sich seit der letzten Population geändert haben. Die inkrementelle Grundgesamtheit aktualisiert dann den Volltextindex für Zeilen, die nach der letzten Grundgesamtheit hinzugefügt, gelöscht oder geändert wurden, oder während die letzte Grundgesamtheit ausgeführt wurde. Wenn eine Tabelle eine hohe Anzahl von Einfügungen hat, kann die Verwendung der inkrementellen Befüllung effizienter sein als die manuelle Befüllung.

Am Ende einer Population zeichnet der Full-Text Motor einen neuen timestamp Wert auf. Dieser Wert ist der größte timestamp Wert, den SQL Gatherer gefunden hat. Dieser Wert wird verwendet, wenn eine nachfolgende inkrementelle Population beginnt.

Um eine inkrementelle Population auszuführen, führen Sie eine ALTER FULLTEXT INDEX-Anweisung mithilfe der START INCREMENTAL POPULATION-Klausel aus.

Beispiele für das Auffüllen von Full-Text Indizes

Hinweis

In den Beispielen in diesem Abschnitt wird die Tabelle Production.Document oder HumanResources.JobCandidate der Beispieldatenbank AdventureWorks verwendet.

A. Erstellen eines Volltextindexes ohne vollständige Population

Im folgenden Beispiel wird ein Volltextindex in der Production.Document Tabelle der AdventureWorks Beispieldatenbank erstellt. In diesem Beispiel wird WITH CHANGE_TRACKING OFF, NO POPULATION verwendet, um die ursprüngliche vollständige Population zu verzögern.

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  
  

B. Ausführen einer vollständigen Population auf der Tabelle

Im folgenden Beispiel wird eine vollständige Population in der Production.Document Tabelle der AdventureWorks Beispieldatenbank ausgeführt.

ALTER FULLTEXT INDEX ON Production.Document  
   START FULL POPULATION;  

C. Erstellen eines Volltextindexes mit manueller Änderungsnachverfolgung

Im folgenden Beispiel wird ein Volltextindex erstellt, der die Änderungsnachverfolgung mit manueller Population in der HumanResources.JobCandidate Tabelle der AdventureWorks Beispieldatenbank verwendet.

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  

D. Ausführen einer manuellen Population

Das nachstehende Beispiel führt eine manuelle Population des geändert verfolgten Volltextindex der HumanResources.JobCandidate-Tabelle der AdventureWorks-Beispieldatenbank aus.

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

E. Ändern eines Volltextindexes zur Verwendung der automatischen Änderungsnachverfolgung

Im folgenden Beispiel wird der Volltextindex der HumanResources.JobCandidate Tabelle der AdventureWorks Beispieldatenbank so geändert, dass die Änderungsnachverfolgung mit automatischer Population verwendet wird.

USE AdventureWorks;  
GO  
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;  
GO   

Erstellen oder Ändern eines Zeitplans für inkrementelle Population

So erstellen oder ändern Sie einen Zeitplan für die inkrementelle Population in Management Studio

  1. Erweitern Sie im Objekt-Explorer den Server.

  2. Erweitern Sie Datenbanken, und erweitern Sie dann die Datenbank, die den Volltextindex enthält.

  3. Erweitern Sie Tabellen.

Klicken Sie mit der rechten Maustaste auf die Tabelle, in der der Volltextindex definiert ist, wählen Sie Full-Text Index aus, und klicken Sie im KontextmenüFull-Text Index auf Eigenschaften. Dadurch wird das Dialogfeld "Volltextindexeigenschaften " geöffnet.

  1. Wählen Sie im Seitenbereich "Seite auswählen" die Option "Zeitpläne" aus.

    Verwenden Sie diese Seite, um Zeitpläne für einen SQL Server-Agent-Auftrag zu erstellen oder zu verwalten, der eine inkrementelle Tabellengesamtheit in der Basistabelle oder indizierte Ansicht des Volltextindexes startet.

    Von Bedeutung

    Wenn die Basistabelle oder -ansicht keine Spalte des timestamp Datentyps enthält, wird eine vollständige Grundpopulation ausgeführt.

    Die Optionen sind wie folgt:

    • Klicken Sie auf "Neu", um einen neuen Zeitplan zu erstellen.

      Dadurch wird das Dialogfeld "Neuer Full-Text Indizierungstabellenplan " geöffnet, in dem Sie einen Zeitplan erstellen können. Klicken Sie auf 'OK', um den Zeitplan zu speichern.

      Von Bedeutung

      Ein SQL Server-Agent-Auftrag (Inkrementelle Tabellenpopulation auf database_name starten.table_name) wird einem neuen Zeitplan zugeordnet, nachdem Sie das Dialogfeld Full-Text Indexeigenschaften beendet haben. Wenn Sie mehrere Zeitpläne für den Volltextindex erstellen, verwenden sie alle denselben Job.

    • Um einen Zeitplan zu ändern, wählen Sie ihn aus, und klicken Sie auf "Bearbeiten".

      Dadurch wird das Dialogfeld "Neuer Full-Text Indizierungstabellenplan " geöffnet, in dem Sie den Zeitplan ändern können.

      Hinweis

      Informationen zum Ändern eines Auftrags finden Sie unter "Ändern eines Auftrags".

    • Um einen Zeitplan zu entfernen, wählen Sie ihn aus, und klicken Sie auf "Löschen".

  2. Klicke auf OK.

Problembehandlung bei Fehlern in einer Full-Text Population (Crawler)

Wenn während einer Durchforstung ein Fehler auftritt, erstellt und verwaltet die Full-Text Suchdurchforstungsprotokollierung ein Durchforstungsprotokoll, bei dem es sich um eine Nur-Textdatei handelt. Jedes Durchforstungsprotokoll entspricht einem bestimmten Volltextkatalog. Standardmäßig befinden sich die Crawler-Protokolle für eine gegebene Instanz, in diesem Fall die erste Instanz, im Ordner %ProgramFiles%\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\LOG. Die Crawl-Protokolldatei folgt diesem Benennungsschema:

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

<DatabaseID>
Die ID einer Datenbank. < dbid > ist eine fünfstellige Zahl mit führenden Nullen.

<FullTextCatalogID>
Volltextkatalog-ID. < catid > ist eine fünfstellige Zahl mit führenden Nullen.

<n>
Ist eine ganze Zahl, die angibt, dass eines oder mehrere Durchforstungsprotokolle desselben Volltextkatalogs vorhanden sind.

Beispielsweise ist SQLFT0000500008.2 die Durchforstungsprotokolldatei für eine Datenbank mit Datenbank-ID = 5 und Volltextkatalog-ID = 8. Die 2 am Ende des Dateinamens gibt an, dass es zwei Durchforstungsprotokolldateien für dieses Datenbank-/Katalogpaar gibt.

Siehe auch

sys.dm_fts_index_population (Transact-SQL)
Erste Schritte mit der Volltextsuche
Erstellen und Verwalten von Volltextindizes
CREATE FULLTEXT INDEX (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)