Abfragen mit VolltextsucheQuery with Full-Text Search

GILT FÜR: jaSQL ServerjaAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Verwenden Sie zum Schreiben von Volltextabfragen die Prädikate CONTAINS und FREETEXT und die Rowsetwertfunktionen CONTAINSTABLE und FREETEXTTABLE mit einer SELECT-Anweisung.Write full-text queries by using the predicates CONTAINS and FREETEXT and the rowset-valued functions CONTAINSTABLE and FREETEXTTABLE with a SELECT statement. Dieser Artikel enthält Beispiele für jedes Prädikat und jede Funktion und hilft Ihnen dabei, das beste Prädikat bzw. die beste Funktion auszuwählen.This article provides examples of each predicate and function and helps you choose the best one to use.

  • Verwenden Sie CONTAINS und CONTAINSTABLE, um Wörter und Ausdrücke zuzuordnen.To match words and phrases, use CONTAINS and CONTAINSTABLE.
  • Verwenden Sie FREETEXT und FREETEXTTABLE,um eine Bedeutung, aber keinen genauen Wortlaut zuzuordnen.To match the meaning, but not the exact wording, use FREETEXT and FREETEXTTABLE.

Beispiele für alle Prädikate und FunktionenExamples of each predicate and function

In den folgenden Beispielen wird die Beispieldatenbank Adventure Works verwendet.The following examples use the AdventureWorks sample database. Informationen zum endgültigen Release von Adventure Works finden Sie unter Adventure Works Databases and Scripts for SQL Server 2016 CTP3 (Adventure Works-Datenbanken und -Skripte für SQL Server 2016 CTP3).For the final release of AdventureWorks, see AdventureWorks Databases and Scripts for SQL Server 2016 CTP3. Sie müssen zusätzlich die Volltextsuche einrichten, um die Beispielabfragen auszuführen.To run the sample queries, you also have to set up Full-Text Search. Weitere Informationen finden Sie unter Erste Schritte mit der Volltextsuche.For more info, see Get Started with Full-Text Search.

Beispiel - CONTAINSExample - CONTAINS

Im folgenden Beispiel werden alle Produkte mit einem Preis von $80.99 gesucht, die das Wort "Mountain" enthalten:The following example finds all products with a price of $80.99 that contain the word "Mountain":

USE AdventureWorks2012  
GO  
  
SELECT Name, ListPrice  
FROM Production.Product  
WHERE ListPrice = 80.99  
   AND CONTAINS(Name, 'Mountain')  
GO  

Beispiel - FREETEXTExample - FREETEXT

Im folgenden Beispiel wird nach allen Dokumenten gesucht, die Wörter im Zusammenhang mit vital safety components enthalten:The following example searches for all documents that contain words related to vital safety components:

USE AdventureWorks2012  
GO  
  
SELECT Title  
FROM Production.Document  
WHERE FREETEXT (Document, 'vital safety components')  
GO  

Beispiel - CONTAINSTABLEExample - CONTAINSTABLE

Das folgende Beispiel gibt die Beschreibungs-ID und die Beschreibung aller Produkte zurück, bei denen in der Spalte Description das Wort „aluminum“ in der Nähe des Worts „light“ oder „lightweight“ enthalten ist.The following example returns the description ID and description of all products for which the Description column contains the word "aluminum" near either the word "light" or the word "lightweight." Ausschließlich Zeilen mit einem Rang von mindestens 2 werden zurückgegeben.Only rows with a rank of 2 or higher are returned.

USE AdventureWorks2012  
GO  
  
SELECT FT_TBL.ProductDescriptionID,  
   FT_TBL.Description,   
   KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL INNER JOIN  
   CONTAINSTABLE (Production.ProductDescription,  
      Description,   
      '(light NEAR aluminum) OR  
      (lightweight NEAR aluminum)'  
   ) AS KEY_TBL  
   ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
WHERE KEY_TBL.RANK > 2  
ORDER BY KEY_TBL.RANK DESC;  
GO  

Beispiel: FREETEXTTABLEExample - FREETEXTTABLE

Das folgende Beispiel erweitert eine FREETEXTTABLE-Abfrage so, dass die Zeilen mit dem höchsten Rangfolgenwert zuerst zurückgegeben werden und die Rangfolge jeder Zeile zur Auswahlliste hinzugefügt wird.The following example extends a FREETEXTTABLE query to return the highest ranked rows first and to add the ranking of each row to the select list. Um eine ähnliche Abfrage schreiben zu können, müssen Sie wissen, dass ProductDescriptionID die eindeutige Schlüsselspalte der ProductDescription-Tabelle ist.To write a similar query, you have to know that ProductDescriptionID is the unique key column for the ProductDescription table.

USE AdventureWorks2012  
GO  
  
SELECT KEY_TBL.RANK, FT_TBL.Description  
FROM Production.ProductDescription AS FT_TBL   
     INNER JOIN  
     FREETEXTTABLE(Production.ProductDescription, Description,  
                    'perfect all-around bike') AS KEY_TBL  
     ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY KEY_TBL.RANK DESC  
GO  

Im Folgenden finden Sie eine Erweiterung derselben Abfrage, die nur Zeilen mit einem Rang von 10 oder höher zurückgibt:Here is an extension of the same query that only returns rows with a rank of 10 or greater:

USE AdventureWorks2012  
GO  
  
SELECT KEY_TBL.RANK, FT_TBL.Description  
FROM Production.ProductDescription AS FT_TBL   
     INNER JOIN  
     FREETEXTTABLE(Production.ProductDescription, Description,  
                    'perfect all-around bike') AS KEY_TBL  
     ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
WHERE KEY_TBL.RANK >= 10  
ORDER BY KEY_TBL.RANK DESC  
GO  

Übereinstimmung von Wörtern oder BedeutungenMatch words or match meaning

CONTAINS/CONTAINSTABLE und FREETEXT / FREETEXTTABLE eignen sich für verschiedene Übereinstimmungsarten.CONTAINS/CONTAINSTABLE and FREETEXT/FREETEXTTABLE are useful for different kinds of matching. Nachfolgend finden Sie Informationen dazu, wie Sie das beste Prädikat oder die beste Funktion für die Abfrage auswählen können:The following info helps you to choose the best predicate or function for your query:

CONTAINS/CONTAINSTABLECONTAINS/CONTAINSTABLE

  • Suchen Sie nach einzelnen Wörtern und Ausdrücken mit genauen oder (ungenauen) Fuzzy-Matches.Match single words and phrases with precise or fuzzy (less precise) matching.
  • Sie haben außerdem folgende Möglichkeiten:You can also do the following things:
    • Geben Sie den Abstand von Wörtern in einer bestimmten Entfernung voneinander an.Specify the proximity of words within a certain distance of one another.
    • Geben Sie gewichtete Übereinstimmungen zurück.Return weighted matches.
    • Kombinieren Sie Suchbedingungen mit logischen Operatoren.Combine search conditions with logical operators. Weitere Informationen finden Sie unter Verwenden von booleschen Operatoren (AND, OR und NOT) weiter unten in diesem Artikel.For more info, see Using Boolean operators (AND, OR, and NOT) later in this article.

FREETEXT/FREETEXTTABLEFREETEXT/FREETEXTTABLE

  • Sucht nach der Bedeutung, nicht nach dem genauen Wortlaut der angegebenen Wörter, Ausdrücke oder Sätze (Freitextzeichenfolgen).Match the meaning, but not the exact wording, of specified words, phrases, or sentences (the freetext string).
  • Übereinstimmungen werden dann generiert, wenn ein Begriff oder eine Form eines Begriffs im Volltextindex einer angegebenen Spalte gefunden wird.Matches are generated if any term or form of any term is found in the full-text index of a specified column.

Vergleichen Sie Prädikate und FunktionenCompare predicates and functions

Die Prädikate CONTAINS / FREETEXT und die Rowsetwertfunktionen CONTAINSTABLE / FREETEXTTABLE besitzen eine unterschiedliche Syntax und unterschiedliche Optionen.The predicates CONTAINS/FREETEXT and the rowset-valued functions CONTAINSTABLE/FREETEXTTABLE have different syntax and options. Nachfolgend finden Sie Informationen dazu, wie Sie das beste Prädikat oder die beste Funktion für die Abfrage auswählen können:The following info helps you to choose the best predicate or function for your query:

Die Prädikate CONTAINS und FREETEXTPredicates CONTAINS and FREETEXT

Verwendung:Usage. Verwenden Sie die Volltext- -Prädikate CONTAINS und FREETEXT in der WHERE- oder HAVING-Klausel einer SELECT-Anweisung.Use the full-text predicates CONTAINS and FREETEXT in the WHERE or HAVING clause of a SELECT statement.

Ergebnisse:Results. Die Prädikate CONTAINS und FREETEXT geben einen TRUE- oder FALSE-Wert zurück, der angibt, ob eine bestimmte Zeile mit der Volltextabfrage übereinstimmt.The CONTAINS and FREETEXT predicates return a TRUE or FALSE value that indicates whether a given row matches the full-text query. Übereinstimmende Zeilen werden im Resultset zurückgegeben.Matching rows are returned in the result set.

Weitere Optionen:More options. Sie können diese Prädikate mit beliebigen anderen Transact-SQLTransact-SQL-Prädikaten kombinieren, wie z.B. LIKE und BETWEEN.You can combine the predicates with any of the other Transact-SQLTransact-SQL predicates, such as LIKE and BETWEEN.

Sie können entweder eine einzelne Spalte, eine Liste mit Spalten oder alle Spalten der Tabelle für die Suche auswählen.You can specify either a single column, a list of columns, or all columns in the table to be searched.

Optional können Sie die Sprache angeben, deren Ressourcen bei der Volltextabfrage für die Wörtertrennung, die Wortstammerkennung und Thesaurus-Suchen sowie die Entfernung von Füllwörtern verwendet werden.Optionally, you can specify the language whose resources are used by the full-text query for word breaking and stemming, thesaurus lookups, and noise-word removal.

Sie können einen vierteiligen Namen im CONTAINS- oder FREETEXT-Prädikat zum Abfragen von volltextindizierten Spalten der Zieltabellen auf einem Verbindungsserver verwenden.You can use a four-part name in the CONTAINS or FREETEXT predicate to query full-text indexed columns of the target tables on a linked server. Erstellen Sie zum Vorbereiten eines Remoteservers für den Empfang von Volltextabfragen einen Volltextindex für die Zieltabellen und -spalten auf dem Remoteserver, und fügen Sie anschließend den Remoteserver als Verbindungsserver hinzu.To prepare a remote server to receive full-text queries, create a full-text index on the target tables and columns on the remote server and then add the remote server as a linked server.

Weitere Informationen:More info. Weitere Informationen zur Syntax und zu den Argumenten dieser Prädikate finden Sie unter CONTAINS und FREETEXT.For more info about the syntax and arguments of these predicates, see CONTAINS and FREETEXT.

Rowsetwertfunktionen CONTAINSTABLE und FREETEXTTABLERowset-valued functions CONTAINSTABLE and FREETEXTTABLE

Verwendung:Usage. Verwenden Sie die Funktionen CONTAINSTABLE- und FREETEXTTABLE-Funktionen wie einen herkömmlichen Tabellennamen in der FROM-Klausel einer SELECT-Anweisung.Use the full-text functions CONTAINSTABLE and FREETEXTTABLE functions like a regular table name in the FROM clause of a SELECT statement.

Sie müssen die Basistabelle festlegen, um zu suchen, wenn Sie eine dieser Funktionen verwenden.You have to specify the base table to search when you use either of these functions. Wie bei den Prädikaten können Sie eine einzelne Spalte, eine Liste mit Spalten oder alle Spalten in der Tabelle für die Suche auswählen. Außerdem können Sie optional die Sprache angeben, deren Ressourcen bei der Volltextabfrage verwendet werden sollen.As with the predicates, you can specify a single column, a list of columns, or all columns in the table to be searched, and optionally, the language whose resources are used by given full-text query.

In der Regel müssen Sie die Ergebnisse von CONTAINSTABLE oder FREETEXTTABLE mit der Basistabelle verknüpfen.Typically you have to join the results of CONTAINSTABLE or FREETEXTTABLE with the base table. Um die Tabellen zusammenzufügen, müssen Sie den eindeutigen Namen der Schlüsselspalte kennen.To join the tables, you have to know the unique key column name. Mit dieser Spalte, die in jeder volltextfähigen Tabelle enthalten ist, wird die Eindeutigkeit von Zeilen für die Tabelle erzwungen (die UNIQUE**KEY-Spalte).This column, which occurs in every full-text enabled table, is used to enforce unique rows for the table (the unique**key column). Weitere Informationen über die Schlüsselspalte, finden Sie unter Erstellen und Verwalten von Volltextindizes.For more info about the key column, see Create and Manage Full-Text Indexes.

Ergebnisse:Results. Diese Funktionen geben eine Tabelle mit null, einer oder mehreren Zeilen zurück, die mit der Volltextabfrage übereinstimmen.These functions return a table of zero, one, or more rows that match the full-text query. Die zurückgegebene Tabelle enthält nur Zeilen aus der Basistabelle, die die angegebenen Auswahlkriterien in der Volltextsuchbedingung der Funktion erfüllen.The returned table contains only rows from the base table that match the selection criteria specified in the full-text search condition of the function.

Abfragen, die eine dieser Funktionen verwenden, geben auch wie im Folgenden dargestellt einen Relevanzrangfolgenwert (RANK) und einen Volltextschlüssel (KEY) für jede Zeile zurück:Queries that use one of these functions also return a relevance ranking value (RANK) and full-text key (KEY) for each row returned, as follows:

  • Schlüssel-Spalte.KEY column. Die KEY-Spalte gibt eindeutige Werte der zurückgegebenen Zeilen zurück.The KEY column returns unique values of the returned rows. Die KEY-Spalte kann verwendet werden, um Auswahlkriterien anzugeben.The KEY column can be used to specify selection criteria.
  • Rank-Spalte.RANK column. Die RANK-Spalte gibt einen Rangwert für jede Zeile zurück, der angibt, wie gut die Zeilen mit den Auswahlkriterien übereinstimmen.The RANK column returns a rank value for each row that indicates how well the row matched the selection criteria. Je höher der Rangwert des Textes oder Dokuments in einer Zeile ist, desto relevanter ist die Zeile für die betreffende Volltextabfrage.The higher the rank value of the text or document in a row, the more relevant the row is for the given full-text query. Unterschiedliche Zeilen können denselben Rang haben.Different rows can be ranked identically. Sie können die Anzahl zurückgegebener Übereinstimmungen mit dem optionalen Parameter top_n_by_rank einschränken.You can limit the number of matches to be returned by specifying the optional top_n_by_rank parameter. Weitere Informationen finden Sie unter Einschränken von Suchergebnissen mit RANK.For more information, see Limit Search Results with RANK.

Weitere Informationen:More info. Weitere Informationen zur Syntax und den Argumenten dieser Funktionen finden Sie unter CONTAINSTABLE und FREETEXTTABLE.For more info about the syntax and arguments of these functions, see CONTAINSTABLE and FREETEXTTABLE.

Bestimmte SuchvorgangsartenSpecific types of searches

Suchen Sie nach einem bestimmten Wort oder Ausdruck (einfacher Begriff)Search for a specific word or phrase (Simple Term)

Sie können in einer Tabelle mithilfe von CONTAINS, CONTAINSTABLE, FREETEXToder FREETEXTTABLE nach einem bestimmten Wort oder Ausdruck suchen.You can use CONTAINS, CONTAINSTABLE, FREETEXT, or FREETEXTTABLE to search a table for a specific word or phrase. Wenn Sie z.B. die Tabelle ProductReview in der Datenbank AdventureWorks2012AdventureWorks2012 nach allen Kommentaren zu einem Produkt mit dem Begriff „learning curve“ durchsuchen möchten, können Sie das CONTAINS-Prädikat wie folgt verwenden:For example, if you want to search the ProductReview table in the AdventureWorks2012AdventureWorks2012 database to find all comments about a product with the phrase "learning curve," you could use the CONTAINS predicate as follows:

USE AdventureWorks2012  
GO  
  
SELECT Comments  
FROM Production.ProductReview  
WHERE CONTAINS(Comments, '"learning curve"')  
GO  

Die Suchbedingung, in diesem Fall „learning curve“, kann komplex sein und aus einem oder mehreren Begriffen bestehen.The search condition, in this case "learning curve," can be complex and can be composed of one or more terms.

Weitere Informationen zu Suchvorgängen nach BegriffenMore info about simple term searches

Bei der Volltextsuche handelt es sich bei einem Wort (oder einem Token) um eine Zeichenfolge, deren Grenzen gemäß den linguistischen Regeln der angegebenen Sprache von entsprechenden Wörtertrennungen identifiziert werden.In full-text search, a word (or token) is a string whose boundaries are identified by appropriate word breakers, following the linguistic rules of the specified language. Ein gültiger Ausdruck besteht aus mehreren Wörtern mit oder ohne Satzzeichen dazwischen.A valid phrase consists of multiple words, with or without any punctuation marks between them.

So ist z. B. "croissant" ein Wort, während "café au lait" ein Ausdruck ist.For example, "croissant" is a word, and "café au lait" is a phrase. Solche Wörter und Ausdrücke werden als einfache Begriffe bezeichnet.Words and phrases such as these are called simple terms.

CONTAINS und CONTAINSTABLE suchen nach einer genauen Entsprechung für den Ausdruck.CONTAINS and CONTAINSTABLE look for an exact match for the phrase. FREETEXT und FREETEXTTABLE teilen den Ausdruck in separate Wörter auf.FREETEXT and FREETEXTTABLE break up the phrase into separate words.

Suche nach einem Wort mit einem Präfix (Präfixbegriff)Search for a word with a prefix (Prefix Term)

Sie können CONTAINS oder CONTAINSTABLE verwenden, um nach Wörtern oder Ausdrücken mit einem angegebenen Präfix zu suchen.You can use CONTAINS or CONTAINSTABLE to search for words or phrases with a specified prefix. Alle Einträge in der Spalte, die Text enthalten und mit dem angegebenen Präfix beginnen, werden zurückgegeben.All entries in the column that contain text beginning with the specified prefix are returned. So suchen Sie beispielsweise nach allen Zeilen die das Präfix topenthalten, z. B. top``ple, top``pingund top.For example, to search for all rows that contain the prefix top-, as in top``ple, top``ping, and top. Die Abfrage sieht folgendermaßen aus:The query looks like the following example:

USE AdventureWorks2012  
GO  
  
SELECT Description, ProductDescriptionID  
FROM Production.ProductDescription  
WHERE CONTAINS (Description, '"top*"' )  
GO  

Es werden alle Textstellen zurückgegeben, die mit dem Text vor dem Sternchen (*) übereinstimmen.All text that matches the text specified before the asterisk (*) is returned. Wenn der Text und das Sternchen nicht in doppelte Anführungszeichen eingeschlossen sind, wie in CONTAINS (DESCRIPTION, 'top*'), wird das Sternchen von der Volltextsuche nicht als Platzhalter betrachtet.If the text and asterisk are not delimited by double quotation marks, as in CONTAINS (DESCRIPTION, 'top*'), full-text search does not consider the asterisk to be a wildcard..

Ist der Präfixbegriff ein Ausdruck, wird jedes Token, das Teil des Ausdrucks ist, als gesonderter Präfixbegriff behandelt.When the prefix term is a phrase, each token making up the phrase is considered a separate prefix term. Es werden alle Zeilen mit Wörtern, die mit den Präfixbegriffen beginnen, zurückgegeben.All rows that have words beginning with the prefix terms will be returned. So werden z.B. mit dem Präfixbegriff „light bread*“ Zeilen mit dem Text „light breaded“, „lightly breaded“ oder „light bread“ gefunden, aber nicht „lightly toasted bread“.For example, the prefix term "light bread*" will find rows with text of "light breaded," "lightly breaded," or "light bread," but it will not return "lightly toasted bread."

Weitere Informationen zur PräfixsucheMore info about prefix searches

Ein Präfixbegriff ist eine Zeichenfolge, die einem Wort vorangestellt ist, um ein abgeleitetes Wort oder eine Flexionsform zu erhalten.A prefix term refers to a string that is affixed to the front of a word to produce a derivative word or an inflected form.

  • Bei einem einzelnen Präfixbegriff sind alle Wörter, die mit dem angegebenen Ausdruck beginnen, Teil des Resultsets.For a single prefix term, any word starting with the specified term will be part of the result set. Der Ausdruck „Auto*“ ergibt also Übereinstimmungen mit „automatic“, „automobile“ usw.For example, the term "auto*" matches "automatic," "automobile," and so forth.

  • Im Falle eines Ausdrucks wird jedes Wort innerhalb des Ausdrucks als Präfixbegriff interpretiert.For a phrase, each word within the phrase is considered to be a prefix term. Der Begriff „auto tran*“ entspricht z.B. „automatic transmission“ und „automobile transducer“, aber nicht „automatic motor transmission“.For example, the term "auto tran*" matches "automatic transmission" and "automobile transducer," but it does not match "automatic motor transmission."

Die Präfixsuche wird durch CONTAINS und CONTAINSTABLE unterstützt.Prefix searches are supported by CONTAINS and CONTAINSTABLE.

Suchen nach Flexionsformen eines bestimmten Worts (Generierungsbegriff)Search for inflectional forms of a specific word (Generation Term)

Sie können mithilfe von CONTAINS, CONTAINSTABLE, FREETEXToder FREETEXTTABLE nach allen unterschiedlichen Zeiten und Konjugationen eines Verbs oder sowohl die Singular- als auch die Pluralform eines Substantivs (Flexionssuche) bzw. nach Synonymen eines bestimmten Worts (Thesaurussuche) suchen.You can use CONTAINS, CONTAINSTABLE, FREETEXT, or FREETEXTTABLE to search for all the different tenses and conjugations of a verb or both the singular and plural forms of a noun (an inflectional search) or for synonymous forms of a specific word (a thesaurus search).

Im folgenden Beispiel wird nach einer Form von „foot“ („foot“, „feet“ usw.) in der Comments -Spalte der ProductReview-Tabelle in der AdventureWorks-Datenbank gesucht:The following example searches for any form of "foot" ("foot," "feet," and so on) in the Comments column of the ProductReview table in the AdventureWorks database:

USE AdventureWorks2012  
GO  
  
SELECT Comments, ReviewerName  
FROM Production.ProductReview  
WHERE CONTAINS (Comments, 'FORMSOF(INFLECTIONAL, "foot")')  
GO  

Die Volltextsuche verwendet Wortstammerkennungen, über die Sie die unterschiedlichen Zeiten und Konjugationen eines Verbs suchen oder sowohl die Singular- als auch die Pluralform eines Substantivs suchen können.Full-text search uses stemmers, which allow you to search for the different tenses and conjugations of a verb, or both the singular and plural forms of a noun. Weitere Informationen zur Wortstammerkennung finden Sie unter Konfigurieren und Verwalten von Wörtertrennungen und Wortstammerkennungen für die Suche.For more information about stemmers, see Configure and Manage Word Breakers and Stemmers for Search.

Weitere Informationen zu GenerierungsbegriffsuchenMore info about generation term searches

Bei den Flexionsformen handelt es sich um die verschiedenen Tempora und Konjugationen eines Verbs oder die Singular- und Pluralformen eines Substantivs.The inflectional forms are the different tenses and conjugations of a verb or the singular and plural forms of a noun.

Suchen Sie z.B. nach der Flexionsform des Worts „drive“.For example, search for the inflectional form of the word "drive." Wenn mehrere Zeilen in der Tabelle die Wörter „drive“, „drives“, „drove“, „driving“ und „driven“ enthalten, werden alle in das Resultset aufgenommen, da jedes dieser Wörter durch Flexion aus dem Wort „drive“ generiert werden kann.If various rows in the table include the words "drive," "drives," "drove," "driving," and "driven," all would be in the result set because each of these can be inflectionally generated from the word drive.

FREETEXT und FREETEXTTABLE suchen standardmäßig nach den Flexionsformen aller angegebenen Wörter.FREETEXT and FREETEXTTABLE look for inflectional terms of all specified words by default. CONTAINS und CONTAINSTABLE unterstützen ein optionales INFLECTIONAL-Argument.CONTAINS and CONTAINSTABLE support an optional INFLECTIONAL argument.

Suche nach Synonymen eines bestimmten WortsSearch for synonyms of a specific word

Ein Thesaurus definiert vom Benutzer angegebene Synonyme für Ausdrücke.A thesaurus defines user-specified synonyms for terms. Weitere Informationen zu Thesaurusdateien finden Sie unter Konfigurieren und Verwalten von Thesaurusdateien für die Volltextsuche.For more info about thesaurus files, see Configure and Manage Thesaurus Files for Full-Text Search.

Wird einem Thesaurus beispielsweise ein Eintrag „{car, automobile, truck, van}“ hinzugefügt, können Sie nach der Thesaurusform des Worts „car“ suchen.For example, if an entry, "{car, automobile, truck, van}," is added to a thesaurus, you can search for the thesaurus form of the word "car." Alle Zeilen in der abgefragten Tabelle, die die Wörter „automobile“, „truck“, „van“ oder „car“ enthalten, werden im Resultset angezeigt, weil jedes dieser Wörter zum Synonymerweiterungssatz gehört, der das Wort „car“ enthält.All rows in the table queried that include the words "automobile," "truck," "van," or "car," appear in the result set because each of these words belongs to the synonym expansion set containing the word "car."

FREETEXT und FREETEXTTABLE verwenden standardmäßig den Thesaurus.FREETEXT and FREETEXTTABLE use the thesaurus by default. CONTAINS und CONTAINSTABLE unterstützen ein optionales THESAURUS-Argument.CONTAINS and CONTAINSTABLE support an optional THESAURUS argument.

Suche nach einem Wort, das in der Nähe eines anderen Worts auftaucht (NEAR-Suche)Search for a word NEAR another word

Ein Näherungsbegriff bezeichnet Wörter oder Ausdrücke, die sich in Nähe zueinander befinden.A proximity term indicates words or phrases that are near to each other. Sie können auch die maximale Anzahl von nicht als Suchkriterium festgelegten Begriffen angeben, die zwischen dem ersten und dem letzten Suchbegriff liegen.You can also specify the maximum number of non-search terms that separate the first and last search terms. Außerdem können Sie in einer beliebigen Reihenfolge oder in der angegebenen Reihenfolge nach Wörtern oder Ausdrücken suchen.In addition, you can search for words or phrases in any order, or in the order in which you specify them.

Suchen Sie beispielsweise die Zeilen, in denen sich das Wort „ice“ in der Nähe des Worts „hockey“ oder sich der Ausdruck „ice skating“ in der Nähe des Ausdrucks „ice hockey“ befindet.For example, you want to find the rows in which the word "ice" is near the word "hockey" or in which the phrase "ice skating" is near the phrase "ice hockey."

CONTAINS und CONTAINSTABLECONTAINS and CONTAINSTABLE

Weitere Informationen zur NEAR-Suche finden Sie unter Suchen von Wörtern in der Nähe eines anderen Worts mit NEAR.For more info about proximity searches, see Search for Words Close to Another Word with NEAR.

Suchen Sie nach Wörtern oder Ausdrücken mit gewichteten Werten (gewichteter Begriff)Search for words or phrases using weighted values (Weighted Term)

Sie können CONTAINSTABLE verwenden, um nach Wörtern oder Ausdrücken zu suchen und einen Gewichtungswert anzugeben.You can use CONTAINSTABLE to search for words or phrases and specify a weighting value. Die Gewichtung, gemessen als eine Zahl von 0,0 bis 1,0, gibt die Bedeutung für jedes Wort und jeden Ausdruck in einer Gruppe von Wörtern und Ausdrücken an.Weight, measured as a number from 0.0 through 1.0, indicates the importance of each word and phrase within a set of words and phrases. Der Gewichtungswert 0.0 ist der niedrigste, und 1.0 ist der höchste mögliche Wert.A weight of 0.0 is the lowest, and a weight of 1.0 is the highest.

Im folgenden Beispiel ist eine Abfrage dargestellt, die mithilfe von Gewichtungen nach allen Kundenadressen sucht, in denen Text, der mit der Zeichenfolge „Bay“ beginnt, entweder „Street“ oder „View“ enthält.The following example shows a query that searches for all customer addresses, using weights, in which any text beginning with the string "Bay" has either "Street" or "View." Die Zeilen, die mehrere der angegebenen Wörter enthalten, erhalten einen höheren Rang in den Ergebnissen.The results give a higher rank to those rows that contain more of the words specified.

USE AdventureWorks2012  
GO  
  
SELECT AddressLine1, KEY_TBL.RANK   
FROM Person.Address AS Address INNER JOIN  
CONTAINSTABLE(Person.Address, AddressLine1, 'ISABOUT ("Bay*",   
         Street WEIGHT(0.9),   
         View WEIGHT(0.1)  
         ) ' ) AS KEY_TBL  
ON Address.AddressID = KEY_TBL.[KEY]  
ORDER BY KEY_TBL.RANK DESC  
GO  

Ein gewichteter Begriff kann in Verbindung mit jedem einfachen Begriff, einem Präfixbegriff, einem Generierungsbegriff oder einem NEAR-Begriff verwendet werden.A weighted term can be used in conjunction with any simple term, prefix term, generation term, or proximity term.

Weitere Informationen zu Suchvorgängen nach gewichteten BegriffenMore info about weighted term searches

In einer Suche nach einem gewichteten Begriff gibt der Gewichtungswert für jedes Wort und jeden Ausdruck in einer Gruppe von Wörtern und Ausdrücken den Grad der Wichtigkeit an.In a weighted term search, a weighting value indicates the degree of importance for each word and phrase within a set of words and phrases. Der Gewichtungswert 0,0 ist der niedrigste, und 1,0 ist der höchste mögliche Wert.A weight value of 0.0 is the lowest, and a weight value of 1.0 is the highest.

Sie können beispielsweise in einer Abfrage, in der nach mehreren Begriffen gesucht wird, jedem Suchwort einen Gewichtungswert zuweisen, der dessen Bedeutung im Vergleich zu den anderen Wörtern in der Suchbedingung angibt.For example, in a query searching for multiple terms, you can assign each search word a weight value indicating its importance relative to the other words in the search condition. In den Ergebnissen für diesen Abfragetyp werden die relevantesten Zeilen zuerst zurückgegeben, entsprechend der relativen Gewichtung, die Sie den Suchwörtern zugewiesen haben.The results for this type of query return the most relevant rows first, according to the relative weight you have assigned to search words. Das Resultset enthält Dokumente oder Zeilen mit beliebigen angegebenen Ausdrücken (bzw. dem umgebenden Inhalt). Einige Ergebnisse werden jedoch als relevanter bewertet, weil den einzelnen Suchausdrücken verschiedene Gewichtungswerte zugeordnet sind.The result sets contain documents or rows containing any of the specified terms (or content between them); however, some results will be considered more relevant than others because of the variation in the weighted values associated with different searched terms.

Die Suche nach dem gewichteten Begriff wird durch CONTAINSTABLE unterstützt.Weighted term searches are supported by CONTAINSTABLE.

Verwenden der booleschen Operatoren AND, OR und NOTUse AND, OR, and NOT (Boolean operators)

Das CONTAINS-Prädikat und die CONTAINSTABLE-Funktion verwenden dieselben Suchbedingungen.The CONTAINS predicate and CONTAINSTABLE function use the same search conditions. Beide unterstützen das Kombinieren mehrerer Suchbegriffe mit booleschen Operatoren – AND, OR, und NOT –, um logische Operationen auszuführen.Both support combining several search terms by using Boolean operators - AND, OR, and NOT - to perform logical operations. Mit AND können Sie z.B. Zeilen suchen, die sowohl „Latte“ als auch „New York-style bagel“ enthalten.You can use AND, for example, to find rows that contain both "latte" and "New York-style bagel." Mit AND NOT können Sie z.B. Zeilen suchen, die zwar „Bagel“, aber nicht „cream cheese“ enthalten.You can use AND NOT, for example, to find the rows that contain "bagel" but do not contain "cream cheese."

Im Gegensatz dazu behandeln FREETEXT und FREETEXTTABLE die booleschen Begriffe als Wörter, nach denen gesucht werden soll.In contrast, FREETEXT and FREETEXTTABLE treat the Boolean terms as words to be searched.

Informationen zum Kombinieren von CONTAINS mit anderen Prädikaten, die die logischen Operatoren AND, OR und NOT unterstützen, finden Sie unter Suchbedingung (Transact-SQL).For information about combining CONTAINS with other predicates that use the logical operators AND, OR, and NOT, see Search Condition (Transact-SQL).

BeispielExample

Im folgenden Beispiel wird das CONTAINS-Prädikat für die Suche nach Beschreibungen verwendet, deren Beschreibungs-ID ungleich 5 ist und die das Wort "Aluminum" und das Wort "spindle" enthalten.The following example uses the CONTAINS predicate to search for descriptions in which the description ID is not equal to 5 and the description contains both the word "Aluminum" and the word "spindle." In der Suchbedingung wird der boolesche AND-Operator verwendet.The search condition uses the AND Boolean operator. In diesem Beispiel wird die ProductDescription-Tabelle der AdventureWorks2012AdventureWorks2012-Datenbank verwendet.This example uses the ProductDescription table of the AdventureWorks2012AdventureWorks2012 database.

USE AdventureWorks2012  
GO  
  
SELECT Description  
FROM Production.ProductDescription  
WHERE ProductDescriptionID <> 5 AND  
   CONTAINS(Description, 'aluminum AND spindle')  
GO  

Groß-/Kleinschreibung, Stoppwörter, Sprache und ThesaurusCase, stopwords, language, and thesaurus

Beim Schreiben von Volltextabfragen können Sie auch die folgenden Optionen angeben:When you write full-text queries, you can also specify the following options:

  • Unterscheidung nach Groß-/Kleinschreibung.Case sensitivity. Bei Volltextabfragen wird nicht nach Groß- und Kleinschreibung unterschieden.Full-text search queries are case-insensitive. Im Japanischen gibt es allerdings mehrere phonetische Orthografien, bei denen das Konzept der orthografischen Normalisierung ähnlich der Nichtunterscheidung nach Groß-/Kleinschreibung ist (z. B. kana = keine Unterscheidung).However, in Japanese, there are multiple phonetic orthographies in which the concept of orthographic normalization is akin to case insensitivity (for example, kana = insensitivity). Diese Art orthografischer Normalisierung wird nicht unterstützt.This type of orthographic normalization is not supported.

  • Stoppwörter.Stopwords. Wenn Sie eine Volltextabfrage definieren, ignoriert die Volltext-Engine Stoppwörter (auch als Füllwörter bezeichnet) in den Suchkriterien.When defining a full-text query, the Full-Text Engine discards stopwords (also called noise words) from the search criteria. Stoppwörter sind Wörter wie Artikel ("ein" oder "der"), Konjunktionen ("und") oder Hilfsverben ("ist"), die häufig vorkommen können, jedoch bei der Suche nach bestimmtem Text nicht hilfreich sind.Stopwords are words such as "a," "and," "is," or "the," that can occur frequently but that typically do not help when searching for particular text. Stoppwörter werden in einer Stoppliste aufgelistet.Stopwords are listed in a stoplist. Jedem Volltextindex ist eine bestimmte Stoppliste zugeordnet, die festlegt, welche Stoppwörter bei Abfragen oder im Index während der Indizierung ignoriert werden.Each full-text index is associated with a specific stoplist, which determines what stopwords are omitted from the query or the index at indexing time. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Stoppwörtern und Stopplisten für Volltextsuche.For more info, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

  • Sprache, mit der Language-Option.Language, with the LANGUAGE option. Viele Abfrageausdrücke hängen sehr vom Verhalten bei Wörtertrennungen ab.Many query terms depend heavily on word-breaker behavior. Um sicherzustellen, dass Sie die richtige Wörtertrennung (und Wortstammerkennung) sowie die richtige Thesaurusdatei verwenden, wird empfohlen, die LANGUAGE-Option anzugeben.To ensure that you are using the correct word breaker (and stemmer) and thesaurus file, we recommend that you specify the LANGUAGE option. Weitere Informationen finden Sie unter Auswählen einer Sprache beim Erstellen eines Volltextindex.For more information, see Choose a Language When Creating a Full-Text Index.

  • Thesaurus.Thesaurus. FREETEXT- und FREETEXTTABLE-Abfragen verwenden standardmäßig den Thesaurus.FREETEXT and FREETEXTTABLE queries use the thesaurus by default. CONTAINS und CONTAINSTABLE unterstützen ein optionales THESAURUS-Argument.CONTAINS and CONTAINSTABLE support an optional THESAURUS argument. Weitere Informationen finden Sie unter Konfigurieren und Verwalten von Thesaurusdateien für die Volltextsuche.For more info, see Configure and Manage Thesaurus Files for Full-Text Search.

Überprüfen Sie die Ergebnisse der TokenisierungCheck the tokenization results

Nachdem Sie eine entsprechende Kombination aus Wörtertrennung, Thesaurus und Stoppliste auf eine Abfrage angewendet haben, können Sie sehen, wie die Volltextsuche die Ergebnisse zerlegt, indem Sie die dynamische Verwaltungssicht sys.dm_fts_parser verwenden.After you apply a given word breaker, thesaurus, and stoplist combination in a query, you can see how Full-Text Search tokenizes the results by using the sys.dm_fts_parser dynamic management view. Weitere Informationen finden Sie unter sys.dm_fts_parser (Transact-SQL).For more information, see sys.dm_fts_parser (Transact-SQL).

Weitere InformationenSee Also

CONTAINS (Transact-SQL) CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL) CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL) FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL) FREETEXTTABLE (Transact-SQL)
Erstellen von Volltextsuchabfragen (Visual Database Tools) Create Full-Text Search Queries (Visual Database Tools)
Verbessern der Leistung von VolltextabfragenImprove the Performance of Full-Text Queries