Volltextsuche (SQL Server)

Mit der Volltextsuche in SQL Server können von Benutzern und Anwendungen Volltextabfragen für zeichenbasierte Daten in SQL Server-Tabellen ausgeführt werden. Bevor Sie Volltextabfragen für eine bestimmte Tabelle ausführen können, muss der Datenbankadministrator einen Volltextindex für die Tabelle erstellen. Der Volltextindex umfasst eine oder mehrere zeichenbasierte Spalten der Tabelle. Diese Spalten können jeden der folgenden Datentypen aufweisen: char, varchar, nchar, nvarchar, text, ntext, image, xml oder varbinary(max) und FILESTREAM. Jeder Volltextindex indiziert mindestens eine Spalte aus der Basistabelle. Für jede Spalte kann hierbei eine eigene Sprache verwendet werden.

Volltextabfragen führen linguistische Suchvorgänge für Textdaten in Volltextindizes durch. Dabei werden Wörter und Ausdrücke anhand von Regeln einer bestimmten Sprache (z. B. Englisch oder Japanisch) verarbeitet. Volltextabfragen können einfache Wörter und Ausdrücke oder mehrere Formen eines Worts bzw. Ausdrucks enthalten. Eine Volltextabfrage gibt alle Dokumente zurück, die mindestens eine Übereinstimmung (auch als Treffer bezeichnet) enthalten. Eine Übereinstimmung wird gefunden, wenn ein Zieldokument alle in der Volltextabfrage angegebenen Begriffe enthält und alle sonstigen Suchbedingungen erfüllt sind, z. B. der Abstand zwischen den übereinstimmenden Begriffen.

HinweisHinweis

Die Volltextsuche ist eine optionale Komponente des SQL Server-Datenbankmoduls. Weitere Informationen finden Sie unter Installieren von SQL Server 2012.

In diesem Thema

  • Was ist mit der Volltextsuche alles möglich?

    • Volltextsuchabfragen

    • Vergleichen von LIKE und der Volltextsuche

  • Komponenten und Architektur der Volltextsuche

    • SQL Server-Prozess

    • Filterdaemon-Hostprozess

  • Verarbeitung der Volltextsuche

    • Der Vorgang der Volltextindizierung

    • Der Vorgang der Volltextabfrage

  • Linguistische Komponenten und Sprachunterstützung in Volltextsuche

  • Verwandte Tasks

  • Verwandte Inhalte

Was ist mit der Volltextsuche alles möglich?

Die Volltextsuche kann in einer breiten Palette von Geschäftsszenarios verwendet werden: z. B. im e-Business mit dem Suchen nach Elementen auf einer Website, in Anwaltskanzleien mit dem Suchen nach Fallverläufen in einem Rechtsdatenrepository oder in Personalabteilungen beim Vergleichen von Arbeitsplatzbeschreibungen mit gespeicherten Lebensläufen. Die grundlegenden Administrator- und Entwicklungsaufgaben der Volltextsuche bleiben unabhängig vom Geschäftsszenario unverändert. In einem bestimmten Geschäftsszenario können Volltextindex und Abfragen jedoch verfeinert werden, um die Geschäftsziele zu erreichen. In einem e-Business kann das Maximieren der Leistung beispielsweise wichtiger als das Ordnen von Ergebnissen, die Rückrufgenauigkeit (die Anzahl der tatsächlich von einer Volltextabfrage zurückgegebenen vorhandenen Übereinstimmungen) oder die Unterstützung mehrerer Sprachen sein. Für eine Anwaltskanzlei hingegen kann die Rückgabe jedes möglichen Treffers (der Gesamtrückruf von Informationen) der wichtigste Aspekt sein.

[Nach oben]

Volltextsuchabfragen

Nachdem einem Volltextindex Spalten hinzugefügt wurden, können Benutzer und Anwendungen Volltextabfragen zum Text in diesen Spalten ausführen. Bei diesen Abfragen kann nach Folgendem gesucht werden:

  • Mindestens ein Wort oder Ausdruck (einfacher Begriff)

  • Ein Wort oder Ausdruck, bei dem die Wörter mit dem angegebenen Text beginnen (Präfixbegriff)

  • Flexionsformen eines bestimmten Worts (Generierungsbegriff)

  • Ein Wort oder Ausdruck in der Nähe eines anderen Worts oder Ausdrucks (NEAR-Begriff)

  • Synonyme Formen eines bestimmten Worts (Thesaurus).

  • Wörter oder Ausdrücke mit gewichteten Werten (gewichteter Begriff)

Bei Volltextabfragen wird die Groß- und Kleinschreibung nicht beachtet. Wenn Sie beispielsweise nach "Aluminium" oder "aluminium" suchen, werden dieselben Ergebnisse zurückgegeben.

Volltextabfragen verwenden eine geringe Anzahl von Transact-SQL-Prädikaten (CONTAINS und FREETEXT) und -Funktionen (CONTAINSTABLE und FREETEXTTABLE). Die Suchziele des jeweiligen Geschäftsszenarios beeinflussen jedoch die Struktur von Volltextabfragen. Beispiele:

  • e-Business – Suchen nach einem Produkt auf einer Website:

    SELECT product_id FROM products WHERE CONTAINS(product_description, ”Snap Happy 100EZ” OR FORMSOF(THESAURUS,’Snap Happy’) OR ‘100EZ’) AND product_cost<200 …
    
  • Einstellungsszenario – Suchen nach Jobkandidaten, die bereits mit SQL Server gearbeitet haben:

    SELECT candidate_name,SSN FROM candidates WHERE CONTAINS(candidate_resume,”SQL Server”) AND candidate_division =DBA
    

Weitere Informationen finden Sie unter Abfragen mit Volltextsuche.

[Nach oben]

Vergleichen von LIKE und der Volltextsuche

Im Gegensatz zur Volltextsuche verarbeitet das LIKE-Transact-SQL-Prädikat ausschließlich Zeichenmuster. Darüber hinaus können Sie mit dem LIKE-Prädikat keine formatierten Binärdaten abfragen. Eine LIKE-Abfrage in umfangreichen unstrukturierten Textdaten ist sehr viel langsamer als eine entsprechende Volltextabfrage in denselben Daten. Eine LIKE-Abfrage für Millionen von Zeilen von Textdaten kann Minuten in Anspruch nehmen; eine Volltextabfrage kann dagegen in Sekunden oder weniger für dieselben Daten ein Ergebnis liefern, je nach Anzahl der zurückgegebenen Zeilen.

[Nach oben]

Komponenten und Architektur der Volltextsuche

Die Architektur der Volltextsuche besteht aus den folgenden Prozessen:

  • Dem SQL Server-Prozess (sqlservr.exe)

  • Dem Filterdaemon-Hostprozess (fdhost.exe)

    Aus Sicherheitsgründen werden Filter von separaten Prozessen geladen, die als Filterdaemonhosts bezeichnet werden. Die fdhost.exe-Prozesse werden von einem FDHOST-Startprogrammdienst (MSSQLFDLauncher) erstellt und unter den Sicherheitsanmeldeinformationen des FDHOST-Startprogrammdiensts ausgeführt. Daher muss der FDHOST-Startprogrammdienst ausgeführt werden, damit die Volltextindizierung und Volltextabfragen funktionieren. Informationen zum Festlegen des Dienstkontos für diesen Dienst finden Sie unter Festlegen des Dienstkontos für das Startprogramm des Volltextfilterdaemon.

Diese beiden Prozesse enthalten die Komponenten, aus denen die Architektur der Volltextsuche besteht. Die Komponenten und ihre Beziehungen sind in der folgenden Abbildung zusammengefasst. Auf die Abbildung folgt eine Beschreibung der Komponenten.

Architektur der Volltextsuche

[Nach oben]

SQL Server-Prozess

Für den SQL Server-Prozess werden die folgenden Komponenten für die Volltextsuche verwendet:

  • Benutzertabellen Diese Tabellen enthalten die Daten, für die ein Volltextindex erstellt werden soll.

  • Volltext-Gatherer Der Volltext-Gatherer verwendet die Volltextdurchforstungsthreads. Er ist für das Planen und Antreiben der Auffüllung von Volltextindizes sowie für das Überwachen von Volltextkatalogen verantwortlich.

  • Thesaurusdateien Diese Dateien enthalten Synonyme von Suchbegriffen. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Thesaurusdateien für die Volltextsuche.

  • Stopplistenobjekte Stopplistenobjekte enthalten eine Liste häufig auftretender Wörter, die nicht nützlich für die Suche sind. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Stoppwörtern und Stopplisten für Volltextsuche.

  • SQL Server Abfrageprozessor Der Abfrageprozessor kompiliert SQL-Abfragen und führt diese aus. Wenn eine SQL-Abfrage eine Volltextsuchabfrage enthält, wird die Abfrage sowohl während der Kompilierung als auch während der Ausführung an das Volltextsuchmodul gesendet. Das Abfrageergebnis wird mit dem Volltextindex verglichen.

  • Volltextmodul Das Volltextmodul in SQL Server ist vollständig in den Abfrageprozessor integriert. Das Volltextmodul kompiliert Volltextabfragen und führt diese aus. Im Rahmen der Abfrageausführung empfängt das Volltextsuchmodul möglicherweise Eingaben vom Thesaurus und von der Stoppliste.

  • Indexschreiber (Indexer) Der Indexschreiber erstellt die Struktur, die zum Speichern der indizierten Token verwendet wird.

  • Filterdaemon-Manager Der Filterdaemon-Manager ist für die Überwachung des Status des Filterdaemonhosts des Volltextsuchmoduls verantwortlich.

[Nach oben]

Filterdaemon-Hostprozess

Der Filterdaemonhost ist ein Prozess, der vom Volltextsuchmodul gestartet wird. Er führt die folgenden Komponenten der Volltextsuche aus, die für den Zugriff auf, die Filterung von und die Wörtertrennung für Daten aus Tabellen sowie für die Wörtertrennung und Wortstammerkennung für Abfrageeingaben verantwortlich sind.

Der Filterdaemonhost umfasst die folgenden Komponenten:

  • Protokollhandler Diese Komponente ruft die Daten aus dem Arbeitsspeicher zur weiteren Verarbeitung ab und greift auf Daten aus einer Benutzertabelle in einer angegebenen Datenbank zu. Zu ihren Aufgaben gehört das Erfassen von Daten aus den volltextindizierten Spalten sowie deren Übergabe an den Filterdaemonhost, der bei Bedarf die Filterung und die Wörtertrennung anwendet.

  • Filter. Bei einigen Datentypen ist eine Filterung erforderlich, bevor die Daten in einem Dokument volltextindiziert werden können. Dazu zählen Daten in varbinary-, varbinary(max)-, image- oder xml-Spalten. Welcher Filter für ein bestimmtes Dokument verwendet wird, ist vom Dokumenttyp abhängig. Beispielsweise werden für Microsoft Word-Dokumente (DOC), Microsoft Excel-Dokumente (XLS) und XML-Dokumente unterschiedliche Filter verwendet. Anschließend extrahiert der Filter Textabschnitte aus dem Dokument. Dabei werden eingebettete Formatierungen entfernt, der Text und ggf. Informationen über seine Position werden beibehalten. Das Ergebnis ist ein Datenstrom von Textinformationen. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Filtern für die Suche.

  • Wörtertrennung und Wortstammerkennung Die Wörtertrennung ist eine sprachspezifische Komponente, die anhand von lexikalischen Regeln einer bestimmten Sprache Wortgrenzen erkennt (Wörtertrennung). Jede Wörtertrennung ist einer sprachspezifischen Wortstammerkennungskomponente zugeordnet, die Verben konjugiert und flektierende Erweiterungen vornimmt. Bei der Indizierung verwendet der Filterdaemonhost die Wörtertrennung und die Wortstammerkennung, um eine linguistische Analyse der Textdaten aus einer angegebenen Tabellenspalte durchzuführen. Die Sprache, die einer Tabellenspalte im Volltextindex zugeordnet ist, bestimmt, welche Wörtertrennung und Wortstammerkennung zum Indizieren der Spalte verwendet wird. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Wörtertrennungen und Wortstammerkennungen für die Suche.

[Nach oben]

Verarbeitung der Volltextsuche

Die Volltextsuche beruht auf dem Volltextmodul. Das Volltextmodul erfüllt zwei Funktionen: Unterstützung der Indizierung und Unterstützung von Abfragen.

Der Vorgang der Volltextindizierung

Wenn eine Volltextauffüllung (auch als "Durchforstung" bezeichnet) initiiert wird, werden vom Volltextmodul große Batches von Daten in den Arbeitsspeicher geladen, und der Filterdaemonhost wird benachrichtigt. Der Host führt Filterung und Wörtertrennung aus und konvertiert die Daten in invertierte Wortlisten. Die konvertierten Daten werden dann von der Volltextsuche aus den Wortlisten abgerufen, Stoppwörter werden entfernt, und die Wortlisten werden für einen Batch in einem oder mehreren invertierten Indizes gespeichert.

Sind die Indizierungsdaten in einer varbinary(max)- oder image-Spalte gespeichert, extrahiert der Filter, der die IFilter-Schnittstelle implementiert, Text basierend auf dem angegebenen Dateiformat für diese Daten (z. B. Microsoft Word). In manchen Fällen erfordern die Filterkomponenten, dass die varbinary(max)- oder image-Daten statt in den Arbeitsspeicher in den Filterdatenordner geschrieben werden.

Im Rahmen der Verarbeitung durchlaufen die gesammelten Textdaten eine Wörtertrennung, die den Text in einzelne Token oder Schlüsselwörter zerlegt. Die Sprache für die Zerlegung in Token wird auf Spaltenebene angegeben oder kann in varbinary(max)-, image- oder xml-Daten durch die Filterkomponente identifiziert werden.

Unter Umständen werden weitere Verarbeitungsschritte ausgeführt, um Stoppwörter zu entfernen und Token zu normalisieren, bevor sie im Volltextindex oder einem Indexfragment gespeichert werden.

Nach dem Ende einer Auffüllung wird ein abschließender Mergeprozess ausgelöst, der die Indexfragmente zu einem Mastervolltextindex zusammenführt. Dies ermöglicht eine verbesserte Abfrageleistung, da statt mehrerer Indexfragmente nur der Masterindex abgefragt werden muss. Zudem können bessere Bewertungsstatistiken zum Erstellen der Relevanzrangfolge verwendet werden.

[Nach oben]

Der Vorgang der Volltextabfrage

Der Abfrageprozessor übergibt die Volltextteile einer Abfrage zur Verarbeitung an das Volltextmodul. Das Volltextmodul führt Worttrennungen sowie optional Thesauruserweiterungen, Wortstammerkennung und Stoppwort-/Füllwortverarbeitung durch. Die Volltextteile der Abfrage werden dann in Form von SQL-Operatoren dargestellt, vorrangig als Streaming-Tabellenwertfunktionen. Während der Abfrageausführung greifen diese Streaming-Tabellenwertfunktionen auf den invertierten Index zu, um die richtigen Ergebnisse abzurufen. Die Ergebnisse werden entweder zu diesem Zeitpunkt an den Client zurückgegeben oder vor der Rückgabe an den Client weiter verarbeitet.

[Nach oben]

Linguistische Komponenten und Sprachunterstützung in Volltextsuche

Die Volltextsuche unterstützt fast 50 verschiedene Sprachen, z. B. Englisch, Spanisch, Chinesisch, Japanisch, Arabisch, Bangla und Hindi. Eine vollständige Liste der unterstützten und Volltextsprachen finden Sie unter sys.fulltext_languages (Transact-SQL). Jeder Spalte, die im Volltextindex enthalten ist, ist ein Microsoft Windows-Gebietsschemabezeichner (LCID) zugeordnet, der einer von der Volltextsuche unterstützten Sprache entspricht. Der LCID 1033 entspricht beispielsweise US-Englisch, und der LCID 2057 steht für britisches Englisch. Für jede unterstützte Volltextsprache bietet SQL Server linguistische Komponenten, die die Indizierung und Abfrage von in dieser Sprache gespeicherten Volltextdaten unterstützen.

Sprachspezifische Komponenten umfassen Folgendes:

  • Wörtertrennung und Wortstammerkennung Die Wörtertrennung erkennt Wortgrenzen anhand der lexikalischen Regeln einer bestimmten Sprache (Wörtertrennung). Jeder Wörtertrennung ist eine Wortstammerkennung zugeordnet, die Verben für diese Sprache konjugiert. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Wörtertrennungen und Wortstammerkennungen für die Suche.

  • Stopplisten Es ist eine Systemstoppliste verfügbar, die eine Reihe grundlegender Stoppwörter (Füllwörter) enthält. Ein Stoppwort ist ein Wort, das nicht zur Suche beiträgt und in Volltextabfragen ignoriert wird. Im deutschen Gebietsschema werden beispielsweise Wörter wie "ein", "und", "ist" und "der/die/das" als Stoppwörter betrachtet. In der Regel müssen Sie eine oder mehrere Thesaurusdateien und Stopplisten konfigurieren. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Stoppwörtern und Stopplisten für Volltextsuche.

  • Thesaurusdateien SQL Server installiert außerdem eine Thesaurusdatei für jede Volltextsprache sowie eine globale Thesaurusdatei. Die installierten Thesaurusdateien sind im Wesentlichen leer, Sie können sie jedoch so bearbeiten, dass sie Synonyme für eine bestimmte Sprache oder Geschäftsszenarien definieren. Indem Sie einen Thesaurus entwickeln, der genau auf Ihre Volltextdaten abgestimmt ist, können Sie den Bereich der Volltextabfragen für diese Daten effektiv erweitern. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Thesaurusdateien für die Volltextsuche.

  • Filter (iFilters) Die Indizierung eines Dokuments in einer Spalte mit dem Datentyp varbinary(max), image oder xml erfordert einen Filter für die Ausführung zusätzlicher Verarbeitungsschritte. Der Filter muss für den Dokumenttyp spezifisch sein (DOC, PDF, XLS, XML und so weiter). Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Filtern für die Suche.

Wörtertrennung (und Wortstammerkennung) sowie Filter werden im Filterdaemon-Hostprozess (fdhost.exe) ausgeführt.

[Nach oben]

Verwandte Aufgaben

[Nach oben]

Verwandte Inhalte

[Nach oben]