FREETEXTTABLE (Transact-SQL)

文字ベースのデータ型を含む列に対して、freetext_string で指定したテキストの並びと正確に一致しなくても、意味が一致する値を検索し、0 行、1 行、またはそれ以上の行で構成されるテーブルを返します。FREETEXTTABLE を通常のテーブル名のように指定できるのは、SELECT ステートメントの FROM 句の中だけです。

FREETEXTTABLE を使用するクエリでは、フリーテキスト タイプのフルテキスト クエリを指定して、各行の関連順位値 (RANK) とフルテキスト キー (KEY) を取得します。

トピック リンク アイコン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 は単語、語幹に分割され、類義語がチェックされて渡されます。freetext_string を二重引用符 (") で囲むと、代わりにフレーズ マッチが実行され、語幹への分割と類義語のチェックは行われません。

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

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

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

    値を 2 バイト文字セット (DBCS) の形式で指定すると、MicrosoftSQL 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 と同様、返されるテーブルには KEYRANK という名前の列が含まれます。これらの列は、適切な行を取得したり、行の順位値を使用するために、クエリ内で参照されます。

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

次の例は前と同じ例を使って、LANGUAGElanguage_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 パラメータは必須ではありません。