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.
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 berücksichtigt wird. Nur für Spalten vom Typ char, varchar, nchar, nvarchar, text, ntext, image, xml 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(max) oder image enthält. Diese als Typspalte bezeichnete Spalte 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(max) oder image angibt, in der Daten als Binärdaten gespeichert sind. Andernfalls gibt SQL Server einen Fehler zurück.
Hinweis 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, z. B. 'language_term'. In Form einer ganzen Zahl ist language_term der eigentliche Gebietsschemabezeichner, der die Sprache identifiziert. In Form eines Hexadezimalwertes 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 Doppelbyte-Zeichensatz (Double-Byte Character Set, DBCS) 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.
Mithilfe der gespeicherten Prozedur sp_configure können Sie auf Informationen zur standardmäßigen Volltextsprache der Microsoft SQL Server-Instanz zugreifen. Weitere Informationen finden Sie unter sp_configure (Transact-SQL) und default full-text language (Option).
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 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 werden, wird die Sprachcodierung innerhalb des Dokuments bei der Indizierung verwendet. In XML-Spalten wird die Sprache z. B. durch das 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.
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 ] }
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 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 werden soll.
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 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 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 besitzen. Der Besitzer der STOPLIST kann diese Berechtigung gewähren.
Hinweis |
---|
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 AdventureWorks2008R2-Beispieldatenbank erstellt. Im Beispiel wird dann der Standardvolltextkatalog ft erstellt. Im Beispiel wird schließlich mit dem ft-Katalog und der Systemstoppliste ein Volltextindex in der Spalte Resume erstellt.
USE AdventureWorks2008R2;
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 AdventureWorks2008R2-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 einen vorhandenen eindeutigen Hauptindex, PK_ProductReview_ProductReviewID. Wie empfohlen, befindet sich dieser Indexschlüssel in einer ganzzahligen Spalte, ProductReviewID.
USE AdventureWorks2008R2;
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 ein Volltextkatalog, documents_catalog, in der AdventureWorks2008R2-Beispieldatenbank erstellt. Im Beispiel wird dann ein Volltextindex erstellt, der diesen neuen Katalog verwendet. Der Volltextindex befindet sich in den Title-, DocumentSummary- und Document-Spalten 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 einer ganzzahligen Spalte, DocumentID.
Das Beispiel zeigt die SYSTEM-Stoppliste an.
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 AdventureWorks2008R2;
GO
CREATE FULLTEXT CATALOG documents_catalog;
GO
CREATE FULLTEXT INDEX ON Production.Document
(
Title
Language 1033,
DocumentSummary
Language 1033,
Document
TYPE COLUMN FileExtension
Language 1033
)
KEY INDEX PK_Document_DocumentID
ON documents_catalog
WITH STOPLIST = SYSTEM , 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