CREATE FULLTEXT INDEX (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Erstellt einen Volltextindex für eine Tabelle oder eine indizierte Sicht in einer Datenbank in SQL Server. 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.

Transact-SQL-Syntaxkonventionen

Syntax

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
 }

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 berücksichtigt wird. Es können nur Spalten der Typen char, varchar, nchar, nvarchar, text, ntext, image, xml und varbinary(max) für die Volltextsuche indiziert 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(max) oder image enthielt. Diese Spalte, als Typspalte bezeichnet, enthält eine vom Benutzer angegebene Dateierweiterung (.doc, .pdf, .xls usw.) Die Typspalte muss vom Typ char, nchar, varcharoder nvarcharsein.

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

Hinweis

Bei der Indizierung verwendet die Volltext-Engine 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 Konfigurieren und Verwalten von Filtern für die Suche.

LANGUAGE language_term

Die Sprache der in column_name gespeicherten Daten.

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

Wenn language_term angegeben ist, wird die davon dargestellte Sprache zum Indizieren 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 sys.syslanguages-Systemtabelle. Die Zeichenfolge muss in einfache Anführungszeichen gesetzt werden, z.B. 'language_term'. In Form einer ganzen Zahl ist language_term der eigentliche Gebietsschemabezeichner, der die Sprache identifiziert. In Form eines Hexadezimalwerts ist language_term gleich 0x, gefolgt vom Hexadezimalwert des Gebietsschemabezeichners. Der Hexadezimalwert darf acht Ziffern nicht überschreiten, einschließlich führender Nullen.

Wird der Wert im Format DBCS (Double-Byte Character Set, Doppelbyte-Zeichensatz) angegeben, 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. Falls 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 Standard-Volltextsprache der Microsoft SQL Server-Instanz zuzugreifen. Weitere Informationen finden Sie unter sp_configure (Transact-SQL).

Verwenden Sie die neutrale (0x0) Sprachenressource für Nicht-BLOB- und Nicht-XML-Spalten mit Textdaten in mehreren Sprachen oder für Fälle, in denen die Sprache des in der Spalte gespeicherten Texts unbekannt ist. Zuerst sollten Sie jedoch die möglichen Folgen der Verwendung der neutralen (0x0) Sprachressource verstehen. Informationen zu den möglichen Lösungen und Folgen der Verwendung der neutralen (0x0) Sprachressource finden Sie unter Auswählen einer Sprache beim Erstellen eines Volltextindex.

Für Dokumente, die in XML- oder BLOB-Spalten gespeichert werden, wird die Sprachcodierung im Dokument bei der Indizierung verwendet. In XML-Spalten wird die Sprache z.B. mit dem xml:lang-Attribut in XML-Dokumenten identifiziert. Zur Abfragezeit wird der Wert, der vorher in language_term angegeben wurde, die Standardsprache, die für Volltextabfragen verwendet wird, es sei denn language_term wird als Teil einer Volltextabfrage angegeben.

STATISTICAL_SEMANTICS

Gilt für: SQL Server (SQL Server 2012 (11.x) und höher)

Erstellt den zusätzlichen Schlüsselausdruck und die Dokumentähnlichkeitsindizes, die Teil der statistischen semantischen Indizierung sind. Weitere Informationen finden Sie unter Semantische Suche (SQL Server).

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 nicht auf Null gesetzt werden kann. Wählen Sie als eindeutigen Volltextschlüssel stets den kleinsten eindeutigen Index 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. Ist kein Standardkatalog vorhanden, 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 dieselbe Dateigruppe oder für eine partitionierte Tabelle in die primäre Dateigruppe platziert.

CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }

Dieses Argument gibt an, ob vom Volltextindex abgedeckte Änderungen (Updates, Löschungen oder Einfügevorgänge) 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

    Dieses Argument gibt an, dass die nachverfolgten Änderungen durch das Aufrufen folgender Anweisung manuell verbreitet werden müssen: Transact-SQL-Anweisung (manuelle Auffüllung) ALTER FULLTEXT INDEX ... START UPDATE POPULATION. 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]

Dieses Argument gibt an, dass SQL Server keine Liste der Änderungen an den indizierten Daten speichert. Wird NO POPULATION nicht angegeben, füllt SQL Server einen Index nach seiner Erstellung 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 Tokens aufgefüllt, die Bestandteil der angegebenen Stoppliste sind. Wenn STOPLIST nicht angegeben wird, ordnet SQL Server dem Index die Systemvolltext-Stoppliste zu.

  • OFF

    Gibt an, dass dem Volltextindex keine Stoppliste zugeordnet ist.

  • 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 werden soll.

SEARCH PROPERTY LIST [ = ] property_list_name

Gilt für: SQL Server (SQL Server 2012 (11.x) und höher)

Ordnet dem Index eine Sucheigenschaftenliste zu.

  • OFF

    Gibt an, dass dem Volltextindex keine Eigenschaftenliste zugeordnet ist.

  • property_list_name

    Gibt den Namen der Sucheigenschaftenliste an, die dem Volltextindex zugeordnet werden soll.

Hinweise

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 Verwenden der Volltextsuche mit XML-Spalten.

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

CREATE FULLTEXT INDEX kann nicht innerhalb einer Benutzertransaktion platziert werden. Diese Anweisung muss in einer eigenen impliziten Transaktion ausgeführt werden.

Weitere Informationen zu Volltextindizes finden Sie unter Erstellen und Verwalten von Volltextindizes.

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.

Change Tracking WITH NO POPULATION Ergebnis
Nicht aktiviert Nicht angegeben Der Index wird vollständig aufgefüllt.
Nicht aktiviert Angegeben Der Index wird nicht aufgefüllt, bevor 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 von Volltextindizes.

Berechtigungen

Benutzer müssen über die -REFERENCESBerechtigung 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 über die REFERENCES-Berechtigung für die angegebene Stoppliste verfügen. Der Besitzer der STOPLIST kann diese Berechtigung gewähren.

Hinweis

Der Datenbankrolle „public“ 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 AdventureWorks2019-Beispieldatenbank erstellt. Im Beispiel wird dann der Standardvolltextkatalog ft erstellt. Im Beispiel wird schließlich mit dem Resume-Katalog und der Systemstoppliste ein Volltextindex in der Spalte ft erstellt.

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 Volltextkatalog, production_catalog, in der AdventureWorks-Beispieldatenbank erstellt. Im Beispiel wird dann ein Volltextindex erstellt, der diesen neuen Katalog verwendet. Der Volltextindex befindet sich in den ReviewerName-, EmailAddress- und Comments-Spalten der Production.ProductReview-Tabelle. 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 einen vorhandenen eindeutigen Schlüsselindex, PK_ProductReview_ProductReviewID. Wie empfohlen befindet sich dieser Indexschlüssel in einer ganzzahligen Spalte, 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. Erstellen eines Volltextindexes mit einer Sucheigenschaftenliste ohne Auffüllen

Im folgenden Beispiel wird ein Volltextindex für die Spalten Title, DocumentSummary und Document der Production.Document-Tabelle erstellt. 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 einer ganzzahligen Spalte, DocumentID.

Das Beispiel zeigt die SYSTEM-Stoppliste an. Außerdem wird eine Sucheigenschaftenliste angegeben: DocumentPropertyList. Ein Beispiel, in dem diese Eigenschaftenliste erstellt wird, finden Sie unter PROPERTY LIST (Transact-SQL).

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.

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

Der Index wird später zu einem Zeitpunkt mit wenig Datenverkehr aufgefüllt:

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

Siehe auch