VolltextsucheFull-Text Search

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Mit der Volltextsuche in SQL ServerSQL Server und Azure SQL-DatenbankAzure SQL Database können Benutzer und Anwendungen Volltextabfragen für zeichenbasierte Daten in SQL ServerSQL Server -Tabellen ausführen.Full-Text Search in SQL ServerSQL Server and Azure SQL-DatenbankAzure SQL Database lets users and applications run full-text queries against character-based data in SQL ServerSQL Server tables.

Grundlegende AufgabenBasic tasks

Dieses Thema bietet einen Überblick über die Volltextsuche und beschreibt deren Komponenten und Architektur.This topic provides an overview of Full-Text Search and describes its components and its architecture. Wenn Sie sofort beginnen möchten, finden Sie hier die grundlegenden Aufgaben.If you prefer to get started right away, here are the basic tasks.

Hinweis

Die Volltextsuche ist eine optinale Komponente der SQL ServerSQL Server -Datenbank-Engine.Full-Text Search is an optional component of the SQL ServerSQL Server Database Engine. Wenn Sie bei der Installation von SQL Server nicht die Volltextsuche ausgewählt haben, führen Sie SQL Server-Setup erneut aus, um sie hinzuzufügen.If you didn't select Full-Text Search when you installed SQL Server, run SQL Server Setup again to add it.

ÜbersichtOverview

Ein Volltextindex umfasst eine oder mehrere zeichenbasierte Spalten in einer Tabelle.A full-text index includes one or more character-based columns in a table. Diese Spalten können jeden der folgenden Datentypen aufweisen: char, varchar, nchar, nvarchar, text, ntext, image, xml oder varbinary(max) und FILESTREAM.These columns can have any of the following data types: char, varchar, nchar, nvarchar, text, ntext, image, xml, or varbinary(max) and FILESTREAM. Jeder Volltextindex indiziert mindestens eine Spalte aus der Basistabelle. Für jede Spalte kann hierbei eine eigene Sprache verwendet werden.Each full-text index indexes one or more columns from the table, and each column can use a specific language.

Volltextabfragen führen linguistische Suchvorgänge für Textdaten in Volltextindizes durch. Dabei werden Wörter und Ausdrücke anhand der Regeln einer bestimmten Sprache (z.B. Englisch oder Japanisch) verarbeitet.Full-text queries perform linguistic searches against text data in full-text indexes by operating on words and phrases based on the rules of a particular language such as English or Japanese. Volltextabfragen können einfache Wörter und Ausdrücke oder mehrere Formen eines Worts bzw. Ausdrucks enthalten.Full-text queries can include simple words and phrases or multiple forms of a word or phrase. Eine Volltextabfrage gibt alle Dokumente zurück, die mindestens eine Übereinstimmung (auch als Trefferbezeichnet) enthalten.A full-text query returns any documents that contain at least one match (also known as a hit). 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.A match occurs when a target document contains all the terms specified in the full-text query, and meets any other search conditions, such as the distance between the matching terms.

VolltextsuchabfragenFull-Text Search queries

Nachdem einem Volltextindex Spalten hinzugefügt wurden, können Benutzer und Anwendungen Volltextabfragen zum Text in diesen Spalten ausführen.After columns have been added to a full-text index, users and applications can run full-text queries on the text in the columns. Bei diesen Abfragen kann nach Folgendem gesucht werden:These queries can search for any of the following:

  • Mindestens ein Wort oder Ausdruck (einfacher Begriff)One or more specific words or phrases (simple term)

  • Ein Wort oder Ausdruck, bei dem die Wörter mit dem angegebenen Text beginnen (Präfixbegriff)A word or a phrase where the words begin with specified text (prefix term)

  • Flexionsformen eines bestimmten Worts (Generierungsbegriff)Inflectional forms of a specific word (generation term)

  • Ein Wort oder Ausdruck in der Nähe eines anderen Worts oder Ausdrucks (Näherungsbegriff)A word or phrase close to another word or phrase (proximity term)

  • Synonyme Formen eines bestimmten Worts (Thesaurus)Synonymous forms of a specific word (thesaurus)

  • Wörter oder Ausdrücke mit gewichteten Werten (gewichteter Begriff)Words or phrases using weighted values (weighted term)

Bei Volltextabfragen wird die Groß- und Kleinschreibung nicht beachtet.Full-text queries are not case-sensitive. Wenn Sie beispielsweise nach "Aluminium" oder "aluminium" suchen, werden dieselben Ergebnisse zurückgegeben.For example, searching for "Aluminum" or "aluminum" returns the same results.

Volltextabfragen verwenden eine geringe Anzahl von Transact-SQLTransact-SQL -Prädikaten (CONTAINS und FREETEXT) und -Funktionen (CONTAINSTABLE und FREETEXTTABLE).Full-text queries use a small set of Transact-SQLTransact-SQL predicates (CONTAINS and FREETEXT) and functions (CONTAINSTABLE and FREETEXTTABLE). Die Suchziele des jeweiligen Geschäftsszenarios beeinflussen jedoch die Struktur von Volltextabfragen.However, the search goals of a given business scenario influence the structure of the full-text queries. Beispiel:For example:

  • E-Business: Suchen nach einem Produkt auf einer Website:e-business-searching for a product on a 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 ServerSQL Servergearbeitet haben:Recruitment scenario-searching for job candidates that have experience working with SQL ServerSQL Server:

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

Weitere Informationen finden Sie unter Abfragen mit Volltextsuche.For more information, see Query with Full-Text Search.

Vergleich der Volltextsuchabfragen mit dem LIKE-PrädikatCompare Full-Text Search queries to the LIKE predicate

Im Gegensatz zur Volltextsuche verarbeitet das LIKE Transact-SQLTransact-SQL -Prädikat ausschließlich Zeichenmuster.In contrast to full-text search, the LIKE Transact-SQLTransact-SQL predicate works on character patterns only. Darüber hinaus können Sie mit dem LIKE-Prädikat keine formatierten Binärdaten abfragen.Also, you cannot use the LIKE predicate to query formatted binary data. Eine LIKE-Abfrage in umfangreichen unstrukturierten Textdaten ist sehr viel langsamer als eine entsprechende Volltextabfrage in denselben Daten.Furthermore, a LIKE query against a large amount of unstructured text data is much slower than an equivalent full-text query against the same data. 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.A LIKE query against millions of rows of text data can take minutes to return; whereas a full-text query can take only seconds or less against the same data, depending on the number of rows that are returned.

Architektur der VolltextsucheFull-Text Search architecture

Die Architektur der Volltextsuche besteht aus den folgenden Prozessen:Full-text search architecture consists of the following processes:

  • Dem SQL ServerSQL Server -Prozess (sqlservr.exe)The SQL ServerSQL Server process (sqlservr.exe).

  • Dem Filterdaemon-Hostprozess (fdhost.exe)The filter daemon host process (fdhost.exe).

    Aus Sicherheitsgründen werden Filter von separaten Prozessen geladen, die als Filterdaemonhosts bezeichnet werden.For security reasons, filters are loaded by separate processes called the filter daemon hosts. Die fdhost.exe-Prozesse werden von einem FDHOST-Startprogrammdienst (MSSQLFDLauncher) erstellt und unter den Sicherheitsanmeldeinformationen des FDHOST-Startprogrammdiensts ausgeführt.The fdhost.exe processes are created by an FDHOST launcher service (MSSQLFDLauncher), and they run under the security credentials of the FDHOST launcher service account. Daher muss der FDHOST-Startprogrammdienst ausgeführt werden, damit die Volltextindizierung und Volltextabfragen funktionieren.Therefore, the FDHOST launcher service must be running for full-text indexing and full-text querying to work. Informationen zum Festlegen des Dienstkontos für diesen Dienst finden Sie unter Festlegen des Dienstkontos für das Startprogramm des Volltextfilterdaemons.For information about setting the service account for this service, see Set the Service Account for the Full-text Filter Daemon Launcher.

Diese beiden Prozesse enthalten die Komponenten, aus denen die Architektur der Volltextsuche besteht.These two processes contain the components of the full-text search architecture. Die Komponenten und ihre Beziehungen sind in der folgenden Abbildung zusammengefasst.These components and their relationships are summarized in the following illustration. Auf die Abbildung folgt eine Beschreibung der Komponenten.The components are described after the illustration.

Architektur der Volltextsuchefull-text search architecture

SQL Server-ProzessSQL Server process

Für den SQL ServerSQL Server -Prozess werden die folgenden Komponenten für die Volltextsuche verwendet:The SQL ServerSQL Server process uses the following components for full-text search:

  • BenutzertabellenUser tables. Diese Tabellen enthalten die Daten, für die ein Volltextindex erstellt werden soll.These tables contain the data to be full-text indexed.

  • Volltext-GathererFull-text gatherer. Der Volltext-Gatherer verwendet die Volltextdurchforstungsthreads.The full-text gatherer works with the full-text crawl threads. Er ist für das Planen und Antreiben der Auffüllung von Volltextindizes sowie für das Überwachen von Volltextkatalogen verantwortlich.It is responsible for scheduling and driving the population of full-text indexes, and also for monitoring full-text catalogs.

  • ThesaurusdateienThesaurus files. Diese Dateien enthalten Synonyme von Suchbegriffen.These files contain synonyms of search terms. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Thesaurusdateien für die Volltextsuche.For more information, see Configure and Manage Thesaurus Files for Full-Text Search.

  • StopplistenobjekteStoplist objects. Stopplistenobjekte enthalten eine Liste häufig auftretender Wörter, die nicht nützlich für die Suche sind.Stoplist objects contain a list of common words that are not useful for the search. Weitere Informationen finden sie unter Konfigurieren und Verwalten von Stoppwörtern und Stopplisten für Volltextsuche.For more information, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

  • SQL ServerSQL Server AbfrageprozessorSQL ServerSQL Server query processor. Der Abfrageprozessor kompiliert SQL-Abfragen und führt diese aus.The query processor compiles and executes SQL queries. Wenn eine SQL-Abfrage eine Volltextsuchabfrage enthält, wird die Abfrage sowohl während der Kompilierung als auch während der Ausführung an die Volltextsuch-Engine gesendet.If a SQL query includes a full-text search query, the query is sent to the Full-Text Engine, both during compilation and during execution. Das Abfrageergebnis wird mit dem Volltextindex verglichen.The query result is matched against the full-text index.

  • Volltext-EngineFull-Text Engine. Die Volltext-Engine in SQL ServerSQL Server ist vollständig in den Abfrageprozessor integriert.The Full-Text Engine in SQL ServerSQL Server is fully integrated with the query processor. Die Volltextsuch-Engine kompiliert Volltextabfragen und führt diese aus.The Full-Text Engine compiles and executes full-text queries. Im Rahmen der Abfrageausführung empfängt die Volltextsuch-Engine möglicherweise Eingaben vom Thesaurus und von der Stoppliste.As part of query execution, the Full-Text Engine might receive input from the thesaurus and stoplist.

    Hinweis

    In SQL Server 2008SQL Server 2008 und höheren Versionen befindet sich die Volltext-Engine im SQL ServerSQL Server-Prozess, anstatt in einem separaten Dienst.In SQL Server 2008SQL Server 2008 and later versions, the Full-Text Engine resides in the SQL ServerSQL Server process, rather than in a separate service. Durch die Integration der Volltext-Engine in die Datenbank-Engine konnte die Verwaltbarkeit verbessert und die Leistung bei gemischten Abfragen sowie die Leistung insgesamt optimiert werden.Integrating the Full-Text Engine into the Database Engine improved full-text manageability, optimization of mixed query, and overall performance.

  • Indexschreiber (Indexer)Index writer (indexer). Der Indexschreiber erstellt die Struktur, die zum Speichern der indizierten Token verwendet wird.The index writer builds the structure that is used to store the indexed tokens.

  • Filterdaemon-ManagerFilter daemon manager. Der Filterdaemon-Manager ist für die Überwachung des Status des Filterdaemonhosts der Volltext-Engine verantwortlich.The filter daemon manager is responsible for monitoring the status of the Full-Text Engine filter daemon host.

Filter Daemon Host processFilter Daemon Host process

Der Filterdaemonhost ist ein Prozess, der von der Volltextsuch-Engine gestartet wird.The filter daemon host is a process that is started by the Full-Text Engine. 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.It runs the following full-text search components, which are responsible for accessing, filtering, and word breaking data from tables, as well as for word breaking and stemming the query input.

Der Filterdaemonhost umfasst die folgenden Komponenten:The components of the filter daemon host are as follows:

  • ProtokollhandlerProtocol handler. Diese Komponente ruft die Daten aus dem Arbeitsspeicher zur weiteren Verarbeitung ab und greift auf Daten aus einer Benutzertabelle in einer angegebenen Datenbank zu.This component pulls the data from memory for further processing and accesses data from a user table in a specified database. 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.One of its responsibilities is to gather data from the columns being full-text indexed and pass it to the filter daemon host, which will apply filtering and word breaker as required.

  • Filter.Filters. 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.Some data types require filtering before the data in a document can be full-text indexed, including data in varbinary, varbinary(max), image, or xml columns. Welcher Filter für ein bestimmtes Dokument verwendet wird, ist vom Dokumenttyp abhängig.The filter used for a given document depends on its document type. Beispielsweise werden für Microsoft Word-Dokumente (DOC), Microsoft Excel-Dokumente (XLS) und XML-Dokumente unterschiedliche Filter verwendet.For example, different filters are used for Microsoft Word (.doc) documents, Microsoft Excel (.xls) documents, and XML (.xml) documents. Anschließend extrahiert der Filter Textabschnitte aus dem Dokument. Dabei werden eingebettete Formatierungen entfernt, der Text und ggf. Informationen über seine Position werden beibehalten.Then the filter extracts chunks of text from the document, removing embedded formatting and retaining the text and, potentially, information about the position of the text. Das Ergebnis ist ein Datenstrom von Textinformationen.The result is a stream of textual information. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Filtern für die Suche.For more information, see Configure and Manage Filters for Search.

  • Wörtertrennung und WortstammerkennungWord breakers and stemmers. Die Wörtertrennung ist eine sprachspezifische Komponente, die anhand von lexikalischen Regeln einer bestimmten Sprache Wortgrenzen erkennt (Wörtertrennung).A word breaker is a language-specific component that finds word boundaries based on the lexical rules of a given language (word breaking). Jede Wörtertrennung ist einer sprachspezifischen Wortstammerkennungskomponente zugeordnet, die Verben konjugiert und flektierende Erweiterungen vornimmt.Each word breaker is associated with a language-specific stemmer component that conjugates verbs and performs inflectional expansions. Bei der Indizierung verwendet der Filterdaemonhost die Wörtertrennung und die Wortstammerkennung, um eine linguistische Analyse der Textdaten aus einer angegebenen Tabellenspalte durchzuführen.At indexing time, the filter daemon host uses a word breaker and stemmer to perform linguistic analysis on the textual data from a given table column. Die Sprache, die einer Tabellenspalte im Volltextindex zugeordnet ist, bestimmt, welche Wörtertrennung und Wortstammerkennung zum Indizieren der Spalte verwendet wird.The language that is associated with a table column in the full-text index determines which word breaker and stemmer are used for indexing the column. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Wörtertrennungen und Wortstammerkennungen für die Suche.For more information, see Configure and Manage Word Breakers and Stemmers for Search.

Verarbeitung der VolltextsucheFull-Text Search processing

Die Volltextsuche beruht auf der Volltext-Engine.Full-text search is powered by the Full-Text Engine. Die Volltext-Engine erfüllt zwei Funktionen: Unterstützung der Indizierung und Unterstützung von Abfragen.The Full-Text Engine has two roles: indexing support and querying support.

Der Vorgang der VolltextindizierungFull-Text indexing process

Wenn eine Volltextauffüllung (auch als „Durchforstung“ bezeichnet) initiiert wird, werden von der Volltext-Engine große Batches von Daten in den Arbeitsspeicher geladen, und der Filterdaemonhost wird benachrichtigt.When a full-text population (also known as a crawl) is initiated, the Full-Text Engine pushes large batches of data into memory and notifies the filter daemon host. Der Host führt Filterung und Wörtertrennung aus und konvertiert die Daten in invertierte Wortlisten.The host filters and word breaks the data and converts the converted data into inverted word lists. 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.The full-text search then pulls the converted data from the word lists, processes the data to remove stopwords, and persists the word lists for a batch into one or more inverted indexes.

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. MicrosoftMicrosoft Word).When indexing data stored in a varbinary(max) or image column, the filter, which implements the IFilter interface, extracts text based on the specified file format for that data (for example, MicrosoftMicrosoft Word). In manchen Fällen erfordern die Filterkomponenten, dass die varbinary(max) - oder image -Daten statt in den Arbeitsspeicher in den Filterdatenordner geschrieben werden.In some cases, the filter components require the varbinary(max), or image data to be written out to the filterdata folder, instead of being pushed into memory.

Im Rahmen der Verarbeitung durchlaufen die gesammelten Textdaten eine Wörtertrennung, die den Text in einzelne Token oder Schlüsselwörter zerlegt.As part of processing, the gathered text data is passed through a word breaker to separate the text into individual tokens, or keywords. 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.The language used for tokenization is specified at the column level, or can be identified within varbinary(max), image, or xml data by the filter component.

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.Additional processing may be performed to remove stopwords, and to normalize tokens before they are stored in the full-text index or an index fragment.

Nach dem Ende einer Auffüllung wird ein abschließender Mergeprozess ausgelöst, der die Indexfragmente zu einem Mastervolltextindex zusammenführt.When a population has completed, a final merge process is triggered that merges the index fragments together into one master full-text index. 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.This results in improved query performance since only the master index needs to be queried rather than a number of index fragments, and better scoring statistics may be used for relevance ranking.

Der Vorgang der VolltextabfrageFull-Text querying process

Der Abfrageprozessor übergibt die Volltextteile einer Abfrage zur Verarbeitung an die Volltext-Engine.The query processor passes the full-text portions of a query to the Full-Text Engine for processing. Die Volltext-Engine führt Worttrennungen sowie optional Thesauruserweiterungen, Wortstammerkennung und Stoppwort-/Füllwortverarbeitung durch.The Full-Text Engine performs word breaking and, optionally, thesaurus expansions, stemming, and stopword (noise-word) processing. Die Volltextteile der Abfrage werden dann in Form von SQL-Operatoren dargestellt, vorrangig als Streaming-Tabellenwertfunktionen.Then the full-text portions of the query are represented in the form of SQL operators, primarily as streaming table-valued functions (STVFs). Während der Abfrageausführung greifen diese Streaming-Tabellenwertfunktionen auf den invertierten Index zu, um die richtigen Ergebnisse abzurufen.During query execution, these STVFs access the inverted index to retrieve the correct results. Die Ergebnisse werden entweder zu diesem Zeitpunkt an den Client zurückgegeben oder vor der Rückgabe an den Client weiter verarbeitet.The results are either returned to the client at this point, or they are further processed before being returned to the client.

Architektur von VolltextindizesFull-text index architecture

Die Informationen in Volltextindizes werden von der Volltext-Engine verwendet, um Volltextabfragen zu kompilieren, die eine Tabelle schnell nach bestimmten Wörtern oder Wortkombination durchsuchen können.The information in full-text indexes is used by the Full-Text Engine to compile full-text queries that can quickly search a table for particular words or combinations of words. In einem Volltextindex werden Informationen zu signifikanten Wörtern und ihre Position innerhalb einer oder mehreren Spalte einer Datenbanktabelle gespeichert.A full-text index stores information about significant words and their location within one or more columns of a database table. Ein Volltextindex ist besonderer Typ eines tokenbasierten funktionellen Index, der durch die Volltext-Engine für SQL ServerSQL Server erstellt und verwaltet wird.A full-text index is a special type of token-based functional index that is built and maintained by the Full-Text Engine for SQL ServerSQL Server. Der Vorgang der Erstellung eines Volltextindexes unterscheidet sich vom Erstellen anderer Indextypen.The process of building a full-text index differs from building other types of indexes. Statt eine B-Struktur basierend auf einem Wert in einer bestimmten Zeile aufzubauen, erstellt die Volltextsuch-Engine eine invertierte, gestapelte, komprimierte Indexstruktur basierend auf einzelnen Token aus dem zu indizierenden Text.Instead of constructing a B-tree structure based on a value stored in a particular row, the Full-Text Engine builds an inverted, stacked, compressed index structure based on individual tokens from the text being indexed. Die Größe des Volltextindexes wird nur durch den verfügbaren Speicherplatz des Computers eingeschränkt, auf dem die Instanz von SQL ServerSQL Server ausgeführt wird.The size of a full-text index is limited only by the available memory resources of the computer on which the instance of SQL ServerSQL Server is running.

Beginnend mit SQL Server 2008SQL Server 2008 sind Volltextindizes in die Datenbank-Engine integriert und befinden sich nicht mehr im Dateisystem, wie dies in früheren Versionen von SQL ServerSQL Server der Fall war.Beginning in SQL Server 2008SQL Server 2008, the full-text indexes are integrated with the Database Engine, instead of residing in the file system as in previous versions of SQL ServerSQL Server. Bei einer neuen Datenbank ist ein Volltextkatalog jetzt ein virtuelles Objekt, das keiner Dateigruppe angehört. Es ist lediglich ein logisches Konzept, das für eine Gruppe von Volltextindizes steht.For a new database, the full-text catalog is now a virtual object that does not belong to any filegroup; it is merely a logical concept that refers to a group of the full-text indexes. Beachten Sie jedoch, dass während des Upgrades einer SQL Server 2005 (9.x)SQL Server 2005 (9.x) -Datenbank für alle Volltextkataloge, die Datendateien enthalten, eine neue Dateigruppe erstellt wird. Weitere Information finden Sie unter Upgrade der Volltextsuche.Note, however, that during upgrade of a SQL Server 2005 (9.x)SQL Server 2005 (9.x) database, any full-text catalog that contains data files, a new filegroup is created; for more information, see Upgrade Full-Text Search.

Nur ein Volltextindex pro Tabelle ist zulässig.Only one full-text index is allowed per table. Damit ein Volltextindex für eine Tabelle erstellt werden kann, muss die Tabelle eine einzelne eindeutige Spalte aufweisen, die keine NULL-Werte enthält.For a full-text index to be created on a table, the table must have a single, unique nonnull column. Sie können einen Volltextindex für die Volltextsuche für alle Spalten vom Typ char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinaryund varbinary(max) erstellen.You can build a full-text index on columns of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, and varbinary(max) can be indexed for full-text search. Beim Erstellen eines Volltextindex für eine Spalte, dessen Datentyp varbinary, varbinary(max) , imageoder xml lautet, müssen Sie eine Typspalte angeben.Creating a full-text index on a column whose data type is varbinary, varbinary(max), image, or xml requires that you specify a type column. Eine Typspalte ist eine Tabellenspalte, in der die Dateierweiterung (DOC, PDF, XLS usw.) für das Dokument in der betreffenden Zeile gespeichert wird.A type column is a table column in which you store the file extension (.doc, .pdf, .xls, and so forth) of the document in each row.

Struktur der VolltextindizesFull-text index structure

Die Kenntnis der Struktur eines Volltextindex hilft Ihnen dabei, die Funktionsweise der Volltext-Engine zu verstehen.A good understanding of the structure of a full-text index will help you understand how the Full-Text Engine works. In diesem Thema wird der folgende Auszug der Tabelle Dokument in Adventure WorksAdventure Works als Beispieltabelle verwendet.This topic uses the following excerpt of the Document table in Adventure WorksAdventure Works as an example table. Der Auszug enthält nur zwei Spalten, DocumentID und Title , und drei Zeilen der Tabelle.This excerpt shows only two columns, the DocumentID column and the Title column, and three rows from the table.

Für dieses Beispiel wird davon ausgegangen, dass ein Volltextindex für die Title -Spalte erstellt wurde.For this example, we will assume that a full-text index has been created on the Title column.

DocumentIDDocumentID TitelTitle
11 Crank Arm and Tire MaintenanceCrank Arm and Tire Maintenance
22 Front Reflector Bracket and Reflector Assembly 3Front Reflector Bracket and Reflector Assembly 3
33 Front Reflector Bracket InstallationFront Reflector Bracket Installation

Die folgende Tabelle, in der Fragment 1 enthalten ist, zeigt den Inhalt des Volltextindex, der für die Title -Spalte der Document -Tabelle erstellt wurde.For example, the following table, which shows Fragment 1, depicts the contents of the full-text index created on the Title column of the Document table. Volltextindizes enthalten mehr Informationen als die in dieser Tabelle dargestellten.Full-text indexes contain more information than is presented in this table. Die Tabelle ist eine logische Darstellung eines Volltextindex und wird nur zu Demonstrationszwecken bereitgestellt.The table is a logical representation of a full-text index and is provided for demonstration purposes only. Die Zeilen werden in einem komprimierten Format gespeichert, um die Datenträgernutzung zu optimieren.The rows are stored in a compressed format to optimize disk usage.

Beachten Sie, dass die Daten gegenüber den Originaldokumenten umgekehrt wurden.Notice that the data has been inverted from the original documents. Die Umkehrung tritt auf, da die Schlüsselwörter den Dokument-IDs zugeordnet sind.Inversion occurs because the keywords are mapped to the document IDs. Aus diesem Grund wird ein Volltextindex häufig als invertierter Index bezeichnet.For this reason, a full-text index is often referred to as an inverted index.

Beachten Sie auch, dass das Schlüsselwort "and" aus dem Volltextindex entfernt wurde.Also notice that the keyword "and" has been removed from the full-text index. Dies ist der Fall, weil "and" ein Stoppwort ist und das Entfernen von Stoppwörtern aus einem Volltextindex zu beträchtlichen Einsparungen beim Datenträgerspeicher führen kann, wodurch die Abfrageleistung verbessert wird.This is done because "and" is a stopword, and removing stopwords from a full-text index can lead to substantial savings in disk space thereby improving query performance. Weitere Informationen finden sie unter Konfigurieren und Verwalten von Stoppwörtern und Stopplisten für Volltextsuche.For more information about stopwords, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

Fragment 1Fragment 1

SchlüsselwortKeyword ColIdColId DocIdDocId VorkommenOccurrence
CrankCrank 11 11 11
ArmArm 11 11 22
TireTire 11 11 44
VerwaltungMaintenance 11 11 55
FrontFront 11 22 11
FrontFront 11 33 11
ReflectorReflector 11 22 22
ReflectorReflector 11 22 55
ReflectorReflector 11 33 22
BracketBracket 11 22 33
BracketBracket 11 33 33
AssemblyAssembly 11 22 66
33 11 22 77
InstallationInstallation 11 33 44

Die Keyword -Spalte enthält eine Darstellung eines einzelnen Tokens, das zum Zeitpunkt der Indizierung extrahiert wurde.The Keyword column contains a representation of a single token extracted at indexing time. Woraus ein Token besteht, wird durch die Wörtertrennung bestimmt.Word breakers determine what makes up a token.

Die ColId -Spalte enthält einen Wert, der einer bestimmten volltextindizierten Spalte entspricht.The ColId column contains a value that corresponds to a particular column that is full-text indexed.

Die DocId -Spalte enthält Werte für eine aus acht Bytes bestehende ganze Zahl, die einem bestimmten Volltextschlüsselwert in einer volltextindizierten Tabelle zugeordnet ist.The DocId column contains values for an eight-byte integer that maps to a particular full-text key value in a full-text indexed table. Diese Zuordnung ist notwendig, wenn der Volltextschlüssel kein ganzzahliger Datentyp ist.This mapping is necessary when the full-text key is not an integer data type. In diesen Fällen werden Zuordnungen zwischen Volltextschlüsselwerten und DocId -Werten in einer separaten Tabelle mit der Bezeichnung DocId-Zuordnungstabelle verwaltet.In such cases, mappings between full-text key values and DocId values are maintained in a separate table called the DocId Mapping table. Um diese Zuordnungen abzufragen, verwenden Sie die gespeicherte Systemprozedur sp_fulltext_keymappings .To query for these mappings use the sp_fulltext_keymappings system stored procedure. Um eine Suchbedingung zu erfüllen, müssen DocId-Werte aus der obigen Tabelle mit der DocId-Zuordnungstabelle verknüpft werden, um Zeilen aus der abgefragten Basistabelle abzurufen.To satisfy a search condition, DocId values from the above table need to be joined with the DocId Mapping table to retrieve rows from the base table being queried. Wenn der Volltextschlüsselwert der Basistabelle ein ganzzahliger Typ ist, wird der Wert direkt als DocID verwendet, und es ist keine Zuordnung erforderlich.If the full-text key value of the base table is an integer type, the value directly serves as the DocId and no mapping is necessary. Die Verwendung von ganzzahligen Volltextschlüsselwerten kann also zur Optimierung von Volltextabfragen beitragen.Therefore, using integer full-text key values can help optimize full-text queries.

Die Spalte Vorkommen enthält einen ganzzahligen Wert.The Occurrence column contains an integer value. Für jeden DocId-Wert ist eine Liste von Vorkommenwerten vorhanden, die den relativen Wortoffsets des betreffenden Schlüsselworts innerhalb dieser DocId entsprechen.For each DocId value, there is a list of occurrence values that correspond to the relative word offsets of the particular keyword within that DocId. Die Vorkommenwerte sind zum Ermitteln von Ausdrucks- oder NEAR-Übereinstimmungen hilfreich, da z. B. Ausdrücke numerisch aufeinander folgende Vorkommenwerte besitzen.Occurrence values are useful in determining phrase or proximity matches, for example, phrases have numerically adjacent occurrence values. Zum Berechnen von Relevanzbewertungen erfüllen sie ebenfalls eine hilfreiche Funktion. So kann z. B. die Anzahl der Vorkommen eines Schlüsselworts in einer DocId zur Rangfolgenberechnung verwendet werden.They are also useful in computing relevance scores; for example, the number of occurrences of a keyword in a DocId may be used in scoring.

VolltextindexfragmenteFull-text index fragments

Der logische Volltextindex wird normalerweise auf mehrere interne Tabellen aufgeteilt.The logical full-text index is usually split across multiple internal tables. Jede interne Tabelle wird als Volltextindexfragment bezeichnet.Each internal table is called a full-text index fragment. Einige dieser Fragmente enthalten ggf. aktuellere Daten als andere.Some of these fragments might contain newer data than others. Wenn Benutzer z. B. die folgende Zeile aktualisieren, deren DocId den Wert 3 hat, und für die Tabelle die automatische Änderungsnachverfolgung verwendet wird, wird ein neues Fragment erstellt.For example, if a user updates the following row whose DocId is 3 and the table is auto change-tracked, a new fragment is created.

DocumentIDDocumentID TitelTitle
33 Rear ReflectorRear Reflector

Im folgenden Beispiel, das Fragment 2 zeigt, enthält das Fragment im Vergleich zu Fragment 1 für DocId 3 aktuellere Daten.In the following example, which shows Fragment 2, the fragment contains newer data about DocId 3 compared to Fragment 1. Wenn Benutzer eine Abfrage für "Rear Reflector" ausführen, werden daher für DocId 3 die Daten aus Fragment 2 verwendet.Therefore, when the user queries for "Rear Reflector" the data from Fragment 2 is used for DocId 3. Jedes Fragment ist mit einem Erstellungszeitstempel gekennzeichnet, der abgefragt werden kann, indem die Katalogsicht sys.fulltext_index_fragments verwendet wird.Each fragment is marked with a creation timestamp that can be queried by using the sys.fulltext_index_fragments catalog view.

Fragment 2Fragment 2

SchlüsselwortKeyword ColIdColId DocIdDocId OccOcc
RearRear 11 33 11
ReflectorReflector 11 33 22

Wie Sie in Fragment 2 sehen, müssen Volltextabfragen jedes Fragment intern abfragen und ältere Einträge verwerfen.As can be seen from Fragment 2, full-text queries need to query each fragment internally and discard older entries. Daher können zu viele Volltextindexfragmente im Volltextindex zu einer beträchtlichen Verringerung der Abfrageleistung führen.Therefore, too many full-text index fragments in the full-text index can lead to substantial degradation in query performance. Um die Anzahl der Fragmente zu reduzieren, organisieren Sie den Volltextkatalog neu, indem Sie die REORGANIZE-Option der ALTER FULLTEXT CATALOGTransact-SQLTransact-SQL -Anweisung verwenden.To reduce the number of fragments, reorganize the fulltext catalog by using the REORGANIZE option of the ALTER FULLTEXT CATALOGTransact-SQLTransact-SQL statement. Diese Anweisung führt eine Hauptzusammenführungaus, sodass die Fragmente zu einem einzigen größeren Fragment zusammengeführt werden, und entfernt alle veralteten Einträge aus dem Volltextindex.This statement performs a master merge, which merges the fragments into a single larger fragment and removes all obsolete entries from the full-text index.

Nach dem erneuten Organisieren würde der Beispielindex die folgenden Zeilen enthalten:After being reorganized, the example index would contain the following rows:

SchlüsselwortKeyword ColIdColId DocIdDocId OccOcc
CrankCrank 11 11 11
ArmArm 11 11 22
TireTire 11 11 44
VerwaltungMaintenance 11 11 55
FrontFront 11 22 11
RearRear 11 33 11
ReflectorReflector 11 22 22
ReflectorReflector 11 22 55
ReflectorReflector 11 33 22
BracketBracket 11 22 33
AssemblyAssembly 11 22 66
33 11 22 77

Unterschiede zwischen Volltextindizes und regulären SQL Server-Indizes:.Differences between full-text indexes and regular SQL Server indexes:.

VolltextindizesFull-text indexes Reguläre SQL Server-IndizesRegular SQL Server indexes
Nur ein Volltextindex pro Tabelle zulässig.Only one full-text index allowed per table. Mehrere reguläre Indizes pro Tabelle zulässig.Several regular indexes allowed per table.
Das Hinzufügen von Daten zu Volltextindizes, Auffüllen genannt, muss angefordert werden. Dies erfolgt entweder mithilfe eines Zeitplans bzw. mithilfe einer speziellen Anforderung oder automatisch beim Hinzufügen neuer Daten.The addition of data to full-text indexes, called a population, can be requested through either a schedule or a specific request, or can occur automatically with the addition of new data. Automatisches Update, wenn die Daten, auf denen der Index basiert, eingefügt, aktualisiert oder gelöscht werden.Updated automatically when the data upon which they are based is inserted, updated, or deleted.
Gruppiert innerhalb derselben Datenbank zu einem oder mehreren Volltextkatalogen.Grouped within the same database into one or more full-text catalogs. Nicht gruppiert.Not grouped.

Linguistische Komponenten und Sprachunterstützung in VolltextsucheFull-Text search linguistic components and language support

Die Volltextsuche unterstützt fast 50 verschiedene Sprachen, z. B. Englisch, Spanisch, Chinesisch, Japanisch, Arabisch, Bangla und Hindi.Full-text search supports almost 50 diverse languages, such as English, Spanish, Chinese, Japanese, Arabic, Bengali, and Hindi. Eine vollständige Liste der unterstützten Volltextsprachen finden Sie unter sys.fulltext_languages (Transact-SQL).For a complete list of the supported full-text languages, see 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.Each of the columns contained in the full-text index is associated with a Microsoft Windows locale identifier (LCID) that equates to a language that is supported by full-text search. Der LCID 1033 entspricht beispielsweise US-Englisch, und der LCID 2057 steht für britisches Englisch.For example, LCID 1033 equates to U.S English, and LCID 2057 equates to British English. Für jede unterstützte Volltextsprache bietet SQL ServerSQL Server linguistische Komponenten, die die Indizierung und Abfrage von in dieser Sprache gespeicherten Volltextdaten unterstützen.For each supported full-text language, SQL ServerSQL Server provides linguistic components that support indexing and querying full-text data that is stored in that language.

Sprachspezifische Komponenten umfassen Folgendes:Language-specific components include the following:

  • Wörtertrennung und WortstammerkennungWord breakers and stemmers. Die Wörtertrennung erkennt Wortgrenzen anhand der lexikalischen Regeln einer bestimmten Sprache (Wörtertrennung).A word breaker finds word boundaries based on the lexical rules of a given language (word breaking). Jeder Wörtertrennung ist eine Wortstammerkennung zugeordnet, die Verben für diese Sprache konjugiert.Each word breaker is associated with a stemmer that conjugates verbs for the same language. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Wörtertrennungen und Wortstammerkennungen für die Suche.For more information, see Configure and Manage Word Breakers and Stemmers for Search.

  • StopplistenStoplists. Eine Systemstoppliste enthält eine Reihe grundlegender Stoppwörter (Füllwörter).A system stoplist is provided that contains a basic set stopwords (also known as noise words). Ein Stoppwort ist ein Wort, das nicht zur Suche beiträgt und in Volltextabfragen ignoriert wird.A stopword is a word that does not help the search and is ignored by full-text queries. Im deutschen Gebietsschema werden beispielsweise Wörter wie "ein", "und", "ist" und "der/die/das" als Stoppwörter betrachtet.For example, for the English locale words such as "a", "and", "is", and "the" are considered stopwords. In der Regel müssen Sie eine oder mehrere Thesaurusdateien und Stopplisten konfigurieren.Typically, you will need to configure one or more thesaurus files and stoplists. Weitere Informationen finden sie unter Konfigurieren und Verwalten von Stoppwörtern und Stopplisten für Volltextsuche.For more information, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

  • ThesaurusdateienThesaurus files. SQL ServerSQL Server installiert außerdem eine Thesaurusdatei für jede Volltextsprache sowie eine globale Thesaurusdatei.also installs a thesaurus file for each full-text language, as well as a global thesaurus file. 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.The installed thesaurus files are essentially empty, but you can edit them to define synonyms for a specific language or business scenario. 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.By developing a thesaurus tailored to your full-text data, you can effectively broaden the scope of full-text queries on that data. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Thesaurusdateien für die Volltextsuche.For more information, see Configure and Manage Thesaurus Files for Full-Text Search.

  • Filter (iFilters)Filters (iFilters). Die Indizierung eines Dokuments in einer Spalte mit dem Datentyp varbinary(max) , imageoder xml erfordert einen Filter für die Ausführung zusätzlicher Verarbeitungsschritte.Indexing a document in a varbinary(max), image, or xml data type column requires a filter to perform extra processing. Der Filter muss für den Dokumenttyp spezifisch sein (DOC, PDF, XLS, XML und so weiter).The filter must be specific to the document type (.doc, .pdf, .xls, .xml, and so forth). Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Filtern für die Suche.For more information, see Configure and Manage Filters for Search.

Wörtertrennung (und Wortstammerkennung) sowie Filter werden im Filterdaemon-Hostprozess (fdhost.exe) ausgeführt.Word breakers (and stemmers) and filters run in the filter daemon host process (fdhost.exe).

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse