FREETEXTTABLE (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Ist eine Funktion, die in der FROM-Klausel einer Select-Anweisung von Transact-SQL verwendet wird, um eine SQL Server Volltextsuche für volltextindizierte Spalten auszuführen, die zeichenbasierte Datentypen enthalten. Diese Funktion gibt eine Tabelle mit null, einer oder mehreren Zeilen für diese Spalten zurück, die Werte enthalten, die der Bedeutung und nicht nur der genauen Formulierung des Texts im angegebenen freetext_string entsprechen. Auf FREETEXTTABLE wird wie auf einen regulären Tabellennamen verwiesen.

FREETEXTTABLE ist für die gleichen Übereinstimmungen wie FREETEXT (Transact-SQL) nützlich.

Abfragen, die FREETEXTTABLE verwenden, geben für jede Zeile einen Relevanzrangfolgenwert (Relevance Ranking Value, RANK) und einen Volltextschlüssel (KEY) zurück.

Hinweis

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

Transact-SQL-Syntaxkonventionen

Syntax

FREETEXTTABLE (table , { column_name | (column_list) | * }   
          , 'freetext_string'   
     [ , LANGUAGE language_term ]   
     [ , top_n_by_rank ] )  

Argumente

Tabelle
Der Name der Tabelle, die für Volltextabfragen markiert wurde. tabelle oder sichtkann ein ein-, zwei- oder dreiteiliger Datenbankobjektname sein. Bei der Abfrage einer Sicht kann nur eine volltextindizierte Basistabelle verwendet werden.

table kann keinen Servernamen angeben und kann nicht in Abfragen für Verbindungsserver verwendet werden.

column_name
Der Name einer oder mehrerer volltextindizierten Spalten der in der FROM-Klausel angegebenen Tabelle. Die Spalten können vom Typ char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary oder varbinary(max) sein.

column_list
Gibt an, dass verschiedene, durch Trennzeichen getrennte Spalten angegeben werden können. column_list muss in Klammern stehen. Sofern nicht language_term angegeben ist, muss die Sprache aller Spalten von column_list identisch sein.

*
Gibt an, dass alle für die Volltextsuche registrierten Spalten nach dem angegebenen freetext_string-Wert durchsucht werden. Sofern nicht language_term angegeben ist, muss die Sprache aller volltextindizierten Spalten in der Tabelle identisch sein.

freetext_string
Der Text, nach dem in column_name gesucht werden soll. 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.

Im Gegensatz zur CONTAINS-Suchbedingung, bei der AND ein Schlüsselwort ist, wird das Wort "and" bei verwendung in freetext_string als Rauschwort oder Stoppwort betrachtet und verworfen.

Die Verwendung von WEIGHT, FORMSOF, Platzhaltern, NEAR und anderer Syntax ist nicht zulässig. Für freetext_string wird eine Worttrennung durchgeführt, und die Wörter werden auf den Stamm zurückgeführt und durchlaufen den Thesaurus.

LANGUAGE 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. Wird language_term angegeben, wird die entsprechende Sprache auf alle Elemente der Suchbedingung angewendet. 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 kann die Angabe von LANGUAGE language_term die Wahrscheinlichkeit einer guten Übereinstimmung erhöhen.

In Form einer Zeichenfolge entspricht language_term dem Wert der alias-Spalte in der sys.syslanguages (Transact-SQL)-Kompatibilitätsansicht. Die Zeichenfolge muss in einfache Anführungszeichen gesetzt werden, z.B. 'language_term'. In Form einer ganzen Zahl ist language_term der eigentliche Gebietsschemabezeichner, der die Sprache identifiziert. In Form eines Hexadezimalwerts ist language_term gleich 0x, gefolgt vom Hexadezimalwert des Gebietsschemabezeichners. Der Hexadezimalwert darf acht Ziffern nicht überschreiten, einschließlich führender Nullen.

Wird der Wert im Format Doppelbyte-Zeichensatz (Double-Byte Character Set, DBCS) angegeben, wird er von Microsoft SQL Server in Unicode konvertiert.

Wenn die angegebene Sprache nicht gültig ist oder keine Ressourcen installiert sind, die dieser Sprache entsprechen, gibt SQL Server einen Fehler zurück. Geben Sie 0x0 als language_term an, um neutrale Sprachressourcen zu verwenden.

Top_n_by_rank
Gibt an, dass nur die Übereinstimmungenmit dem höchsten Rang in absteigender Reihenfolge zurückgegeben werden. Gilt nur, wenn ein ganzzahliger Wert ( n) angegeben wird. Wenn top_n_by_rank mit anderen Parametern kombiniert wird, werden von der Abfrage möglicherweise weniger Zeilen zurückgegeben als die Anzahl von Zeilen, die mit allen Prädikaten übereinstimmen. top_n_by_rank können Sie die Abfrageleistung erhöhen, indem Sie nur die relevantesten Treffer abrufen.

Bemerkungen

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.

FREETEXTTABLE verwendet die gleichen Suchbedingungen wie das FREETEXT-Prädikat.

Wie CONTAINSTABLE enthält die zurückgegebene Tabelle Spalten mit den Namen KEY und RANK, auf die innerhalb der Abfrage verwiesen wird, um die entsprechenden Zeilen abzurufen und die Zeilenrangfolgewerte zu verwenden.

Berechtigungen

FREETEXTTABLE kann nur von Benutzern aufgerufen werden, die entsprechende SELECT-Berechtigungen für die angegebene Tabelle oder die referenzierten Spalten der Tabelle besitzen.

Beispiele

A. Einfaches Beispiel

Im folgenden Beispiel wird eine einfache Tabelle mit zwei Spalten erstellt und aufgefüllt, wobei 3 Landkreise und die Farben in ihren Flags aufgelistet sind. Der Erstellt und füllt einen Volltextkatalog und index für die Tabelle auf. Anschließend wird die FREETEXTTABLE-Syntax veranschaulicht.

CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));  
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);  
INSERT Flags VALUES ('France', 'Blue and White and Red');  
INSERT Flags VALUES ('Italy', 'Green and White and Red');  
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');  
SELECT * FROM Flags;  
GO  
  
CREATE FULLTEXT CATALOG TestFTCat;  
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;  
GO   
  
SELECT * FROM Flags;  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Blue');  
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Yellow');  

B. Verwenden von FREETEXT in einem INNER JOIN

Im folgenden Beispiel werden die Beschreibung und der Rang aller Produkte mit einer Beschreibung zurückgegeben, die der Bedeutung von high level of performanceentspricht.

USE AdventureWorks2022;  
GO  
  
SELECT FT_TBL.Description  
    ,KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL   
    INNER JOIN FREETEXTTABLE(Production.ProductDescription,  
    Description,   
    'high level of performance') AS KEY_TBL  
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY RANK DESC;  
GO  

C. Angeben der Sprache und der höchsten Übereinstimmungen

Das folgende Beispiel ist identisch und zeigt die Verwendung der LANGUAGEParameter language_term und top_n_by_rank .

USE AdventureWorks2022;  
GO  
  
SELECT FT_TBL.Description  
    ,KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL   
    INNER JOIN FREETEXTTABLE(Production.ProductDescription,  
    Description,   
    'high level of performance',  
    LANGUAGE N'English', 2) AS KEY_TBL  
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY RANK DESC;  
GO  

Hinweis

Der LANGUAGE language_term-Parameter ist nicht erforderlich, um den parameter top_n_by_rank zu verwenden.

Weitere Informationen

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 von Volltextsuchabfragen (Visual Database Tools)
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
Rowsetfunktionen (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
Rang vorausberechnen (Serverkonfigurationsoption)
Vergleichen von Features in Azure SQL-Datenbank und Azure SQL Managed Instance