Erstellen und Verwalten von Volltextindizes

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

In diesem Artikel wird beschrieben, wie Sie Volltextindizes in SQL Server erstellen, auffüllen und verwalten.

Erstellen eines Volltextkatalogs

Bevor Sie einen Volltextindex erstellen können, müssen Sie einen Volltextkatalog erstellen. Der Katalog ist ein virtueller Container für ein oder mehrere Volltextindizes. Weitere Informationen finden Sie unter Erstellen und Verwalten von Volltextkatalogen.

Erstellen, Ändern oder Ablegen eines Volltextindexes

Auffüllen eines Volltextindexes

Der Vorgang, bei dem ein Volltextindex erstellt und verwaltet wird, wird als Auffüllung (oder Durchforstung) bezeichnet. Es gibt drei Typen der Auffüllung eines Volltextindexes:

  • Vollständige Auffüllung
  • Auffüllung basierend auf der Änderungsnachverfolgung
  • Inkrementelle Auffüllung basierend auf einem Zeitstempel

Weitere Informationen finden Sie unter Auffüllen von Volltextindizes.

Anzeigen der Eigenschaften eines Volltextindexes

Anzeigen der Eigenschaften eines Volltextindexes mit Transact-SQL

Katalogsicht oder dynamische Verwaltungssicht Beschreibung
sys.fulltext_index_catalog_usages (Transact-SQL) Gibt eine Zeile für jeden Verweis zwischen Volltextkatalog und Volltextindex zurück.
sys.fulltext_index_columns (Transact-SQL) Enthält eine Zeile für jede Spalte, die Teil eines Volltextindexes ist.
sys.fulltext_index_fragments (Transact-SQL) Ein Volltextindex verwendet interne Tabellen, die als Volltextindexfragmente bezeichnet werden, um die umgekehrten Indexdaten zu speichern. Diese Sicht kann verwendet werden, um die Metadaten zu diesen Fragmenten abzufragen. Diese Sicht enthält eine Zeile für jedes Volltextindexfragment in jeder Tabelle, die einen Volltextindex enthält.
sys.fulltext_indexes (Transact-SQL) Enthält eine Zeile pro Volltextindex eines Tabellenobjekts.
sys.dm_fts_index_keywords (Transact-SQL) Gibt Informationen zum Inhalt eines Volltextindex für die angegebene Tabelle zurück.
sys.dm_fts_index_keywords_by_document (Transact-SQL) Gibt Informationen zum Inhalt auf Dokumentebene eines Volltextindex für die angegebene Tabelle zurück. Ein Schlüsselwort kann in mehreren Dokumenten angezeigt werden.
sys.dm_fts_index_population (Transact-SQL) Gibt Informationen zu den aktuell ausgeführten Volltextindexauffüllungen zurück.

Anzeigen der Eigenschaften eines Volltextindexes mit SQL Server Management Studio

Hinweis

Verwenden Sie Transact-SQL, um Eigenschaften von Volltextindizes für Azure SQL-Datenbanken anzuzeigen.

  1. Erweitern Sie im SQL Server Management Studio im Objekt-Explorer den Server.

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

  3. Erweitern Sie Tabellen.

  4. Klicken Sie mit der rechten Maustaste auf die Tabelle, in der der Volltextindex definiert ist, wählen Sie den Volltextindex aus, und wählen Sie im Kontextmenü "Volltextindex" die Option "Eigenschaften" aus. Das Dialogfeld Volltextindexeigenschaften wird geöffnet.

  5. Im Bereich Seite auswählen können Sie eine der folgenden Seiten auswählen:

    Seite Beschreibung
    Allgemein Ändert die grundlegenden Eigenschaften des Volltextindex. Dazu gehören mehrere modifizierbare Eigenschaften und viele nicht geänderte Eigenschaften wie Datenbankname, Tabellenname und der Name der Volltextschlüsselspalte. Die änderbaren Eigenschaften lauten:

    Volltextindex-Stoppliste

    Volltextindizierung aktiviert

    Änderungsnachverfolgung

    Sucheigenschaftenliste
    Spalten Zeigt die Tabellenspalten an, die für die Volltextindizierung verfügbar sind. Die ausgewählte Spalte bzw. die Spalten werden volltextindiziert. Sie können beliebig viele verfügbare Spalten auswählen und in den Volltextindex aufnehmen. Weitere Informationen finden Sie unter Auffüllen von Volltextindizes.
    Zeitpläne Verwenden Sie diese Seite, um Zeitpläne für einen SQL Server-Agent-Auftrag zu erstellen oder zu verwalten, der eine inkrementelle Tabellenauffüllung für die Auffüllungen des Volltextindexes beginnt. Weitere Informationen finden Sie unter Auffüllen von Volltextindizes.

    Hinweis: Sobald Sie das Dialogfeld Volltextindexeigenschaften schließen, werden alle neu erstellten Zeitpläne einem SQL Server-Agent-Auftrag zugeordnet (Start Incremental Table Population on Datenbankname.Tabellenname).
  6. Wählen Sie 'OK ' aus, um alle Änderungen zu speichern und das Dialogfeld "Volltextindexeigenschaften " zu beenden.

Anzeigen der Eigenschaften von indizierten Tabellen und Spalten

Mehrere Transact-SQL-Funktionen wie OBJECTPROPERTYEX können verwendet werden, um den Wert verschiedener Volltextindizierungseigenschaften abzurufen. Diese Informationen sind für die Verwaltung und Problembehandlung der Volltextsuche hilfreich.

In der folgenden Tabelle sind die Volltexteigenschaften im Zusammenhang mit indizierten Tabellen und Spalten und deren zugehörige Transact-SQL-Funktionen aufgeführt.

Eigenschaft Beschreibung Function
FullTextTypeColumn TYPE COLUMN in der Tabelle, die die Dokumenttypinformationen der Spalte enthält. COLUMNPROPERTY
IsFulltextIndexed Gibt an, ob eine Spalte für die Volltextindizierung aktiviert wurde. COLUMNPROPERTY
IsFulltextKey Gibt an, ob der Index der Volltextschlüssel für eine Tabelle ist. INDEXPROPERTY
TableFulltextBackgroundUpdateIndexOn Gibt an, ob für eine Tabelle das Update von Volltextindizes im Hintergrund aktiviert wurde. OBJECTPROPERTYEX
TableFulltextCatalogId ID des Volltextkatalogs, in dem die Daten des Volltextindex für die Tabelle gespeichert sind. OBJECTPROPERTYEX
TableFulltextChangeTrackingOn Gibt an, ob für eine Tabelle die Volltext-Änderungsnachverfolgung aktiviert ist. OBJECTPROPERTYEX
TableFulltextDocsProcessed Die Anzahl der seit dem Start der Volltextindizierung verarbeiteten Zeilen. OBJECTPROPERTYEX
TableFulltextFailCount Die Anzahl der Zeilen, die die Volltextsuche nicht indiziert hat. OBJECTPROPERTYEX
TableFulltextItemCount Die Anzahl von Zeilen, für die ein Volltextindex erfolgreich erstellt wurde. OBJECTPROPERTYEX
TableFulltextKeyColumn Die Spalten-ID der Volltextspalte für den eindeutigen Schlüssel. OBJECTPROPERTYEX
TableFullTextMergeStatus Gibt an, ob eine Tabelle über einen Volltextindex verfügt, der gerade zusammengeführt wird. OBJECTPROPERTYEX
TableFulltextPendingChanges Anzahl der zu verarbeitenden ausstehenden Änderungsnachverfolgungseinträge. OBJECTPROPERTYEX
TableFulltextPopulateStatus Der Auffüllungsstatus einer Volltexttabelle. OBJECTPROPERTYEX
TableHasActiveFulltextIndex Gibt an, ob eine Tabelle über einen aktiven Volltextindex verfügt. OBJECTPROPERTYEX

Abrufen von Informationen zur Volltextschlüsselspalte

Normalerweise müssen die Ergebnisse von CONTAINSTABLE- oder FREETEXTTABLE-Rowsetwertfunktionen mit der Basistabelle verknüpft werden. In solchen Fällen müssen Sie den Namen der eindeutigen Schlüsselspalte kennen. Sie können abfragen, ob ein bestimmter eindeutiger Index als Volltextschlüssel verwendet wird, und anschließend den Bezeichner der Volltextschlüsselspalte abrufen.

Überprüfen, ob ein bestimmter eindeutiger Index als Volltextschlüsselspalte verwendet wird

Verwenden Sie eine SELECT-Anweisung, um die INDEXPROPERTY-Funktion aufzurufen. Verwenden Sie im Funktionsaufruf die OBJECT_ID-Funktion, um den Namen der Tabelle (table_name) in die Tabellen-ID zu konvertieren, den Namen eines eindeutigen Indexes für die Tabelle anzugeben und die IsFulltextKey-Indexeigenschaft wie folgt anzugeben:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name',  'IsFulltextKey');

Diese Anweisung gibt 1 zurück, wenn der Index verwendet wird, um die Eindeutigkeit der Volltextschlüsselspalte und 0 zu erzwingen, wenn dies nicht der Fall ist.

Beispiel

Im folgenden Beispiel wird abgefragt, ob der PK_Document_DocumentNode -Index zum Erzwingen der Eindeutigkeit der Volltextschlüsselspalte verwendet wird:

USE AdventureWorks2022;
GO
SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode',  'IsFulltextKey');

Dieses Beispiel gibt den Wert 1 zurück, wenn der PK_Document_DocumentNode -Index verwendet wird, um die Eindeutigkeit der Volltextschlüsselspalte zu erzwingen. Andernfalls wird 0 oder NULL zurückgegeben. NULL impliziert, dass Sie einen ungültigen Indexnamen verwenden, der Indexname nicht der Tabelle entspricht, die Tabelle ist nicht vorhanden oder so weiter.

Suchen des Bezeichners der Volltextschlüsselspalte

Jede volltextfähige Tabelle verfügt über eine Spalte, die verwendet wird, um eindeutige Zeilen für die Tabelle (die eindeutige Schlüsselspalte) zu erzwingen. Die TableFulltextKeyColumn -Eigenschaft, die mit der OBJECTPROPERTYEX-Funktion ermittelt werden kann, enthält die Spalten-ID der eindeutigen Schlüsselspalte.

Um diesen Bezeichner abzurufen, können Sie mit einer SELECT-Anweisung die OBJECTPROPERTYEX-Funktion aufrufen. Verwenden Sie die OBJECT_ID-Funktion, um den Namen der Tabelle (table_name) in die Tabellen-ID umzuwandeln, und geben Sie die TableFulltextKeyColumn -Eigenschaft wie folgt an:

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn' ) AS 'Column Identifier';

Beispiele

Im folgenden Beispiel wird der Bezeichner der Volltextschlüsselspalte oder NULL zurückgegeben. NULL impliziert, dass Sie einen ungültigen Indexnamen verwenden, der Indexname nicht der Tabelle entspricht, die Tabelle ist nicht vorhanden oder so weiter.

USE AdventureWorks2022;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO

Das folgende Beispiel zeigt, wie der Bezeichner der eindeutigen Schlüsselspalte verwendet werden kann, um den Namen der Spalte zu ermitteln.

USE AdventureWorks2022;
GO

DECLARE @key_column SYSNAME

SET @key_column = COL_NAME(OBJECT_ID('Production.Document'),
   OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn'));

SELECT @key_column AS 'Unique Key Column';
GO

Dieses Beispiel gibt eine Resultsetspalte mit dem Namen Unique Key Columnzurück, die eine einzelne Zeile mit dem Namen der eindeutigen Schlüsselspalte der Document-Tabelle enthält: DocumentNode. Wenn diese Abfrage einen ungültigen Indexnamen enthielt, entspricht der Indexname nicht der Tabelle, die Tabelle ist nicht vorhanden, und so weiter, würde NULL zurückgegeben.

Index varbinary(max) und XML-Spalten

Wenn ein Volltextindex einer varbinary(max)-, varbinary- oder xml -Spalte erstellt wird, kann die Spalte mit den Volltextprädikaten (CONTAINS und FREETEXT) und -funktionen (CONTAINSTABLE und FREETEXTTABLE) wie jede andere volltextindizierte Spalte durchsucht werden.

Indizieren von varbinary(max)- oder varbinary-Daten

In einer einzelnen varbinary(max) - oder varbinary -Spalte können viele Dokumenttypen gespeichert werden. SQL Server unterstützt jeden Dokumenttyp, für den ein Filter installiert und im operativen System verfügbar ist. Der Dokumenttyp jedes Dokuments wird durch die Dateierweiterung des Dokuments identifiziert. Zum Beispiel verwendet die Volltextsuche für die Dateierweiterung .doc den Filter für Microsoft Word-Dokumente. Eine Liste der verfügbaren Dokumenttypen erhalten Sie, indem Sie die sys.fulltext_document_types -Katalogsicht abfragen.

Das Volltextmodul kann vorhandene Filter verwenden, die im Betriebssystem installiert sind. Bevor die Filter, Wörtertrennungen und Wortstammerkennungen des Betriebssystems verwendet werden können, müssen Sie diese in der Serverinstanz laden. Dies wird im Folgenden beschrieben:

EXEC sp_fulltext_service @action = 'load_os_resources', @value = 1;

Zum Erstellen eines Volltextindexes für eine varbinary(max)-Spalte benötigt die Volltext-Engine Zugriff auf die Dateierweiterungen der Dokumente in der varbinary(max)-Spalte. Diese Informationen müssen in einer Tabellenspalte, der so genannten Typspalte, gespeichert werden. Die Spalte muss der varbinary(max) -Spalte im Volltextindex zugeordnet sein. Beim Indizieren eines Dokuments verwendet die Volltext-Engine die Dateierweiterung in der Typspalte, um den richtigen Filter zu ermitteln.

XML-Indexdaten

In einer xml -Datentypspalte werden ausschließlich XML-Dokumente und -Fragmente gespeichert. Für die Dokumente wird immer der XML-Filter verwendet. Ein Typspalte ist daher nicht erforderlich. Bei xml -Spalten indiziert der Volltextindex den Inhalt der XML-Elemente und ignoriert die XML-Markups. 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 zum Indizieren und Abfragen einer xml-Spalte finden Sie unter Verwenden der Volltextsuche mit XML-Spalten.

Deaktivieren oder erneutes Aktivieren der Volltextindizierung für eine Tabelle

In SQL Server sind alle vom Benutzer erstellten Datenbanken standardmäßig Volltext aktiviert. Zudem wird eine einzelne Tabelle automatisch für die Volltextindizierung aktiviert, sobald ein Volltextindex für die Tabelle erstellt wird und dem Index eine Spalte hinzugefügt wird. Eine Tabelle wird für die Volltextindizierung automatisch deaktiviert, wenn die letzte Spalte aus dem Volltextindex der Tabelle entfernt wird.

In einer Tabelle mit einem Volltextindex können Sie eine Tabelle für die Volltextindizierung mithilfe von SQL Server Management Studio manuell deaktivieren oder erneut aktivieren.

  1. Erweitern Sie die Servergruppe, erweitern Sie Datenbanken, und erweitern Sie die Datenbank, die die Tabelle enthält, die für Volltextindizierung aktiviert werden soll.

  2. Erweitern Sie Tabellen, und klicken Sie mit der rechten Maustaste auf die Tabelle, die Sie deaktivieren oder für Volltextindizierung erneut aktivieren möchten.

  3. Wählen Sie "Volltextindex" und dann "Volltextindex deaktivieren" oder "Volltextindex aktivieren" aus.

Entfernen eines Volltextindexes aus einer Tabelle

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle mit dem Volltextindex, den Sie löschen möchten

  2. Wählen Sie Volltextindex löschenaus.

  3. Wenn Sie dazu aufgefordert werden, wählen Sie "OK" aus, um zu bestätigen, dass Sie den Volltextindex löschen möchten.

Nächste Schritte