Freigeben über


Abfrage mit Full-Text-Suche

Um Volltextsuchen zu definieren, verwenden SQL Server-Volltextabfragen die Volltext-Prädikate (CONTAINS und FREETEXT) und Funktionen (CONTAINSTABLE und FREETEXTTABLE). Diese unterstützen umfangreiche Transact-SQL Syntax, die eine Vielzahl von Formen von Abfragebegriffen unterstützt. Wenn Sie Volltextabfragen schreiben möchten, müssen Sie wissen, wann und wie Sie diese Prädikate und Funktionen verwenden.

Übersicht über die Full-Text Prädikate (CONTAINS und FREETEXT)

Die PRÄdikate CONTAINS und FREETEXT geben einen WAHR- oder FALSCH-Wert zurück. Sie können nur verwendet werden, um Auswahlkriterien anzugeben, um zu bestimmen, ob eine bestimmte Zeile der Volltextabfrage entspricht. Übereinstimmende Zeilen werden im Resultset zurückgegeben. CONTAINS und FREETEXT werden in der WHERE- oder HAVING-Klausel einer SELECT-Anweisung angegeben. Sie können mit jedem der anderen Transact-SQL-Prädikate, wie z.B. LIKE und BETWEEN, kombiniert werden.

Hinweis

Informationen zur Syntax und den Argumenten dieser Prädikate finden Sie unter CONTAINS (Transact-SQL) und FREETEXT (Transact-SQL).

Bei Verwendung von CONTAINS oder FREETEXT können Sie entweder eine einzelne Spalte, eine Liste von Spalten oder alle Spalten in der zu durchsuchenden Tabelle angeben. Optional können Sie die Sprache angeben, deren Ressourcen bei einer Volltextabfrage für Worttrennung und Stammformanalyse, Thesaurus-Nachschlagevorgänge und Entfernung von Füllwörtern verwendet werden.

CONTAINS und FREETEXT sind für verschiedene Arten von Übereinstimmungen wie folgt nützlich:

  • Verwenden Sie CONTAINS (oder CONTAINSTABLE) für präzise oder unscharfe Übereinstimmungen mit einzelnen Wörtern und Ausdrücken, die Nähe von Wörtern innerhalb eines bestimmten Abstands zueinander oder gewichtete Übereinstimmungen. Bei Verwendung von CONTAINS müssen Sie mindestens eine Suchbedingung angeben, die den gesuchten Text und die Bedingungen angibt, die Übereinstimmungen bestimmen.

    Sie können logische Operationen zwischen Suchbedingungen verwenden. Weitere Informationen finden Sie weiter unten in diesem Thema unter Verwenden von booleschen Operatoren UND, ODER, AND NOT (in CONTAINS and CONTAINSTABLE).

  • Verwenden Sie FREETEXT (oder FREETEXTTABLE) zum Abgleichen der Bedeutung, aber nicht des exakten Worts, von angegebenen Wörtern, Ausdrücken oder Sätzen (der Freitextzeichenfolge). Übereinstimmungen werden generiert, wenn ein Ausdruck oder eine Form eines Ausdrucks im Volltextindex einer angegebenen Spalte gefunden wird.

Sie können einen vierteiligen Namen im CONTAINS- oder FREETEXT-Prädikat verwenden, um indizierte Volltextspalten der Zieltabellen auf einem verknüpften Server abzufragen. 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.

Hinweis

Volltext-Prädikate sind in der OUTPUT-Klausel nicht zulässig, wenn die Datenbankkompatibilitätsebene auf 100 festgelegt ist.

Beispiele

Ein. Verwendung von CONTAINS mit <simple_term>

Im folgenden Beispiel werden alle Produkte mit einem Preis von $80.99 gefunden, die das Wort "Mountain" enthalten.

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

B. Verwenden von FREETEXT, um nach Wörtern zu suchen, die bestimmte Zeichenwerte enthalten

Im folgenden Beispiel wird nach allen Dokumenten gesucht, die Wörter im Zusammenhang mit wichtigen Sicherheitskomponenten enthalten.

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

Übersicht über die Full-Text-Funktionen (CONTAINSTABLE und FREETEXTTABLE)

Auf die Funktionen CONTAINSTABLE und FREETEXTTABLE wird wie ein regulärer Tabellenname in der FROM-Klausel einer SELECT-Anweisung verwiesen. Sie geben eine Tabelle mit Null, einer oder mehreren Zeilen zurück, die der Volltextabfrage entsprechen. Die zurückgegebene Tabelle enthält nur Zeilen der Basistabelle, die den auswahlkriterien entsprechen, die in der Volltextsuchbedingung der Funktion angegeben sind.

Hinweis

Informationen zur Syntax und den Argumenten dieser Funktionen finden Sie unter CONTAINSTABLE (Transact-SQL) und FREETEXTTABLE (Transact-SQL).

Abfragen mit einer dieser Funktionen geben einen Relevanzrangfolgewert (RANK) und einen Volltextschlüssel (KEY) für jede Zeile wie folgt zurück:

  • KEY-Spalte

    Die SCHLÜSSELspalte gibt eindeutige Werte der zurückgegebenen Zeilen zurück. Die Spalte Schlüssel kann zum Angeben von Auswahlkriterien verwendet werden.

  • RANK-Spalte

    Die RANK-Spalte gibt einen Rangwert für jede Zeile zurück, die angibt, wie gut die Zeile den Auswahlkriterien entspricht. Je höher der Rangwert des Texts oder Dokuments in einer Zeile ist, desto relevanter ist die Zeile für die angegebene Volltextabfrage. Beachten Sie, dass unterschiedliche Zeilen identisch bewertet werden können. Sie können die Anzahl der Übereinstimmungen, die zurückgegeben werden, einschränken, indem Sie den top_n_by_rank-Parameter optional angeben. Weitere Informationen finden Sie unter Einschränken von Suchergebnissen mit RANG.

Wenn Sie eine dieser Funktionen verwenden, müssen Sie die Basistabelle angeben, die durchsucht werden soll. Wie bei den Prädikaten können Sie eine einzelne Spalte, eine Liste von Spalten oder alle Spalten in der zu durchsuchenden Tabelle sowie optional die Sprache angeben, deren Ressourcen von einer Volltextabfrage verwendet werden.

CONTAINSTABLE ist für dieselben Arten von Übereinstimmungen wie CONTAINS nützlich, und FREETEXTTABLE ist für dieselben Arten von Übereinstimmungen wie FREETEXT nützlich. Weitere Informationen finden Sie weiter oben in diesem Thema unter Übersicht über die Full-Text Prädikate (CONTAINS und FREETEXT). Beim Ausführen von Abfragen, die die Funktionen CONTAINSTABLE und FREETEXTTABLE verwenden, müssen Sie Zeilen explizit verknüpfen, die mit den Zeilen in der SQL Server-Basistabelle zurückgegeben werden.

In der Regel muss das Ergebnis von CONTAINSTABLE oder FREETEXTTABLE mit der Basistabelle verknüpft werden. In solchen Fällen müssen Sie den eindeutigen Schlüsselspaltennamen kennen. Diese Spalte, die in jeder volltextfähigen Tabelle auftritt, wird verwendet, um eindeutige Zeilen für die Tabelle (die eindeutige**Schlüsselspalte) zu erzwingen. Weitere Informationen finden Sie unter Verwalten von Full-Text Indizes.

Beispiele

Ein. Verwendung von CONTAINSTABLE

Im folgenden Beispiel werden die Beschreibungs-ID und die Beschreibung aller Produkte zurückgegeben, für die die Spalte " Beschreibung " das Wort "Aluminium" in der Nähe des Worts "light" oder das Wort "leicht" enthält. Es werden nur Zeilen mit einem Rangwert von 2 oder höher zurückgegeben.

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  

B. Verwenden von FREETEXTTABLE

Im folgenden Beispiel wird eine FREETEXTTABLE-Abfrage erweitert, um zuerst die höchsten Bewerteten Zeilen zurückzugeben und die Rangfolge jeder Zeile der Auswahlliste hinzuzufügen. Um die Abfrage anzugeben, müssen Sie wissen, dass ProductDescriptionID die eindeutige Schlüsselspalte für die ProductDescription Tabelle ist.

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  

Hier ist eine Erweiterung derselben Abfrage, die nur Zeilen mit einem Rangwert von 10 oder höher zurückgibt:

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  

Verwenden von booleschen Operatoren - AND, OR und NOT - in CONTAINS and CONTAINSTABLE

Das CONTAINS-Prädikat und die CONTAINSTABLE-Funktion verwenden dieselben Suchbedingungen. Beide unterstützen die Kombination mehrerer Suchbegriffe mithilfe von booleschen Operatoren UND, ODER UND NICHT, um logische Vorgänge auszuführen. Sie können Z. B. AND verwenden, um Zeilen zu finden, die sowohl "Latte" als auch "New York-Style bagel" enthalten. Sie können Z. B. AND NOT verwenden, um die Zeilen zu finden, die "Bagel" enthalten, aber keine "Cremekäse" enthalten.

Hinweis

Im Gegensatz dazu behandeln FREETEXT und FREETEXTTABLE die booleschen Begriffe als zu durchsuchende Wörter.

Informationen zum Kombinieren von CONTAINS mit anderen Prädikaten, die die logischen Operatoren AND, OR und NOT verwenden, finden Sie unter Search Condition (Transact-SQL).

Beispiel

Im folgenden Beispiel wird die ProductDescription-Tabelle der AdventureWorks2012-Datenbank verwendet. Die Abfrage verwendet das CONTAINS-Prädikat, um nach Beschreibungen zu suchen, in denen die Beschreibungs-ID nicht gleich 5 ist, und die Beschreibung enthält sowohl das Wort "Aluminium" als auch das Wort "Spindel". Die Suchbedingung verwendet den Booleschen Operator AND.

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

Zusätzliche Überlegungen für Full-Text Anfragen

Beachten Sie beim Schreiben von Volltextabfragen auch Folgendes:

  • Die OPTION SPRACHE

    Viele Abfragebegriffe hängen stark vom Verhalten des Worttrennungsverhaltens ab. Um sicherzustellen, dass Sie die richtige Worttrennung und Wortstammerkennung sowie die richtige Thesaurusdatei verwenden, empfehlen wir, die LANGUAGE-Option anzugeben. Weitere Informationen finden Sie unter Sprache wählen bei der Erstellung eines Full-Text Index.

  • Stopwörter

    Beim Definieren einer Volltextabfrage verwirft das Full-Text Modul Stoppwörter (auch als Füllwörter bezeichnet) aus den Suchkriterien. Stoppwörter sind Wörter wie "a", "and", "is" oder "the", die häufig auftreten können, die aber normalerweise bei der Suche nach einem bestimmten Text nicht hilfreich sind. Stoppwörter werden in einer Stoppliste aufgeführt. Jeder Volltextindex ist einer bestimmten Stoppliste zugeordnet, die bestimmt, welche Stoppwörter aus der Abfrage oder dem Index zur Indizierungszeit weggelassen werden. Weitere Informationen finden sie unter Konfigurieren und Verwalten von Stoppwörtern und Stopplisten für Volltextsuche.

  • Der Thesaurus

    FREETEXT- und FREETEXTTABLE-Abfragen verwenden standardmäßig den Thesaurus. CONTAINS und CONTAINSTABLE unterstützen ein optionales THESAURUS-Argument.

  • Groß- und Kleinschreibung

    Volltextabfragen sind nicht empfindlich gegenüber Groß- und Kleinschreibung. In Japanisch gibt es jedoch mehrere phonetische Orthographien, bei denen das Konzept der orthografischen Normalisierung der Groß-/Kleinschreibungsunempfindlichkeit ähnlich ist (z. B. Kana = Ignoranz). Diese Art der orthografischen Normalisierung wird nicht unterstützt.

Abfragen von varbinary(max) und XML-Spalten

Wenn eine varbinary(max), varbinary oder xml Spalte volltextindiziert ist, kann diese mithilfe der Volltext-Prädikate (CONTAINS und FREETEXT) und Funktionen (CONTAINSTABLE und FREETEXTTABLE) wie jede andere volltextindizierte Spalte abgefragt werden.

Von Bedeutung

Die Volltextsuche funktioniert auch mit Bildspalten. Der image Datentyp wird jedoch in einer zukünftigen Version von SQL Server entfernt. Vermeiden Sie die Verwendung dieses Datentyps in neuer Entwicklungsarbeit, und planen Sie, Anwendungen zu ändern, die sie derzeit verwenden. Verwenden Sie stattdessen den varbinary(max) Datentyp.

varbinary(max) oder varbinary-Daten

Eine einzelne varbinary(max) Oder varbinary Spalte kann viele Arten von Dokumenten speichern. SQL Server unterstützt jeden Dokumenttyp, für den ein Filter installiert und im operativen System verfügbar ist. Der Dokumenttyp jedes Dokuments wird durch die Dateierweiterung des Dokuments identifiziert. Bei einer .doc Dateierweiterung verwendet die Volltextsuche beispielsweise den Filter, der Microsoft Word-Dokumente unterstützt. Fragen Sie für eine Liste der verfügbaren Dokumenttypen die sys.fulltext_document_types Katalogansicht ab.

Beachten Sie, dass das Full-Text Modul vorhandene Filter nutzen kann, die im Betriebssystem installiert sind. Bevor Sie Betriebssystemfilter, Worttrennungen und Stemmer verwenden können, müssen Sie sie wie folgt in der Serverinstanz laden:

EXEC sp_fulltext_service @action='load_os_resources', @value=1  

Zum Erstellen eines Volltextindexes in einer varbinary(max) Spalte benötigt das Full-Text Modul Zugriff auf die Dateierweiterungen der Dokumente in der varbinary(max) Spalte. Diese Informationen müssen in einer Tabellenspalte gespeichert werden, die als Typspalte bezeichnet wird, die der varbinary(max) Spalte im Volltextindex zugeordnet werden muss. Beim Indizieren eines Dokuments verwendet das Full-Text Modul die Dateierweiterung in der Typspalte, um zu identifizieren, welcher Filter verwendet werden soll.

XML-Daten

In einer xml Datentypspalte werden nur XML-Dokumente und -Fragmente gespeichert, und nur der XML-Filter wird für die Dokumente verwendet. Daher ist eine Typspalte unnötig. In xml Spalten indiziert der Volltextindex den Inhalt der XML-Elemente, ignoriert jedoch das XML-Markup. Attributwerte sind volltextindiziert, es sei denn, sie sind numerische Werte. Elementtags werden als Tokengrenzen verwendet. Wohlgeformte XML- oder HTML-Dokumente und Fragmente, die mehrere Sprachen enthalten, werden unterstützt.

Weitere Informationen zum Abfragen einer xml Spalte finden Sie unter Verwenden Full-Text Suche mit XML-Spalten.

Unterstützte Formen von Abfragebegriffen

In diesem Abschnitt wird die Unterstützung für jede Abfrageform durch die Volltext-Prädikate und Rowset-Wert-Funktionen zusammengefasst.

Hinweis

Klicken Sie für die Syntax eines bestimmten Abfrageausdrucks auf die entsprechenden Links in der Spalte " Unterstützt von " der folgenden Tabelle.

Suchbegriffformular BESCHREIBUNG Unterstützt von
Ein oder mehrere bestimmte Wörter oder Ausdrücke (einfacher Ausdruck) Bei der Volltextsuche handelt es sich bei einem Wort (oder Token) um eine Zeichenfolge, deren Grenzen durch geeignete Worttrennungen nach den linguistischen Regeln der angegebenen Sprache identifiziert werden. Ein gültiger Ausdruck besteht aus mehreren Wörtern mit oder ohne Satzzeichen dazwischen.

Beispielsweise ist "Croissant" ein Wort, und "Café". au lait" ist ein Ausdruck. Wörter und Ausdrücke wie diese werden als einfache Begriffe bezeichnet.

Weitere Informationen finden Sie unter Suchen nach bestimmten Wörtern oder Ausdrücken (Einfacher Begriff) weiter unten in diesem Thema.
CONTAINS und CONTAINSTABLE suchen nach einer genauen Übereinstimmung für den Ausdruck.

FREETEXT und FREETEXTTABLE unterteilen den Ausdruck in separate Wörter.
Ein Wort oder ein Ausdruck, in dem die Wörter mit angegebenem Text beginnen (Präfixausdruck) Ein Präfixausdruck bezieht sich auf eine Zeichenfolge, die am Anfang eines Wortes angefügt wird, um ein abgeleitetes Wort oder eine gebeugte Form zu erzeugen.

Bei einem einzelnen Präfix wird jedes Wort, das mit dem angegebenen Präfix beginnt, Teil der Ergebnismenge. Beispielsweise entspricht der Begriff mit dem Platzhalter "auto*" den Wörtern "automatisch", "Automobil" und so weiter.

Bei einem Ausdruck wird jedes Wort innerhalb des Ausdrucks als Präfixwort betrachtet. Der Begriff "auto tran*" entspricht beispielsweise "Automatikgetriebe" und "Automobilwandler", stimmt aber mit "Automatische Motorübertragung" nicht überein.

Weitere Informationen finden Sie unter Durchführung von Präfixsuchen (Präfixausdruck) im weiteren Verlauf dieses Themas.
CONTAINS UND CONTAINSTABLE
Flexionsformen eines bestimmten Begriffs (Generationsterm-Flexionen) Die Inflektionsformen sind die verschiedenen Zeiten und Konjugationen eines Verbs oder die Singular- und Pluralformen eines Substantivs. Suchen Sie z. B. nach der Flexionsform des Wortes "fahren". Wenn verschiedene Zeilen in der Tabelle die Wörter "drive", "drives", "drove", "driving" und "driven" enthalten, wären alle im Resultset enthalten, da jede dieser Wörter aus dem Wort "drive" flektiert generiert werden kann.

Weitere Informationen finden Sie unter Suchen nach der Flexionsform eines bestimmten Worts (Generierungsbegriff) im weiteren Verlauf dieses Themas.
FREETEXT und FREETEXTTABLE suchen standardmäßig nach Flexionsformen aller angegebenen Wörter.

CONTAINS und CONTAINSTABLE unterstützen ein optionales INFLECTIONAL-Argument.
Synonyme Formen eines bestimmten Worts (Begriffs-Thesaurus der Generation) Ein Thesaurus definiert benutzerspezifizierte Synonyme für Begriffe. Wenn z. B. ein Eintrag "{car, automobile, truck, van}" zu einem Thesaurus hinzugefügt wird, können Sie nach der Thesaurusform des Worts "auto" suchen. Alle Zeilen in der abgefragten Tabelle, die die Wörter "automobile", "truck", "van" oder "car" enthalten, werden im Resultset angezeigt, da jedes dieser Wörter zum Synonymerweiterungssatz gehört, der das Wort "auto" enthält.

Informationen zur Struktur der Thesaurusdateien finden Sie unter Configure and Manage Thesaurus Files for Full-Text Search.
FREETEXT und FREETEXTTABLE verwenden standardmäßig den Thesaurus.

CONTAINS und CONTAINSTABLE unterstützen ein optionales THESAURUS-Argument.
Ein Wort oder Ausdruck in der Nähe eines anderen Worts oder Ausdrucks (Nähebegriff) Ein Näherungsausdruck gibt Wörter oder Ausdrücke an, die sich nahe beieinander befinden., Sie können auch die maximale Anzahl von Nicht-Suchbegriffen angeben, die die ersten und letzten Suchbegriffe trennen. Darüber hinaus können Sie nach Wörtern oder Ausdrücken in beliebiger Reihenfolge oder in der Reihenfolge suchen, in der Sie sie angeben.

Sie möchten z. B. die Zeilen finden, in denen sich das Wort "Eis" in der Nähe des Worts "Hockey" befindet oder in dem sich der Begriff "Eislauf" in der Nähe des Begriffs "Eishockey" befindet.

Weitere Informationen finden Sie unter Suchen nach Wörtern in der Nähe eines anderen Worts mit NEAR.
CONTAINS UND CONTAINSTABLE
Wörter oder Ausdrücke mit gewichteten Werten (gewichteter Begriff) Ein Gewichtungswert, der den Grad der Wichtigkeit für jedes Wort und jeden Ausdruck innerhalb einer Gruppe von Wörtern und Ausdrücken angibt. Ein Gewichtungswert von 0,0 ist der niedrigste, und ein Gewichtungswert von 1,0 ist der höchste Wert.

Beispielsweise können Sie in einer Abfrage, die nach mehreren Begriffen sucht, jedem Suchwort einen Gewichtungswert zuweisen, der seine Wichtigkeit relativ zu den anderen Wörtern in der Suchbedingung angibt. Die Ergebnisse für diesen Abfragetyp geben zuerst die relevantesten Zeilen gemäß der relativen Gewichtung zurück, die Sie Suchbegriffen zugewiesen haben. Die Resultsets enthalten Dokumente oder Zeilen, die einen der angegebenen Begriffe (oder den Inhalt dazwischen) enthalten; Einige Ergebnisse werden jedoch aufgrund der Variation der gewichteten Werte, die verschiedenen durchsuchten Begriffen zugeordnet sind, als relevanter angesehen als andere.

Weitere Informationen finden Sie unter Suchen nach Wörtern oder Ausdrücken mit gewichteten Werten (Gewichtete Ausdrücke) weiter unten in diesem Thema.
CONTAINSTABLE

Suchen nach einem bestimmten Wort oder Phrase (einfacher Begriff)

Sie können CONTAINS, CONTAINSTABLE, FREETEXT oder FREETEXTTABLE verwenden, um eine Tabelle nach einem bestimmten Ausdruck zu durchsuchen. Wenn Sie beispielsweise die Tabelle in der ProductReviewAdventureWorks2012-Datenbank durchsuchen möchten, um alle Kommentare zu einem Produkt mit dem Ausdruck "Lernkurve" zu finden, können Sie das CONTAINS-Prädikat wie folgt verwenden:

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

Die Suchbedingung kann in diesem Fall "Lernkurve" recht komplex sein und kann aus einem oder mehreren Begriffen bestehen.

Präfixsuchen (Präfixbegriff)

Sie können CONTAINS oder CONTAINSTABLE verwenden, um nach Wörtern oder Ausdrücken mit einem angegebenen Präfix zu suchen. Alle Einträge in der Spalte, die Text enthalten, der mit dem angegebenen Präfix beginnt, werden zurückgegeben. Um z. B. nach allen Zeilen zu suchen, die das Präfix top"-" enthalten, wie in top``ple, und top``pingtop. Die Abfrage sieht wie folgt aus:

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

Der gesamte Text, der mit dem Text übereinstimmt, der vor dem Sternchen (*) angegeben ist, wird zurückgegeben. Wenn der Text und das Sternchen nicht durch doppelte Anführungszeichen getrennt sind, wie in CONTAINS (DESCRIPTION, 'top*')der Volltextsuche, wird das Sternchen nicht als Wildcard betrachtet.

Wenn der Präfixausdruck ein Ausdruck ist, wird jedes Token, das den Ausdruck bildet, als separater Präfixausdruck betrachtet. Alle Zeilen mit Wörtern, die mit den Präfixbegriffen beginnen, werden zurückgegeben. Beispielsweise findet der Präfixausdruck "light bread*" Zeilen mit dem Text "leicht paniert", "leicht paniert" oder "leichtes Brot", aber es wird nicht "leicht toastiertes Brot" zurückgegeben.

Suchen nach Inflectionalformen eines bestimmten Worts (Generierungsausdruck)

Sie können CONTAINS, CONTAINSTABLE, FREETEXTTABLE oder FREETEXTTABLE verwenden, um nach allen verschiedenen Präsen und Konjugationen eines Verbs oder der Singular- und Pluralformen eines Substantivs (eineflectionale Suche) oder nach synonymen Formen eines bestimmten Worts (einer Thesaurussuche) zu suchen.

Im folgenden Beispiel wird in der Spalte der Tabelle in der CommentsProductReviewAdventureWorks Datenbank nach einer beliebigen Form von "Fuß" ("Fuß", "Fuß" usw.) gesucht.

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

Hinweis

Die Volltextsuche verwendet Stemmere, mit denen Sie nach den verschiedenen Präsen und Konjugationen eines Verbs oder der Singular- und Pluralformen eines Substantivs suchen können. Weitere Informationen zu Stemmeren finden Sie unter Configure and Manage Word Breakers and Stemmers for Search.

Suchen nach Wörtern oder Ausdrücken mit gewichteten Werten (gewichteter Ausdruck)

Sie können CONTAINSTABLE verwenden, um nach Wörtern oder Ausdrücken zu suchen und einen Gewichtungswert anzugeben. Gewichtung, gemessen als Zahl von 0,0 bis 1,0, gibt die Wichtigkeit jedes Worts und Ausdrucks innerhalb einer Gruppe von Wörtern und Ausdrücken an. Eine Gewichtung von 0,0 ist die niedrigste, und eine Gewichtung von 1,0 ist die höchste.

Das folgende Beispiel zeigt eine Abfrage, die nach allen Kundenadressen sucht, wobei Gewichtungen verwendet werden, in denen jeder Text, der mit der Zeichenfolge "Bay" beginnt, entweder "Street" oder "View" aufweist. Die Ergebnisse geben den Zeilen, die mehr der angegebenen Wörter enthalten, eine höhere Rangfolge.

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 Ausdruck kann in Verbindung mit jedem einfachen Ausdruck, Präfixausdruck, Generierungsausdruck oder Näherungsausdruck verwendet werden.

Anzeigen des Tokenisierungsergebnisses einer Worttrennungs-, Thesaurus- und Stopplistenkombination

Nachdem Sie eine bestimmte Kombination von Wortzerlegung, Thesaurus und Stoppliste auf eine Abfragezeichenfolge angewendet haben, können Sie das Tokenisierungsergebnis in der dynamischen Verwaltungsansicht sys.dm_fts_parser anzeigen. Weitere Informationen finden Sie unter sys.dm_fts_parser (Transact-SQL).

Siehe auch

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
Erstellen von Full-Text Suchabfragen (Visuelle Datenbank-Tools)
Verbessern der Leistung von Full-Text Abfragen