FREETEXTTABLE (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Transact-SQL SELECT ステートメントの FROM 句で使用される関数で、文字ベースのデータ型を含むフルテキスト インデックス付き列に対してSQL Serverフルテキスト検索を実行します。 この関数は、指定した freetext_string内のテキストの正確な表現だけでなく、意味に一致する値を含む列の 0 行、1 行、または複数行のテーブルを返します。 FREETEXTTABLE は、通常のテーブル名であるかのように参照されます。

FREETEXTTABLE は、 FREETEXT (Transact-SQL) と同じ種類の一致に役立ちます。

FREETEXTTABLE を使用するクエリでは、各行の関連性ランク付け値 (RANK) とフルテキスト キー (KEY) が返されます。

注意

SQL Server でサポートされているフルテキスト検索の形式については、「フルテキスト検索でのクエリ」を参照してください。

Transact-SQL 構文表記規則

構文

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

引数

テーブル
フルテキスト クエリ用にマークされているテーブルの名前を指定します。 テーブル または ビューには、1 部構成、2 部構成、または 3 部構成のデータベース オブジェクト名を指定できます。 ビューに対してクエリを実行する場合は、フルテキスト インデックスが作成されたベース テーブルを 1 つだけ指定できます。

テーブル はサーバー名を指定できず、リンク サーバーに対するクエリでは使用できません。

column_name
FROM 句で指定したテーブルのフルテキスト インデックス付きの列の名前を指定します。 列には、charvarcharncharnvarchartextntextimagexmlvarbinaryvarbinary(max) のいずれかの型を指定できます。

column_list
コンマ区切りで複数の列を指定できます。 column_list は、かっこで囲む必要があります。 language_term を指定しない場合、column_list で指定するすべての列の言語は同じにする必要があります。

*
フルテキスト検索用に登録されているすべての列を使用して、指定した freetext_string を検索します。 language_termを指定しない限り、テーブル内のすべてのフルテキスト インデックス付き列の言語は同じである必要があります。

freetext_string
column_name で検索するテキストです。 単語、フレーズ、文など、あらゆるテキストを入力できます。 用語または一定の形式になっている用語がフルテキスト インデックス内に見つかった場合、一致するものと判断されます。

AND がキーワードである CONTAINS 検索条件とは異なり、 freetext_string で使用すると、単語 'and' はノイズ ワードまたは ストップワードと見なされ、破棄されます。

WEIGHT、FORMSOF、ワイルドカード、NEAR、その他の構文は使用できません。 freetext_string は単語、語幹に分割され、類義語がチェックされて渡されます。

LANGUAGE language_term
クエリにおいて、単語区切り、語幹への分割、類義語のチェック、ストップワードの破棄を行うときに使用する言語リソースの言語を指定します。 このパラメーターは省略可能で、言語のロケール識別子 (LCID) に対応する文字列、整数、または 16 進数の値を指定できます。 language_term を指定した場合、その言語は検索条件のすべての要素に適用されます。 値を指定しなかった場合は、列のフルテキストの言語が使用されます。

1 つの列に言語の異なる複数のドキュメントが BLOB (Binary Large Object) として格納されている場合、そのインデックスの作成に使用される言語は、そのドキュメントのロケール識別子 (LCID) によって決まります。 このような列に対してクエリを実行する場合、 LANGUAGE language_term を指定すると、一致する可能性が高くなる可能性があります。

language_term を文字列で指定する場合は、「sys.syslanguages (Transact-SQL)」の互換性ビューの alias 列の値と同じ値を指定します。 文字列の場合は、'language_term' のように引用符 (') で囲む必要があります。 language_term を整数で指定する場合は、その言語を表す実際の LCID を指定します。 language_term を 16 進数の値で指定する場合は、「0x」の後に LCID の 16 進数の値を指定します。 16 進数の値は、先頭の 0 を含め、8 桁以内で指定してください。

値を 2 バイト文字セット (DBCS) の形式で指定すると、Microsoft SQL Server で Unicode に変換されます。

指定した言語が無効であるか、その言語に該当するリソースがインストールされていない場合は、SQL Server によりエラーが返されます。 ニュートラル言語リソースを使用するには、language_term に「0x0」を指定してください。

top_n_by_rank
ランク付けされた n個の一致のみを降順で返すように指定します。 整数値 n が指定されている場合にのみ適用されます。 top_n_by_rank を他のパラメーターと組み合わせた場合、クエリから返される行数は、実際にすべての述語に一致する行数より少なくなります。 top_n_by_rank では、最も関連性の高いヒットのみを取り消すことで、クエリのパフォーマンスを向上させることができます。

解説

フルテキストの述語と関数の対象は、FROM 述語で示される 1 つのテーブルです。 複数のテーブルを検索するには、FROM 句で結合テーブルを使用して、複数のテーブルが組み合わされた結果セットを検索します。

FREETEXTTABLE では、FREETEXT 述語と同じ検索条件が使用されます。

CONTAINSTABLE と同様に、返されるテーブルには KEYRANK という名前の列があり、クエリ内で参照され、適切な行を取得し、行のランク付け値を使用します。

アクセス許可

FREETEXTTABLE を呼び出すには、指定されるテーブルまたは参照されるテーブル列に対して適切な SELECT 権限が必要です。

A. 簡単な例

次の例では、2 つの列の単純なテーブルを作成して設定します。3 つの郡とそのフラグの色が一覧表示されます。 テーブルにフルテキスト カタログとインデックスを作成して設定します。 次に、 FREETEXTTABLE 構文を示します。

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. INNER JOIN での FREETEXT の使用

次の例では、 の意味 high level of performanceに一致する説明を含む製品の説明とランクを返します。

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. 言語および最高順位の一致の指定

次の例は同じであり、language_term パラメーターと top_n_by_rank パラメーターのLANGUAGE使用方法示しています。

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  

Note

LANGUAGE language_term パラメーターは、 top_n_by_rank パラメーターを使用する必要はありません。

参照

フルテキスト検索の概要
フルテキスト カタログの作成と管理
CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
フルテキスト インデックスの作成と管理
フルテキスト検索でのクエリ
フルテキスト検索クエリの作成 (Visual Database Tools)
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
行セット関数 (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
precompute rank サーバー構成オプション
Azure SQL Database と Azure SQL Managed Instance の機能を比較する