Freigeben über


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 ] 
             [ 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. 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 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(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 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, 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).

    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 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.

  • STATISTICAL_SEMANTICS
    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 ] }
    Gibt an, ob vom Volltextindex abgedeckte Änderungen (Updates, 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.

  • SEARCH PROPERTY LIST [ = ] property_list_name
    Ordnet dem Index eine Sucheigenschaftenliste zu.

    • OFF
      Gibt an, dass dem Volltextindex keine Eigenschaftenliste zugeordnet werden soll.

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

Hinweise

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

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.

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 von Volltextindizes.

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. Im Beispiel wird schließlich 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 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 Spalten ReviewerName, EmailAddress und Comments der Production.ProductReview-Tabelle der AdventureWorks-Beispieldatenbank. 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.

USE AdventureWorks;
GO
CREATE FULLTEXT CATALOG production_catalog;
GO
CREATE FULLTEXT INDEX ON Production.ProductReview
 ( 
  ReviewerName
     Language 1031,
  EmailAddress
     Language 1031,
  Comments 
     Language 1031     
 ) 
  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 CREATE SEARCH 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.

USE AdventureWorks;
GO
CREATE FULLTEXT INDEX ON Production.Document
  ( 
  Title
      Language 1031, 
  DocumentSummary
      Language 1031, 
  Document 
      TYPE COLUMN FileExtension
      Language 1031 
  )
  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

Verweis

ALTER FULLTEXT INDEX (Transact-SQL)

DROP FULLTEXT INDEX (Transact-SQL)

GRANT (Transact-SQL)

sys.fulltext_indexes (Transact-SQL)

Konzepte

Erstellen und Verwalten von Volltextindizes

Volltextsuche (SQL Server)

Suchen von Dokumenteigenschaften mithilfe von Sucheigenschaftenlisten