FREETEXTTABLE (Transact-SQL)
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
Transact-SQL SELECT ステートメントの FROM 句 で使用される関数で、文字ベースのデータ型を含むフルテキスト インデックス付き列に対して SQL Server フルテキスト検索を実行します。 この関数は、指定した freetext_string内のテキストの意味だけでなく、正確な文言に一致する値を含む列の 0 行、1 行、または複数行のテーブルを返します。 FREETEXTTABLE は、通常のテーブル名であるかのように参照されます。
FREETEXTTABLE は、 FREETEXT (Transact-SQL)と同じ種類の一致に役立ちます。
FREETEXTTABLE を使用するクエリでは、各行の関連性ランク付け値 (RANK) とフルテキスト キー (KEY) が返されます。
Note
SQL Server でサポートされているフルテキスト検索の形式については、「フルテキスト検索でのクエリ」を参照してください。
構文
FREETEXTTABLE (table , { column_name | (column_list) | * }
, 'freetext_string'
[ , LANGUAGE language_term ]
[ , top_n_by_rank ] )
引数
テーブル
フルテキスト クエリ用にマークされているテーブルの名前を指定します。 table または view 1、2、または 3 部構成のデータベース オブジェクト名を指定できます。 ビューに対してクエリを実行する場合は、フルテキスト インデックスが作成されたベース テーブルを 1 つだけ指定できます。
table はサーバー名を指定できず、リンク サーバーに対するクエリでは使用できません。
column_name
FROM 句で指定したテーブルのフルテキスト インデックス付きの列の名前を指定します。 列には、char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary、varbinary(max) のいずれかの型を指定できます。
column_list
コンマ区切りで複数の列を指定できます。 column_list は、かっこで囲む必要があります。 language_term を指定しない場合、column_list で指定するすべての列の言語は同じにする必要があります。
*
フルテキスト検索用に登録されているすべての列を使用して、指定した freetext_string を検索します。 language_termを指定しない限り、テーブル内のすべてのフルテキスト インデックス付き列の言語は同じである必要があります。
freetext_string
column_name で検索するテキストです。 単語、フレーズ、文など、あらゆるテキストを入力できます。 用語または一定の形式になっている用語がフルテキスト インデックス内に見つかった場合、一致するものと判断されます。
AND がキーワードである CONTAINS 検索条件とは異なり、単語 'and' を freetext_string で使用すると、ノイズ ワードまたは ストップワードと見なされ、破棄されます。
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 と同様に、返されるテーブルには KEY と RANK という名前の列があります。この列は、適切な行を取得し、行のランク付け値を使用するためにクエリ内で参照されます。
アクセス許可
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
language_term パラメーターと 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
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 の機能を比較する