次の方法で共有


FREETEXTTABLE (Transact-SQL)

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 ] )

引数

  • table
    フルテキスト クエリ用に指定されているテーブルの名前を指定します。 table または view には、1 ~ 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 の列で検索するテキストを指定します。 単語、フレーズ、文など、あらゆるテキストを入力できます。 用語または一定の形式になっている用語がフルテキスト インデックス内に見つかった場合、一致するものと判断されます。

    CONTAINS 検索条件では AND はキーワードになりますが、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 に変換されます。

    指定した言語が無効であるか、その言語に該当するリソースがインストールされていない場合は、エラーが返されます。 ニュートラル言語リソースを使用するには、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. INNER JOIN での FREETEXT の使用

次の例では、sweet、candy、bread、dry、または meat に関連するすべてのカテゴリについて、そのカテゴリ名と説明を返します。

USE AdventureWorks2012
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

B. 言語および最高順位の一致の指定

次の例は前と同じ例を使って、LANGUAGE language_term パラメーターと top_n_by_rank パラメーターの使用法を示しています。

USE AdventureWorks2012
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
注意

top_n_by_rank パラメーターを使用するために、LANGUAGE language_term パラメーターは必須ではありません。

関連項目

タスク

フルテキスト検索クエリの作成 (Visual Database Tools)

参照

CREATE FULLTEXT CATALOG (Transact-SQL)

CREATE FULLTEXT INDEX (Transact-SQL)

CONTAINS (Transact-SQL)

CONTAINSTABLE (Transact-SQL)

FREETEXT (Transact-SQL)

行セット関数 (Transact-SQL)

SELECT (Transact-SQL)

WHERE (Transact-SQL)

概念

フルテキスト検索の概要

フルテキスト カタログの作成と管理

フルテキスト インデックスの作成と管理

フルテキスト検索でのクエリ

precompute rank サーバー構成オプション