CREATE FULLTEXT INDEX (Transact-SQL)

Erstellt einen Volltextindex für eine Tabelle oder eine indizierte Sicht in einer Datenbank. Pro Tabelle oder indizierter Sicht ist nur ein Volltextindex zulässig, und jeder Volltextindex gilt für eine einzelne Tabelle oder indizierte Sicht.

Ein Volltextindex kann bis zu 1024 Spalten enthalten.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

CREATE FULLTEXT INDEX ON table_name
      [ ( { column_name 
             [ TYPE COLUMN type_column_name ]
             [ LANGUAGE language_term ] 
        } [ ,...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 }
  }

Argumente

  • table_name
    Der Name der Tabelle oder der indizierten Sicht mit den Spalten, die im Volltextindex enthalten sind.

  • column_name
    Der Name der Spalte, die im Volltextindex enthalten ist. Nur für Spalten vom Typ char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary und varbinary(max) kann ein Index für die Volltextsuche erstellt werden. Um mehrere Spalten anzugeben, wiederholen Sie die column_name-Klausel wie folgt:

    CREATE FULLTEXT INDEX ON table_name (column_name1 […], column_name2 […]) …

  • TYPE COLUMN type_column_name
    Gibt den Namen der Tabellenspalte type_column_name an, die den Dokumenttyp für ein Dokument vom Typ varbinary, varbinary(max) oder image enthält. Diese Spalte, als Typspalte bezeichnet, enthält eine vom Benutzer angegebene Dateierweiterung (.doc, .pdf, .xls usw.) Die Typspalte muss vom Datentyp char, nchar, varchar oder nvarchar sein.

    Geben Sie TYPE COLUMN type_column_name nur an, wenn column_name eine Spalte vom Typ varbinary, varbinary(max) oder image angibt, in der Daten als Binärdaten gespeichert sind. Andernfalls gibt SQL Server einen Fehler zurück.

    HinweisHinweis

    Bei der Indizierung verwendet das Volltextmodul die Abkürzung in der Typspalte der einzelnen Tabellenzeilen, um den für das Dokument in column_name zu verwendenden Filter für die Volltextsuche zu ermitteln. Der Filter lädt das Dokument als binären Datenstrom, entfernt die Formatierungsinformationen und sendet den Text des Dokuments an die Wörtertrennungskomponente. Weitere Informationen finden Sie unter Filter für die Volltextsuche.

  • LANGUAGE language_term
    Die Sprache der in column_name gespeicherten Daten.

    language_term ist optional und kann als Zeichenfolge, ganzzahliger Wert oder Hexadezimalwert entsprechend dem Gebietsschemabezeichner (Locale Identifier, LCID) einer Sprache angegeben werden. Wenn kein Wert angegeben wird, wird die Standardsprache der SQL Server-Instanz verwendet.

    Wenn language_term angegeben wird, wird die entsprechende Sprache für den Index von Daten verwendet, die in Spalten vom Typ char, nchar, varchar, nvarchar, text und ntext gespeichert sind. Diese Sprache ist die Standardsprache, die zur Abfragezeit verwendet wird, wenn language_term nicht als Teil eines Volltextprädikats für die Spalte angegeben wird.

    In Form einer Zeichenfolge entspricht language_term dem Wert der alias-Spalte in der syslanguages-Systemtabelle. Die Zeichenfolge muss in einfache Anführungszeichen eingeschlossen werden, wie in 'language_term'. In Form einer ganzen Zahl ist language_term der eigentliche Gebietsschemabezeichner, der die Sprache identifiziert. In Form eines Hexadezimalwerts hat language_term den Wert 0x, gefolgt vom Hexadezimalwert des Gebietsschemabezeichners. Der Hexadezimalwert darf einschließlich führender Nullen acht Ziffern nicht überschreiten.

    Wenn der Wert im Format Doppelbyte-Zeichensatz (Double-Byte Character Set, DBCS) angegeben wird, wird er von SQL Server in Unicode konvertiert.

    Ressourcen, wie die Wörtertrennung und die Wortstammerkennung, müssen für die mit language_term angegebene Sprache aktiviert sein. Wenn die angegebene Sprache von den Ressourcen nicht unterstützt wird, gibt SQL Server einen Fehler zurück.

    Verwenden Sie die gespeicherte Prozedur sp_configure, um auf Informationen zur Standardvolltextsprache der MicrosoftSQL Server-Instanz zuzugreifen. Weitere Informationen finden Sie unter sp_configure (Transact-SQL) und default full-text language (Option).

    Verwenden Sie die neutrale Sprachenressource (0x0) für Nicht-BLOB- und Nicht-XML-Spalten mit Textdaten in mehreren Sprachen, oder wenn die Sprache des in der Spalte gespeicherten Texts unbekannt ist. Sie sollten sich jedoch über die möglichen Folgen der Verwendung der neutralen Sprachressource (0x0) im Klaren sein. Informationen zu den möglichen Lösungen und Folgen der Verwendung der neutralen Sprachressource (0x0) finden Sie unter Bewährte Methoden für das Auswählen einer Sprache beim Erstellen eines Volltextindex.

    Für Dokumente, die in Spalten vom Typ XML oder BLOB gespeichert sind, wird zum Zeitpunkt der Indizierung die Sprachcodierung innerhalb des Dokuments verwendet. In XML-Spalten wird die Sprache z. B. durch das xml:lang-Attribut in XML-Dokumenten identifiziert. Bei der Abfrage wird der vorher in language_term angegebene Wert zur Standardsprache, die für Volltextabfragen verwendet wird, es sei denn language_term wird als Teil einer Volltextabfrage angegeben.

  • KEY INDEX index_name
    Der Name des eindeutigen Schlüsselindexes für table_name. KEY INDEX muss eine eindeutige Spalte mit einem Schlüssel sein, die keine NULL-Werte zulässt. Wählen Sie als eindeutigen Volltextschlüssel stets den kleinsten eindeutigen Schlüsselindex aus. Für die optimale Leistung empfehlen wir einen Integer-Datentyp als Volltextschlüssel.

  • fulltext_catalog_name
    Der Volltextkatalog, der für den Volltextindex verwendet wird. Der Katalog muss bereits in der Datenbank vorhanden sein. Diese Klausel ist optional. Wenn sie nicht angegeben wird, wird ein Standardkatalog verwendet. Wenn kein Standardkatalog vorhanden ist, gibt SQL Server einen Fehler zurück.

  • FILEGROUP filegroup_name
    Erstellt den angegebenen Volltextindex für die angegebene Dateigruppe. Die Dateigruppe muss bereits vorhanden sein. Wenn die FILEGROUP-Klausel nicht angegeben ist, wird der Volltextindex für eine nicht partitionierte Tabelle als Basistabelle oder -ansicht in derselben Dateigruppe und für eine partitionierte Tabelle in der primären Dateigruppe platziert.

  • CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
    Gibt an, ob vom Volltextindex abgedeckte Änderungen (Aktualisierungen, Löschungen oder Einfügungen) an Tabellenspalten von SQL Server an den Volltextindex weitergegeben werden. Datenänderungen durch WRITETEXT und UPDATETEXT werden im Volltextindex nicht wiedergegeben und bei der Änderungsnachverfolgung nicht ausgewählt.

    • MANUAL
      Gibt an, dass die nachverfolgten Änderungen manuell durch einen Aufruf der Transact-SQL-Anweisung ALTER FULLTEXT INDEX … START UPDATE POPULATION (manuelles Auffüllen) weitergeleitet werden müssen. Sie können den SQL Server-Agent verwenden, um die Transact-SQL-Anweisung in regelmäßigen Abständen aufzurufen.

    • AUTO
      Gibt an, dass die nachverfolgten Änderungen automatisch weitergegeben werden, wenn Daten in der Basistabelle geändert werden (automatische Auffüllung). Obwohl Änderungen automatisch weitergegeben werden, werden diese Änderungen u. U. nicht sofort im Volltextindex wiedergegeben. AUTO ist die Standardeinstellung.

    • OFF [ , NO POPULATION]
      Gibt an, dass SQL Server keine Liste der Änderungen an den indizierten Daten verwaltet. Wird NO POPULATION nicht angegeben, füllt SQL Server einen Index nach seiner Erstellung vollständig auf.

      Die Option NO POPULATION kann nur dann verwendet werden, wenn für CHANGE_TRACKING der Wert OFF festgelegt ist. Wenn NO POPULATION angegeben ist, füllt SQL Server einen Index nach dessen Erstellung nicht auf. Der Index wird erst aufgefüllt, wenn der Benutzer den Befehl ALTER FULLTEXT INDEX mit der Klausel START FULL POPULATION oder START INCREMENTAL POPULATION ausführt.

  • STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
    Ordnet dem Index eine Volltext-Stoppliste zu. Der Index wird nicht mit Token aufgefüllt, die Bestandteil der angegebenen Stoppliste sind. Wenn STOPLIST nicht angegeben wird, ordnet SQL Server dem Index die Systemvolltextstoppliste zu.

    • OFF
      Gibt an, dass dem Volltextindex keine Stoppliste zugeordnet wird.

    • SYSTEM
      Gibt an, dass die Standardvolltext-Systemstoppliste STOPLIST für diesen Volltextindex verwendet werden soll.

    • stoplist_name
      Gibt den Namen der Stoppliste an, die dem Volltextindex zugeordnet ist.

Hinweise

Weitere Informationen zu Volltextindizes finden Sie unter Konfigurieren von Volltextkatalogen und -indizes für eine Datenbank.

Für xml-Spalten können Sie einen Volltextindex erstellen, mit dem der Inhalt der XML-Elemente indiziert, das XML-Markup jedoch ignoriert wird. Attributwerte werden volltextindiziert, sofern es sich nicht um numerische Werte handelt. Elementtags werden als Tokenbegrenzungen verwendet. Wohlgeformte XML- oder HTML-Dokumente und Fragmente in mehreren Sprachen werden unterstützt. Weitere Informationen finden Sie unter Volltextindex für eine XML-Spalte.

Es ist empfehlenswert, als Indexschlüsselspalte einen Integer-Datentyp zu verwenden. Auf diese Weise kann die Ausführungszeit der Abfragen optimiert werden.

Interaktionen zwischen der Änderungsnachverfolgung und dem Parameter NO POPULATION

Ob der Volltextindex aufgefüllt wird, hängt davon ab, ob die Änderungsnachverfolgung aktiviert wurde und WITH NO POPULATION in der ALTER FULLTEXT INDEX-Anweisung angegeben ist. In der folgenden Tabelle wird das Ergebnis ihrer Interaktion zusammengefasst.

Änderungsnachverfolgung

WITH NO POPULATION

Ergebnis

Nicht aktiviert

Nicht angegeben

Der Index wird vollständig aufgefüllt.

Nicht aktiviert

Angegeben

Der Index wird erst aufgefüllt, wenn eine Anweisung ALTER FULLTEXT INDEX...START POPULATION ausgegeben wird.

Aktiviert

Angegeben

Ein Fehler wird ausgelöst, und der Index wird nicht geändert.

Aktiviert

Nicht angegeben

Der Index wird vollständig aufgefüllt.

Weitere Informationen zum Auffüllen von Volltextindizes finden Sie unter Auffüllen eines Volltextindexes.

Berechtigungen

Benutzer müssen über die REFERENCES-Berechtigung für den Volltextkatalog und die ALTER-Berechtigung für die Tabelle oder indizierte Sicht verfügen oder Mitglied der festen Serverrolle sysadmin oder der festen Datenbankrollen db_owner bzw. db_ddladmin sein.

Wenn SET STOPLIST angegeben wird, muss der Benutzer die REFERENCES-Berechtigung für die angegebene Stoppliste haben. Der Besitzer der STOPLIST kann diese Berechtigung gewähren.

HinweisHinweis

Der public-Datenbankrolle wird für die Standardstoppliste, die mit SQL Server ausgeliefert wird, die REFERENCE-Berechtigung gewährt.

Beispiele

A. Erstellen eines eindeutigen Indexes, eines Volltextkatalogs und eines Volltextindexes

Im folgenden Beispiel wird ein eindeutiger Index für die Spalte JobCandidateID der HumanResources.JobCandidate-Tabelle der AdventureWorks-Beispieldatenbank erstellt. Im Beispiel wird dann der Standardvolltextkatalog ft erstellt. Schließlich wird mit dem ft-Katalog und der Systemstoppliste ein Volltextindex in der Spalte Resume erstellt.

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 STOPLIST = SYSTEM;
GO

B. Erstellen eines Volltextindexes für mehrere Tabellenspalten

Im folgenden Beispiel wird ein Volltextindex für die Spalten ReviewerName, EmailAddress und Comments der Production.ProductReview-Tabelle der AdventureWorks-Beispieldatenbank erstellt. Im Beispiel wird für jede Spalte die LCID für Englisch 1033 angegeben. Dies entspricht der Sprache der Daten in den Spalten. Dieser Volltextindex verwendet den Standardvolltextkatalog und den vorhandenen eindeutigen Schlüsselindex PK_ProductReview_ProductReviewID. Wie empfohlen befindet sich dieser Indexschlüssel in der ganzzahligen Spalte ProductReviewID.

USE AdventureWorks;
GO
CREATE FULLTEXT INDEX ON Production.ProductReview
( 
  ReviewerName
     Language 1033,
  EmailAddress
     Language 1033,
  Comments 
     Language 1033     
 ) 
KEY INDEX PK_ProductReview_ProductReviewID ; 
GO

C. Erstellen eines Volltextindexes, ohne ihn aufzufüllen

Im folgenden Beispiel wird der Volltextkatalog documents_catalog in der AdventureWorks-Beispieldatenbank erstellt. Im Beispiel wird dann ein Volltextindex erstellt, der diesen neuen Katalog verwendet. Der Volltextindex befindet sich in der Document-Spalte der Production.Document-Tabelle. Im Beispiel wird die LCID für Englisch 1033 angegeben. Dies entspricht der Sprache der Daten in der Spalte. Dieser Volltextindex verwendet den Standardvolltextkatalog und den vorhandenen eindeutigen Schlüsselindex PK_Document_DocumentID. Wie empfohlen befindet sich dieser Indexschlüssel in der ganzzahligen Spalte DocumentID. Im Beispiel wird angegeben, dass die Änderungsnachverfolgung ohne Auffüllung deaktiviert ist. Im Beispiel wird eine ALTER FULLTEXT INDEX-Anweisung verwendet, um außerhalb der Spitzenbetriebszeiten eine vollständige Auffüllung mit dem neuen Index zu beginnen und die automatische Änderungsnachverfolgung zu aktivieren.

USE AdventureWorks;
GO
CREATE FULLTEXT CATALOG documents_catalog;
GO
CREATE FULLTEXT INDEX ON Production.Document
( Document 
    TYPE COLUMN FileExtension
    Language 1033 )
   KEY INDEX PK_Document_DocumentID
      ON documents_catalog
      WITH CHANGE_TRACKING OFF, NO POPULATION;
   GO

– Der Index wird später, zu einem verkehrsschwachen Zeitpunkt, aufgefüllt:

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

Änderungsverlauf

Aktualisierter Inhalt

Dem Abschnitt "Beispiele" wurden zusätzliche Beispiele hinzugefügt.

Der Abschnitt "Interaktionen zwischen der Änderungsnachverfolgung und dem Parameter NO POPULATION" wurde hinzugefügt.