Erstellen und Verwalten von Volltextindizes

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

Dieser Artikel beschreibt, wie man Volltextindizes in der SQL Server-Datenbank-Engine erstellt, ausfüllt und verwaltet. Ein Volltextindex unterstützt die Suche nach Schlüsselworten und Sprachen über zeichenbasierte Spalten in einer Tabelle.

Erstellen eines Volltextkatalogs

Bevor Sie einen Volltextindex erstellen können, benötigen Sie einen Volltextkatalog. Der Katalog ist ein virtueller Container für ein oder mehrere Volltextindizes. Weitere Informationen finden Sie unter Erstellen und verwalten Full-Text Kataloge.

Erstellen, Ändern oder Löschen 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 Befü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 Gibt eine Zeile für jeden Verweis zwischen Volltextkatalog und Volltextindex zurück.
sys.fulltext_index_columns Enthält eine Zeile für jede Spalte, die Teil eines Volltextindexes ist.
sys.fulltext_index_fragments Ein Volltextindex verwendet interne Tabellen, sogenannte Volltextindexfragmente, um die invertierten Indexdaten zu speichern. Sie können diese Ansicht verwenden, um die Metadaten dieser Fragmente abzufragen. Diese Sicht enthält eine Zeile für jedes Volltextindexfragment in jeder Tabelle, die einen Volltextindex enthält.
sys.fulltext_indexes Enthält eine Zeile pro Volltextindex eines Tabellenobjekts.
sys.dm_fts_index_keywords Gibt Informationen zum Inhalt eines Volltextindex für die angegebene Tabelle zurück.
sys.dm_fts_index_keywords_by_document 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 Gibt Informationen zu den aktuell ausgeführten Volltextindexauffüllungen zurück.

Anzeigen von 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 in 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, für die der Volltextindex definiert ist. Wählen Sie Volltextindex, und klicken Sie dann im Kontextmenü Volltextindex auf Eigenschaften. Diese Aktion öffnet das Dialogfeld Eigenschaften des Volltextindexes .

  5. Im Seitenauswahlfenster wählen Sie eine der folgenden Seiten aus:

    Seite Beschreibung
    Allgemein Zeigt die grundlegenden Eigenschaften des Volltextindex an. Diese Eigenschaften umfassen mehrere veränderbare Eigenschaften und viele unveränderliche Eigenschaften wie Datenbanknamen, Tabellenname und den Namen der Volltextschlüsselspalte. Die änderbaren Eigenschaften lauten:

    Volltextindex-Stoppliste

    Volltextindizierung aktiviert

    Änderungsnachverfolgung

    Liste der Sucheigenschaften
    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: Nachdem Sie das Dialogfeld Volltextindexeigenschaften geschlossen haben, wird jeder neu erstellte Zeitplan einem SQL Server-Agent-Auftrag zugeordnet (Start Incremental Table Population on database_name.table_name).
  6. Wählen Sie OK aus, um vorgenommene Änderungen zu speichern und das Dialogfeld Volltextindexeigenschaften zu schließen.

Anzeigen der Eigenschaften von indizierten Tabellen und Spalten

Man kann mehrere Transact-SQL Funktionen verwenden, zum Beispiel OBJECTPROPERTYEX, um den Wert verschiedener Volltext-Indexierungseigenschaften zu erhalten. Diese Informationen sind für die Verwaltung und Problembehandlung der Volltextsuche hilfreich.

Die folgende Tabelle listet die Volltexteigenschaften zu indizierten Tabellen und Spalten sowie deren zugehörige Transact-SQL-Funktionen auf.

Eigenschaft Beschreibung Funktion
FullTextTypeColumn TYPE COLUMN in der Tabelle, die die Informationen zum Dokumenttyp der Spalte enthält. COLUMNPROPERTY
IsFulltextIndexed Spezifiziert, ob eine Spalte für die Volltextindexierung aktiviert ist. 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 von Zeilen, für die die Volltextsuche keinen Index erstellt 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

Informationen zur Volltextschlüsselspalte abrufen

Typischerweise verknüpft man das Ergebnis von CONTAINSTABLE oder FREETEXTTABLE zeilenwertigen Funktionen mit der Basistabelle. In solchen Fällen müssen Sie den Namen der eindeutigen Schlüsselspalte kennen. Man kann prüfen, ob ein bestimmter eindeutiger Index als Volltextschlüssel verwendet wird, und die Identifikatorin der Volltextschlüsselspalte erhalten.

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

Verwenden Sie eine SELECT-Anweisung, um die INDEXPROPERTY-Funktion aufzurufen. Im Funktionsaufruf verwenden Sie die OBJECT_ID Funktion, um den Namen der Tabelle (table_name) in die Tabellen-ID umzuwandeln, geben Sie den Namen eines eindeutigen Index für die Tabelle an und geben Sie die IsFulltextKey-Indexeigenschaft wie folgt an:

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

Diese Anweisung gibt 1 zurück, wenn der Index die Eindeutigkeit für die Volltext-Schlüsselspalte erzwingt, und 0, wenn dies nicht der Fall ist.

Beispiel

Das folgende Beispiel prüft, ob der PK_Document_DocumentNode Index die Eindeutigkeit für die Volltextschlüsselspalte erzwingt:

USE AdventureWorks2025;
GO

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

Dieses Beispiel gibt 1 zurück, wenn der PK_Document_DocumentNode Index die Eindeutigkeit für die Volltextschlüsselspalte erzwingt. Andernfalls gibt es 0 oder NULLzurück. NULL Das bedeutet, dass du einen ungültigen Indexnamen benutzt, der Indexname nicht mit der Tabelle übereinstimmt, die Tabelle nicht existiert und so weiter.

Suchen Sie den Bezeichner der Volltext-Schlüsselspalte

Jede Volltext-fähige Tabelle hat eine Spalte, die eindeutige Zeilen für die Tabelle erzwingt (die eindeutige Schlüsselspalte). Die TableFulltextKeyColumn Eigenschaft, die aus der OBJECTPROPERTYEX Funktion gewonnen wird, enthält die Spalten-ID der eindeutigen Schlüsselspalte.

Um diese Identifikatorin zu erhalten, verwenden Sie eine SELECT Anweisung, die die OBJECTPROPERTYEX Funktion aufruft. Verwenden Sie die Funktion OBJECT_ID , um den Namen der Tabelle (table_name) in die Tabellen-ID umzuwandeln und die TableFulltextKeyColumn Eigenschaft wie folgt anzugeben:

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

Beispiele

Das folgende Beispiel gibt den Bezeichner der Volltextschlüsselspalte oder NULL zurück. NULL bedeutet, dass du einen ungültigen Indexnamen benutzt, der Indexname nicht zur Tabelle passt, die Tabelle nicht existiert usw.

USE AdventureWorks2025;
GO

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

Das folgende Beispiel zeigt, wie man die Identifikatorin der eindeutigen Schlüsselspalte verwendet, um den Namen der Spalte zu erhalten.

USE AdventureWorks2025;
GO

DECLARE @key_column AS 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 Ergebnismengenspalte mit dem Namen Unique Key Column zurück, die eine einzelne Zeile mit dem Namen der eindeutigen Schlüsselspalte der Tabelle Document, DocumentNode, anzeigt. Wenn diese Abfrage einen ungültigen Indexnamen enthielt, der Indexname nicht der Tabelle entsprach, die Tabelle nicht existierte und so weiter, gibt sie zurück.NULL

Indizierung von varbinary(max)- und XML-Spalten

Wenn Sie für eine varbinary(max)-, varbinary- oder xml-Spalte einen Volltextindex erstellen, können Sie sie wie jede andere volltextindizierte Spalte mithilfe der Volltextprädikate (CONTAINS und FREETEXT) und Funktionen (CONTAINSTABLE und FREETEXTTABLE) abfragen.

Indizieren von varbinary(max)- oder varbinary-Daten

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

Beachten Sie, dass die Volltext-Engine vorhandene Filter nutzen kann, die im Betriebssystem installiert sind. Bevor die Filter, Wörtertrennungen und Stemmer des Betriebssystems verwendet werden können, müssen Sie diese wie folgt in der Serverinstanz laden:

EXECUTE 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. Sie müssen diese Informationen in einer Tabellenspalte, einer sogenannten Typspalte, speichern, die Sie mit der varbinären (max)- Spalte im Volltextindex verknüpfen. Beim Indizieren eines Dokuments verwendet die Volltext-Engine die Dateierweiterung in der Typspalte, um den richtigen Filter zu ermitteln.

Indizieren von XML-Daten

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 zur Indexierung und Abfrage einer XML-Spalte finden Sie unter Volltextsuche mit XML-Spalten.

Deaktivieren oder Reaktivieren der Volltextindizierung für eine Tabelle

In der Datenbank-Engine sind alle vom Benutzer erstellten Datenbanken standardmäßig mit 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 Volltextindex können Sie eine Tabelle manuell deaktivieren oder wieder aktivieren, indem Sie SQL Server Management Studio verwenden.

  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 Volltextindexaus, und klicken Sie anschließend auf Volltextindizierung deaktivieren oder Volltextindizierung aktivieren.

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. Klicken Sie auf OK , wenn Sie aufgefordert werden, das Löschen des Volltextindexes zu bestätigen.