Freigeben über


Erste Schritte mit der Suchfunktion Full-Text

Datenbanken in SQL Server sind standardmäßig volltextfähig. Um jedoch einen Volltextindex für eine Tabelle zu verwenden, müssen Sie die Volltextindizierungsfunktion für die Spalten der Tabellen einrichten, auf die Sie mithilfe des Full-Text Moduls zugreifen möchten.

Konfigurieren von Datenbanken zur Full-Text-Suche

Für jedes Szenario führt ein Datenbankadministrator die folgenden grundlegenden Schritte aus, um Tabellenspalten in einer Datenbank für die Volltextsuche zu konfigurieren:

  1. Erstellen Sie einen Volltextkatalog.

  2. Erstellen Sie in jeder Tabelle, die Sie durchsuchen möchten, einen Volltextindex nach:

    1. Identifizieren Sie die einzelnen Textspalten, die Sie in den Volltextindex aufnehmen möchten.

    2. Wenn eine bestimmte Spalte Dokumente enthält, die als Binärdaten (varbinary(max)oder image Daten) gespeichert sind, müssen Sie eine Tabellenspalte (die Typspalte) angeben, die den Typ jedes Dokuments in der Spalte identifiziert, die indiziert wird.

    3. Geben Sie die Sprache an, die die Volltextsuche für die Dokumente in der Spalte verwenden soll.

    4. Wählen Sie den Änderungsnachverfolgungsmechanismus aus, den Sie für den Volltextindex verwenden möchten, um Änderungen in der Basistabelle und deren Spalten nachzuverfolgen.

Die Volltextsuche unterstützt mehrere Sprachen durch die Verwendung der folgenden sprachlichen Komponenten: Worttrenner und Stemmer, Stopplisten mit Stopwörtern (auch als Füllwörter bekannt) und Thesaurusdateien. Thesaurusdateien und in einigen Fällen erfordern Stopplisten eine Konfiguration durch einen Datenbankadministrator. Eine bestimmte Thesaurusdatei unterstützt alle Volltextindizes, die die entsprechende Sprache verwenden, und eine bestimmte Stoppliste kann beliebig vielen Volltextindizes zugeordnet werden.

Einrichten eines Full-Text Katalogs und Indexes

Dazu gehören die folgenden grundlegenden Schritte:

  1. Erstellen Sie einen Volltextkatalog zum Speichern von Volltextindizes.

    Jeder Volltextindex muss zu einem Volltextkatalog gehören. Sie können einen separaten Textkatalog für jeden Volltextindex erstellen oder mehrere Volltextindizes einem bestimmten Katalog zuordnen. Ein Volltextkatalog ist ein virtuelles Objekt und gehört nicht zu einer Dateigruppe. Der Katalog ist ein logisches Konzept, das sich auf eine Gruppe von Volltextindizes bezieht.

  2. Erstellen Sie einen Volltextindex in der Tabellen- oder indizierten Ansicht.

    Ein Volltextindex ist ein spezieller Typ tokenbasierter Funktionsindex, der vom Full-Text Modul erstellt und verwaltet wird. Um die Volltextsuche in einer Tabelle oder Ansicht zu erstellen, muss sie über einen eindeutigen, einspaltigen, nicht nullfähigen Index verfügen. Das Full-Text Modul erfordert diesen eindeutigen Index, um jede Zeile in der Tabelle einem eindeutigen, komprimierbaren Schlüssel zuzuordnen. Ein Volltextindex kann char, , varchar, ncharnvarchar, , text, ntext, image, xml, und varbinaryvarbinary(max) Spalten enthalten. Weitere Informationen finden Sie unter Erstellen und Verwalten von Full-Text Indizes.

Bevor Sie wissen, wie Volltextindizes erstellt werden, ist es wichtig zu berücksichtigen, wie sie sich von regulären SQL Server-Indizes unterscheiden. In der folgenden Tabelle sind die Unterschiede aufgeführt.

Volltextindizes Reguläre SQL Server-Indizes
Pro Tabelle ist nur ein Volltextindex zulässig. Pro Tabelle sind mehrere reguläre Indizes zulässig.
Das Hinzufügen von Daten zu Volltextindizes, die als Population bezeichnet werden, kann entweder über einen Zeitplan oder eine bestimmte Anforderung angefordert werden oder automatisch mit dem Hinzufügen neuer Daten erfolgen. Wird automatisch aktualisiert, wenn die Daten, auf denen sie basieren, eingefügt, aktualisiert oder gelöscht werden.
Gruppiert innerhalb derselben Datenbank in einem oder mehreren Volltextkatalogen. Nicht gruppiert.

Auswählen von Optionen für einen Full-Text Index

In diesem Abschnitt wird Folgendes behandelt:

  • Auswählen der Spaltensprache

  • Auswählen einer Dateigruppe für einen Volltextindex

  • Zuweisen des Volltextindex zu einem Volltextkatalog

  • Zuordnen einer Stoppliste zum Volltextindex

  • Aktualisieren eines Volltextindexes

Auswählen der Spaltensprache

Informationen zu Den Dingen, die Sie berücksichtigen sollten, wenn Sie die Spaltensprache auswählen, finden Sie unter "Auswählen einer Sprache beim Erstellen eines Full-Text Index".

Auswählen einer Dateigruppe für einen Full-Text Index

Der Prozess zum Erstellen eines Volltextindexes ist ziemlich intensiv (auf hoher Ebene besteht es aus dem Lesen von Daten aus SQL Server und dem anschließenden Verteilen der gefilterten Daten an den Volltextindex). Suchen Sie als bewährte Methode einen Volltextindex in der Datenbankdateigruppe, die am besten zur Maximierung der E/A-Leistung geeignet ist, oder suchen Sie die Volltextindizes in einer anderen Dateigruppe auf einem anderen Volume.

Wenn Ihnen die Einfache Verwaltung wichtig ist, empfehlen wir, Tabellendaten und alle verbundenen Volltextkataloge in derselben Dateigruppe zu speichern. Manchmal möchten Sie aus Leistungsgründen die Tabellendaten und den Volltextindex in verschiedenen Dateigruppen verwenden, die auf verschiedenen Volumes gespeichert sind, um die E/A-Parallelität zu maximieren.

Zuweisen des Full-Text-Index zu einem Full-Text-Katalog

Es ist wichtig, die Platzierung von Volltextindizes für Tabellen in Volltextkatalogen zu planen.

Es wird empfohlen, Tabellen mit denselben Aktualisierungsmerkmalen (z. B. geringe Anzahl von Änderungen im Vergleich zu einer großen Anzahl von Änderungen oder Tabellen, die sich häufig während einer bestimmten Tageszeit ändern) zusammen unter demselben Volltextkatalog zuzuordnen. Durch das Einrichten von Volltextkatalog-Populationszeitplänen bleiben Volltextindizes synchron mit den Tabellen, ohne die Ressourcennutzung des Datenbankservers während zeiträumen hoher Datenbankaktivitäten zu beeinträchtigen.

Beachten Sie beim Zuweisen einer Tabelle zu einem Volltextkatalog die folgenden Richtlinien:

  • Wählen Sie immer den kleinsten eindeutigen Index aus, der für Ihren eindeutigen Volltextschlüssel verfügbar ist. (Ein 4-Byte-, ganzzahliger Index ist optimal.) Dadurch werden die ressourcen, die vom Microsoft Search-Dienst im Dateisystem benötigt werden, erheblich reduziert. Wenn der Primärschlüssel groß ist (über 100 Byte), sollten Sie einen anderen eindeutigen Index in der Tabelle (oder das Erstellen eines anderen eindeutigen Indexes) als eindeutigen Volltextschlüssel auswählen. Andernfalls kann die Volltextauffüllung nicht fortgesetzt werden, wenn die Größe der eindeutigen Schlüssel die maximal zulässige Größe (900 Byte) überschreitet.

  • Wenn Sie eine Tabelle mit Millionen von Zeilen indizieren, weisen Sie die Tabelle ihrem eigenen Volltextkatalog zu.

  • Berücksichtigen Sie die Anzahl der Änderungen, die in den Tabellen auftreten, die volltextindiziert sind, sowie die Gesamtanzahl der Zeilen. Wenn die Gesamtzahl der zeilen, die geändert werden, zusammen mit der Anzahl der Zeilen in der Tabelle, die während der letzten Volltextgesamtheit vorhanden sind, Millionen von Zeilen darstellt, weisen Sie die Tabelle ihrem eigenen Volltextkatalog zu.

Zuordnen einer Stoppliste zum Full-Text Index

SQL Server 2008 führt Stopplisten ein. Eine Stoppliste ist eine Liste von Stoppwörtern, die auch als Rauschwörter bezeichnet werden. Eine Stoppliste ist jedem Volltextindex zugeordnet, und die Wörter in dieser Stoppliste werden auf Volltextabfragen für diesen Index angewendet. Standardmäßig ist die Systemstoppliste einem neuen Volltextindex zugeordnet. Sie können jedoch stattdessen Ihre eigene Stoppliste erstellen und verwenden. Weitere Informationen finden sie unter Konfigurieren und Verwalten von Stoppwörtern und Stopplisten für Volltextsuche.

Beispielsweise erstellt die folgende CREATE FULLTEXT STOPLISTTransact-SQL-Anweisung eine neue Volltext-Stoppliste namens myStoplist3 durch Kopieren aus der Systemstoppliste:

CREATE FULLTEXT STOPLIST myStoplist FROM SYSTEM STOPLIST;  
GO  

Die folgende ALTER FULLTEXT STOPLISTTransact-SQL-Anweisung ändert eine Stoppliste mit dem Namen myStoplist, wobei das Wort "en" zuerst für Spanisch und dann für Französisch hinzugefügt wird:

ALTER FULLTEXT STOPLIST MyStoplist ADD 'en' LANGUAGE 'Spanish';  
ALTER FULLTEXT STOPLIST MyStoplist ADD 'en' LANGUAGE 'French';  
GO  

Aktualisieren eines Full-Text Index

Wie normale SQL Server-Indizes können Volltextindizes automatisch aktualisiert werden, wenn Daten in den zugehörigen Tabellen geändert werden. Dies ist das Standardverhalten. Alternativ können Sie Die Volltextindizes up-to-datum manuell oder in bestimmten geplanten Intervallen beibehalten. Das Auffüllen eines Volltextindexes kann zeitaufwendig und ressourcenintensiv sein. Daher wird die Indexaktualisierung in der Regel als asynchroner Prozess ausgeführt, der im Hintergrund ausgeführt wird und den Volltextindex nach Änderungen in der Basistabelle auf dem neuesten Stand hält. Das Aktualisieren eines Volltextindexes unmittelbar nach jeder Änderung in der Basistabelle kann ressourcenintensiv sein. Wenn Sie daher eine sehr hohe Aktualisierungs-/Einfüge-/Löschrate haben, kann es zu einer Beeinträchtigung der Abfrageleistung kommen. In diesem Fall sollten Sie manuelle Updates zur Änderungsverfolgung planen, um mit den zahlreichen Änderungen Schritt zu halten, anstatt mit Abfragen für Ressourcen zu konkurrieren.

Verwenden Sie zum Überwachen des Populationsstatus entweder die Funktionen FULLTEXTCATALOGPROPERTY oder OBJECTPROPERTYEX. Führen Sie die folgende Anweisung aus, um den Katalogpopulationsstatus abzurufen:

SELECT FULLTEXTCATALOGPROPERTY('AdvWksDocFTCat', 'Populatestatus');  

Wenn eine vollständige Erhebung in Bearbeitung ist, lautet das zurückgegebene Ergebnis in der Regel 1.

Beispiel: Einrichten der Full-Text-Suche

Im folgenden zweiteiligen Beispiel wird ein Volltextkatalog erstellt, der in der AdventureWorks-Datenbank benannt AdvWksDocFTCat ist, und anschließend wird ein Volltextindex für die Document Tabelle in AdventureWorks2012 erstellt. Diese Anweisung erstellt den Volltextkatalog im Standardverzeichnis, das während des Setups angegeben ist. Der benannte AdvWksDocFTCat Ordner befindet sich im Standardverzeichnis.

  1. Zum Erstellen eines Volltextkatalogs mit dem Namen AdvWksDocFTCatverwendet das Beispiel eine CREATE FULLTEXT CATALOG-Anweisung :

    USE AdventureWorks;  
    GO  
    CREATE FULLTEXT CATALOG AdvWksDocFTCat;  
    
  2. Bevor Sie einen Volltextindex in der Dokumenttabelle erstellen können, stellen Sie sicher, dass die Tabelle über einen eindeutigen, einspaltigen, nicht nullfähigen Index verfügt. Die folgende CREATE INDEX-Anweisung erstellt einen eindeutigen Index in ui_ukDocder DocumentID-Spalte der Dokumenttabelle:

    CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
    
  3. Nachdem Sie über einen eindeutigen Schlüssel verfügen, können Sie einen Volltextindex für die Document Tabelle erstellen, indem Sie die folgende CREATE FULLTEXT INDEX-Anweisung verwenden.

    CREATE FULLTEXT INDEX ON Production.Document  
    (  
        Document                         --Full-text index column name   
            TYPE COLUMN FileExtension    --Name of column that contains file type information  
            Language 2057                 --2057 is the LCID for British English  
    )  
    KEY INDEX ui_ukDoc ON AdvWksDocFTCat --Unique index  
    WITH CHANGE_TRACKING AUTO            --Population type;  
    GO  
    
    

    Die in diesem Beispiel definierte TYPSPALTE gibt die Typspalte in der Tabelle an, die den Typ des Dokuments in jeder Zeile der Spalte "Document" (welche vom binären Typ ist) enthält. Die Typspalte speichert die vom Benutzer bereitgestellte Dateierweiterung ".doc", ".xls", und on-of das Dokument in einer bestimmten Zeile. Das Full-Text Modul verwendet die Dateierweiterung in einer bestimmten Zeile, um den richtigen Filter zum Analysieren der Daten in dieser Zeile aufzurufen. Nachdem der Filter die Binärdaten der Zeile analysiert hat, analysiert der angegebene Worttrenner den Inhalt (in diesem Beispiel wird der Worttrenner für britisches Englisch verwendet). Beachten Sie, dass der Filtervorgang nur zur Indizierungszeit erfolgt oder wenn ein Benutzer eine Spalte in die Basistabelle einfügt oder aktualisiert, während die automatische Änderungsnachverfolgung für den Volltextindex aktiviert ist. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Filtern für die Suche.

Allgemeine Aufgaben

So erstellen Sie einen Full-Text-Katalog

So zeigen Sie die Indizes einer Tabelle (oder Ansicht) an

So erstellen Sie einen eindeutigen Index

So erstellen Sie einen Full-Text Index

Informationen über einen Full-Text Index anzeigen

Katalog- oder dynamische Verwaltungsansicht BESCHREIBUNG
sys.fulltext_index_catalog_usages (Transact-SQL) Gibt eine Zeile für jeden Volltextkatalog zu Volltextindex-Verweis 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 invertierten Indexdaten zu speichern. Diese Ansicht kann verwendet werden, um die Metadaten zu diesen Fragmenten abzufragen. Diese Ansicht 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 tabellarischen Objekts.
sys.dm_fts_index_keywords (Transact-SQL) Gibt Informationen zum Inhalt eines Volltextindexes für die angegebene Tabelle zurück.
sys.dm_fts_index_keywords_by_document (Transact-SQL) Gibt Informationen zum Inhalt auf Dokumentebene eines Volltextindexes für die angegebene Tabelle zurück. Ein bestimmtes Schlüsselwort kann in mehreren Dokumenten angezeigt werden.
sys.dm_fts_index_population (Transact-SQL) Gibt Informationen zu den gerade laufenden Volltextindexpopulationen zurück.

Siehe auch

FULLTEXT-KATALOG ERSTELLEN (Transact-SQL)
ERSTELLEN SIE VOLLSTEXT-INDEX (Transact-SQL)
ERSTELLE VOLLTEXT-AUSSCHLUSSLISTE (Transact-SQL)
Tabelle erstellen (Transact-SQL)
Auffüllen von Volltextindizes
FULLTEXTCATALOGPROPERTY (Transact-SQL)
OBJECTPROPERTYEX (Transact-SQL)