FREETEXT (Transact-SQL)

 

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse

Ist ein Prädikat, das verwendet wird, der Transact-SQL WHERE-Klausel von eine Transact-SQL SELECT-Anweisung zum Ausführen einer SQL Server Volltextsuche für die Volltext-volltextindizierte Spalten mit zeichenbasierten Datentypen. Dieses Prädikat sucht nach Werten, die der Bedeutung der Suchbedingung entsprechen und nicht genau mit dem Wortlaut der Suchbedingung übereinstimmen. Bei Verwendung von FREETEXT führt das Modul für die Volltextabfrage intern die folgenden Aktionen für die Freetext_stringweist jedem Begriff eine Gewichtung und sucht dann nach Übereinstimmungen:

  • Trennt die Zeichenfolge in einzelne Wörter auf der Basis von Wortgrenzen (Wörtertrennung).

  • Generiert Flexionen der Wörter (Wortstammerkennung).

  • Legt eine Liste mit Erweiterungen oder Ersetzungen für die Begriffe auf der Basis von Übereinstimmungen im Thesaurus fest.

System_CAPS_ICON_note.jpg Hinweis


Informationen zu den Formen der Volltextsuche, die von unterstützt werden SQL Server, finden Sie unter Abfragen mit Volltextsuche.

Gilt für: SQL Server (SQL Server 2008 bis zur aktuellen Version).

Topic link icon Transact-SQL-Syntaxkonventionen

  
FREETEXT ( { column_name | (column_list) | * }   
          , 'freetext_string' [ , LANGUAGE language_term ] )  

Spaltenname
Der Name einer oder mehrerer volltextindizierten Spalten der in der FROM-Klausel angegebenen Tabelle. The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or varbinary(max).

column_list
Gibt an, dass verschiedene, durch Trennzeichen getrennte Spalten angegeben werden können. Column_list muss in Klammern eingeschlossen werden. Es sei denn, Language_term angegeben wird, die Sprache aller Spalten Column_list müssen identisch sein.

*
Gibt an, dass alle Spalten, die für die Volltextsuche registriert wurden verwendet werden soll, für die Suche nach der angegebenen Freetext_string. Wenn mehr als eine Tabelle in der FROM-Klausel ist * durch den Tabellennamen gekennzeichnet sein müssen. Es sei denn, Language_term angegeben ist, wird die Sprache aller Spalten der Tabelle muss identisch sein.

freetext_string
Suchtext in ist die Column_name. Es kann hierbei ein beliebiger Text aus Wörtern, Ausdrücken und Sätzen eingegeben werden. Übereinstimmungen werden dann generiert, wenn ein Begriff oder Formen eines Begriffs im Volltextindex gefunden werden.

Suchen Sie im Gegensatz zur CONTAINS-und CONTAINSTABLE Where-Bedingung AND ist ein Schlüsselwort in Freetext_string das Wort 'und' gilt als Füllwort oder Stoppwort, und werden verworfen.

Die Verwendung von WEIGHT, FORMSOF, Platzhaltern, NEAR und anderer Syntax ist nicht zulässig. Freetext_string ist wörtertrennung, bezeichnet, und übergeben den Thesaurus.

Freetext_string ist Nvarchar. Wird ein anderer Zeichendatentyp als Eingabe verwendet, findet eine implizite Konvertierung statt. Im folgenden Beispiel verursacht die @SearchWord-Variable, die als varchar(30) definiert ist, eine implizite Konvertierung im FREETEXT-Prädikat.

  
USE AdventureWorks2012;  
GO  
DECLARE @SearchWord varchar(30)  
SET @SearchWord ='performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  
  

Da "parametersniffing" nicht über die Konvertierung erfolgreich ist, verwenden Sie Nvarchar für eine bessere Leistung. Im Beispiel deklarieren @SearchWord als nvarchar(30).

  
USE AdventureWorks2012;  
GO  
DECLARE @SearchWord nvarchar(30)  
SET @SearchWord = N'performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  
  

Sie können auch den OPTIMIZE FOR-Abfragehinweis für Fälle verwenden, in denen ein nicht optimalen Plan generiert wird.

Sprache Language_term
Die Sprache, deren Ressourcen für die Wörtertrennung, die Wortstammerkennung und den Thesaurus sowie die Entfernung von Stoppwörtern in der Abfrage verwendet werden. Dieser Parameter ist optional und kann als Zeichenfolge, ganze Zahl oder Hexadezimalwert entsprechend dem Gebietsschemabezeichner (Locale Identifier – LCID) einer Sprache angegeben werden. Wenn Language_term angegeben ist, wird die entsprechende Sprache gelten für alle Elemente der Suchbedingung. Wird kein Wert angegeben, wird die Volltextsprache der Spalte verwendet.

Wenn Dokumente anderer Sprachen zusammen als BLOBs (Binary Large Objects) in einer einzelnen Spalte gespeichert werden, legt der Gebietsschemabezeichner (LCID) eines bestimmten Dokuments die zur Indizierung seines Inhalts zu verwendende Sprache fest. Beim Abfragen einer solchen Spalte Angabe SpracheLanguage_term kann die Wahrscheinlichkeit einer hohen Übereinstimmung erhöhen.

Wenn als eine Zeichenfolge angegeben Language_term entspricht der Alias Spaltenwert in er sys.syslanguages (Transact-SQL) -kompatibilitätssicht angezeigt. Die Zeichenfolge muss in einfache Anführungszeichen eingeschlossen werden, wie in "Language_term". Wenn als eine ganze Zahl angegeben Language_term ist der eigentliche Gebietsschemabezeichner, der die Sprache identifiziert. Wenn als hexadezimaler Wert angegeben Language_term ist 0 X, gefolgt vom Hexadezimalwert des Gebietsschemabezeichners. Der Hexadezimalwert darf acht Ziffern nicht überschreiten, einschließlich führender Nullen.

Wenn der Wert im Format Doppelbyte-Zeichensatz (Character Set, DBCS) Microsoft SQL Server in Unicode konvertiert werden.

Wenn die angegebene Sprache nicht gültig, oder es ist keine Ressourcen installiert sind, die dieser Sprache entsprechen Microsoft SQL Server gibt einen Fehler zurück. Um neutrale Sprachressourcen zu verwenden, geben Sie 0 x 0 als Language_term.

Volltextprädikate und -funktionen gelten für eine einzelne Tabelle, die im FROM-Prädikat enthalten ist. Um eine Suche in mehreren Tabellen auszuführen, können Sie eine verknüpfte Tabelle in der FROM-Klausel verwenden, um in einem Resultset zu suchen, das aus mindestens zwei Tabellen erstellt wird.

Volltextabfragen mit FREETEXT sind nicht so genau wie Volltextabfragen mit CONTAINS. Das SQL Server-Volltextsuchmodul identifiziert wichtige Wörter und Ausdrücke. Reservierten Schlüsselwörtern und Platzhalterzeichen, die normalerweise eine Bedeutung besitzen, wenn sie im <contains_search_condition>-Parameter des CONTAINS-Prädikats angegeben werden, wird keine spezielle Bedeutung zugewiesen.

Volltextprädikate dürfen nicht der OUTPUT-Klausel Wenn Datenbank-Kompatibilitätsgrad auf 100 festgelegt ist.

System_CAPS_ICON_note.jpg Hinweis


Die FREETEXTTABLE-Funktion eignet sich für dieselben Übereinstimmungen wie das FREETEXT-Prädikat. Sie können diese Funktion z. B. in einen regulären Tabellennamen verweisen die FROM-Klausel von einer SELECT-Anweisung. Weitere Informationen finden Sie unter FREETEXTTABLE (Transact-SQL).

Sie können einen vierteiligen Namen in der CONTAINS oder FREETEXT-Prädikat zum Abfragen von volltextindizierten Spalten der Zieltabellen auf einem Verbindungsserver. 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.

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

A. 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  

B. Verwenden von FREETEXT mit Variablen

Im folgenden Beispiel wird kein bestimmter Suchbegriff, sondern eine Variable verwendet.

USE AdventureWorks2012;  
GO  
DECLARE @SearchWord nvarchar(30);  
SET @SearchWord = N'high-performance';  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  
GO  

Erste Schritte mit der Volltextsuche
Erstellen und Verwalten von Volltextkatalogen
CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
Erstellen und Verwalten von Volltextindizes
Abfragen mit Volltextsuche
Erstellen Sie die Volltextsuche-Abfragen (Visual Database Tools)
ENTHÄLT (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Datentypen (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
WOBEI (Transact-SQL)

Community-Beiträge

HINZUFÜGEN
Anzeigen: