FREETEXTTABLE (Transact-SQL)
更新 : 2006 年 7 月 17 日
文字ベースのデータ型を含む列に対して、freetext_string で指定したテキストの並びと正確に一致しなくても、意味が一致する値を検索し、0 行、1 行、またはそれ以上の行で構成されるテーブルを返します。FREETEXTTABLE は、SELECT ステートメントの FROM 句の中で通常のテーブル名のように指定できます。
FREETEXTTABLE を使用するクエリでは、フリーテキスト タイプのフルテキスト クエリを指定して、各行の関連順位値 (RANK) とフルテキスト キー (KEY) を取得します。
構文
FREETEXTTABLE (table , { column_name | (column_list) | * }
, 'freetext_string'
[ ,LANGUAGE language_term ]
[ ,top_n_by_rank ] )
引数
table
フルテキスト クエリ用に指定されているテーブルの名前を指定します。table または view には、1 ~ 3 つの要素で構成されるデータベース オブジェクト名を指定します。ビューに対してクエリを実行する場合は、フルテキスト インデックスが作成されたベース テーブルを 1 つだけ指定できます。詳細については、「Transact-SQL 構文表記規則 (Transact-SQL)」を参照してください。
table にサーバー名は指定できません。また、リンク サーバーに対するクエリでは使用できません。
- column_name
table にある、検索対象の列の名前を指定します。フルテキスト検索には、char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary(max) のデータ型の列が対応しています。
- column_list
コンマ区切りで複数の列を指定できます。column_list はかっこで囲む必要があります。language_term を指定しない場合、column_list で指定するすべての列の言語は同じにする必要があります。
- *
フルテキスト検索用に登録されているすべての列を使用して、指定した freetext_string を検索します。language_term を指定しない場合、テーブル内にあるすべてのフルテキスト インデックス付きの列の言語は、同じであることが必要です。
freetext_string
column_name の列で検索するテキストを指定します。単語、フレーズ、文など、あらゆるテキストを入力できます。用語または一定の形式になっている用語がフルテキスト インデックス内に見つかった場合、一致するものと判断されます。CONTAINS 検索条件では AND はキーワードになりますが、freetext_string では 'and' はノイズ語と見なされ、破棄されます。
WEIGHT、FORMSOF、ワイルドカード、NEAR、およびその他の構文は使用できません。freetext_string は単語、語幹に分割され、類義語がチェックされて渡されます。freetext_string を二重引用符 (") で囲むと、代わりにフレーズ マッチが実行され、語幹への分割と類義語のチェックは行われません。
LANGUAGE language_term
FREETEXTTABLE クエリにおいて、単語、語幹への分割、類義語のチェック、およびノイズ語の破棄を行うときに使用する言語リソースの言語を指定します。このパラメータは省略可能で、言語のロケール識別子 (LCID) に対応する文字列、整数、または 16 進数の値を指定できます。language_term を指定した場合、その言語は検索条件のすべての要素に適用されます。値を指定しなかった場合は、列のフルテキストの言語が使用されます。language_term を文字列で指定する場合は、syslanguages システム テーブルの alias 列の値と同じ値を指定します。文字列の場合は、'language_term' のように引用符 (') で囲む必要があります。language_term を整数で指定する場合は、その言語を表す実際の LCID を指定します。language_term を 16 進数の値で指定する場合は、"0x" の後に LCID の 16 進数の値を指定します。16 進数の値は、先頭の 0 を含め、8 桁以内で指定してください。
値を 2 バイト文字セット (DBCS) の形式で指定すると、Microsoft SQL Server で Unicode に変換されます。
指定した言語が無効であるか、その言語に該当するリソースがインストールされていない場合は、エラーが返されます。ニュートラル言語リソースを使用するには、language_term に "0x0" を指定してください。
top_n_by_rank
整数値 n を指定した場合、FREETEXTTABLE では一致する値が順位付けされ、その上位 n 件のみが返されます。FREETEXTTABLE 述語と共にフィルタ選択を実行すると、上位 n 行にフィルタが適用され、その結果 top_n_by_rank で指定した行数よりも少ない行が返されます。sp_configure ストアド プロシージャで precompute rank オプションを有効にすると、top_n_by_rank パラメータを使用する FREETEXTTABLE クエリのパフォーマンスを向上させることができます。詳細については、「sp_configure (Transact-SQL)」および「sp_fulltext_service (Transact-SQL)」を参照してください。
解説
FREETEXTTABLE では、FREETEXT 述語と同じ検索条件が使用されます。
CONTAINSTABLE と同様、返されるテーブルには KEY と RANK という名前の列が含まれます。これらの列は、適切な行を取得したり、行の順位値を使用するために、クエリ内で参照されます。
FREETEXTTABLE は、互換性レベルが 70 未満の場合はキーワードとして認識されません。詳細については、「sp_dbcmptlevel (Transact-SQL)」を参照してください。
権限
FREETEXTTABLE を呼び出すには、指定されるテーブルまたは参照されるテーブル列に対して適切な SELECT 権限が必要です。
例
次の例では、sweet
、candy
、bread
、dry
、または meat
に関連するすべてのカテゴリについて、そのカテゴリ名と説明を返します。
メモ : |
---|
この例を実行するには、Northwind データベースをインストールする必要があります。Northwind データベースのインストール方法については、「Northwind サンプル データベースと pubs サンプル データベースのダウンロード」を参照してください。 |
USE Northwind;
SELECT FT_TBL.CategoryName
,FT_TBL.Description
,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL
INNER JOIN FREETEXTTABLE(dbo.Categories, Description,
'sweetest candy bread and dry meat') AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
次の例は前と同じ例を使って、LANGUAGE
language_term パラメータと top_n_by_rank パラメータの使用法を示しています。
USE Northwind;
SELECT FT_TBL.CategoryName
,FT_TBL.Description
,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL
INNER JOIN FREETEXTTABLE(dbo.Categories, Description,
'sweetest candy bread and dry meat',LANGUAGE 'English',2)
AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
メモ : |
---|
top_n_by_rank パラメータを使用するために、LANGUAGE language_term パラメータは必須ではありません。 |
変更履歴
リリース | 履歴 |
---|---|
2006 年 7 月 17 日 |
|
参照
関連項目
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
行セット関数 (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
その他の技術情報
フルテキスト検索を使用した SQL Server へのクエリ
precompute rank オプション