sys.dm_fts_parser (Transact-SQL)

適用対象:SQL Server

特定の ワード ブレーカー類義語辞典およびストップリスト の組み合わせをクエリ文字列入力に適用した後の最終的なトークン化結果を返します。 トークン化の結果は、指定したクエリ文字列のFull-Text エンジンの出力と同じです。

sys.dm_fts_parser は動的管理関数です。

構文

sys.dm_fts_parser ( 'query_string' , lcid , stoplist_id , accent_sensitivity )

引数

query_string

解析するクエリ。 query_stringCONTAINS 構文でサポートされる文字列チェーンを指定できます。 たとえば、変化形、類義語辞典、および論理演算子を含めることができます。

lcid

query_stringの解析に使用するワード ブレーカーのロケール識別子 (LCID)。

stoplist_id

lcid で識別されるワード ブレーカーによって使用されるストップリストの ID (存在する場合)。 stoplist_idint です。'NULL' を指定した場合、ストップリストは使用されません。 0 を指定すると、システム STOPLIST が使用されます。

ストップリスト ID はデータベース内で一意です。 特定のテーブルのフルテキスト インデックスのストップリスト ID を取得するには、 sys.fulltext_indexes カタログ ビューを使用します。

accent_sensitivity

フルテキスト検索で分音文字を区別するかしないかを制御するブール値です。 accent_sensitivityビットであり、次のいずれかの値を持ちます。

アクセントの感度は...
0 大文字と小文字は区別されない

「カフェ」や「カフェ」などの言葉は同じように扱われます。
1 重要

「カフェ」や「カフェ」などの言葉は扱い方が異なります。

注意

フルテキスト カタログのこの値の現在の設定を表示するには、Transact-SQL ステートメントを実行します。 SELECT fulltextcatalogproperty('<catalog_name>', 'AccentSensitivity');

返されるテーブル

列名 データ型 説明
キーワード (keyword) varbinary (128) ワード ブレーカーによって返される特定のキーワードの 16 進数表現。 この表記は、フルテキスト インデックスにキーワードを格納するために使用します。 この値は人間が読み取ることはできませんが、特定のキーワードを、 sys.dm_fts_index_keywordssys.dm_fts_index_keywords_by_documentなど、フルテキスト インデックスの内容を返す他の動的管理ビューによって返される出力に関連付ける場合に便利です。

メモ:0xFF は、ファイルまたはデータセットの末尾を示す特殊文字を表します。
group_id int 特定の用語が生成された論理グループを区別するのに役立つ整数値を含めます。 たとえば、英語の場合、'Server AND DB OR FORMSOF(THESAURUS, DB)"' で次の group_id 値が生成されます。

1: サーバー
2: DB
3: DB
phrase_id int ワード ブレーカーによって代替形式の複合語 (フルテキストなど) が発行されるケースを区別するのに役立つ整数値が含まれます。 複合語 ('multi-million' など) が存在する場合、ワード ブレーカーによって代替形式が発行されることがあります。 このような代替形式 (語句) は区別が必要になる場合があります。

たとえば、英語の場合、'multi-million' で次の phrase_id 値が生成されます。

multi: 1
million: 1
2 for multimillion
occurrence int 解析結果の各用語の順序を示します。 たとえば、英語の "SQL Server query processor" という語句の場合、occurrence には語句内の用語に対する次のオカレンス値が格納されます。

SQL: 1
2 for Server
3 for query
4 for processor
special_term nvarchar (4000) ワード ブレーカーによって発行されている用語の特性に関する情報を格納します。次のいずれかになります。

- 完全一致
- ノイズ ワード
- 文の終わり
- 段落の末尾
- チャプターの終わり
display_term nvarchar (4000) 人間が判読できるキーワードの形式を含みます。 フルテキスト インデックスのコンテンツにアクセスするように設計されている関数と同様に、ここに表示される用語は、非正規化の制限のため元の用語と同一とは限りません。 ただし、元の入力から識別するのに役立つ十分な精度を持つ必要があります。
expansion_type int 特定の用語の拡張の特性に関する情報を格納します。次のいずれかになります。

0 = 1 単語の大文字と小文字
2 = 変曲展開
4 = 類義語辞典の展開/置換

たとえば、類義語辞典で run が jog の拡張として定義されている場合を考えてみます。

<expansion>
<sub>run</sub>
<sub>jog</sub>
</expansion>

この用語 FORMSOF (FREETEXT, run) では、次の出力が生成されます。

run expansion_type = 0 の場合
runs expansion_type = 2 の場合
running expansion_type = 2 の場合
ran expansion_type = 2 の場合
jog expansion_type = 4 の場合
source_term nvarchar (4000) 特定の用語の生成元または解析元になった用語または語句です。 たとえば、 の '"word breakers" AND stemmers' クエリでは、英語で次の source_term 値が生成されます。

word breakersdisplay_termword
word breakersdisplay_termbreakers
stemmersdisplay_termstemmers

解説

sys.dm_fts_parserは、CONTAINS や FREETEXT などのフルテキスト述語の構文と機能、および CONTAINSTABLEFREETEXTTABLE などの関数サポートしています。

特殊文字の解析に Unicode を使用する

クエリ文字列を解析するときに、 sys.dm_fts_parser クエリ文字列を Unicode として指定しない限り、接続先のデータベースの照合順序が使用されます。 したがって、ü や ç などの特殊文字を含む Unicode 以外の文字列の場合、データベースの照合順序によっては、出力が予期しない場合があります。 データベース照合順序とは別にクエリ文字列を処理するには、文字列 Nの先頭に を付けます。つまり、 N'query_string'

詳細については、「 C.この記事で後述する特殊文字を含む文字列の出力を表示する 」を参照してください。

sys.dm_fts_parserを使用するタイミング

sys.dm_fts_parser は、デバッグの目的で強力な場合があります。 主な使用シナリオには、次のようなものがあります。

  • 特定のワード ブレーカーが特定の入力をどのように扱うかを理解するには

    クエリから予期しない結果が返されると、ワード ブレーカーがデータを解析して中断する方法が原因である可能性があります。 を使用 sys.dm_fts_parserすると、ワード ブレーカーがフルテキスト インデックスに渡す結果が検出されます。 さらに、フルテキスト インデックスで検索されないストップワードの用語を確認できます。 用語が特定の言語のストップワードであるかどうかは、関数で宣言されている stoplist_id 値で指定されたストップリストに含まれているかどうかによって異なります。

    アクセント秘密度フラグを使用すると、ワード ブレーカーが入力を解析する方法を確認できます。アクセントの秘密度情報を念頭に置いています。

  • ステマーが特定の入力にどのように作用するかを理解するには

    次の FORMSOF 句を含む CONTAINS クエリまたは CONTAINSTABLE クエリを指定することで、ワード ブレーカーとステマーがクエリ用語とそのステミング フォームを解析する方法を確認できます。

    FORMSOF( INFLECTIONAL, query_term )
    

    この結果から、フルテキスト インデックスに渡されている用語がわかります。

  • 類義語辞典が入力の全部または一部を拡張または置換する方法を理解するには

    以下を指定することもできます。

    FORMSOF( THESAURUS, query_term )
    

    このクエリの結果は、ワード ブレーカーと類義語辞典がクエリ用語にどのように作用するかを示しています。 類義語辞典から拡張または置換を確認し、フルテキスト インデックスに対して実際に発行されているクエリを特定することができます。

    ユーザーが問題を発生した場合:

    FORMSOF( FREETEXT, query_term )
    

    変曲と類義語辞典の機能は自動的に行われます。

上記の使用シナリオに加えて、 は、 sys.dm_fts_parser フルテキスト クエリに関する他の多くの問題を理解し、トラブルシューティングするのに大きく役立ちます。

アクセス許可

CREATE FULLTEXT CATALOG 権限と、指定したストップリストへのアクセス権が必要です。

A. キーワードまたは語句の特定のワード ブレーカーの出力を表示する

次の例では、LCID が 1033 で、次のクエリ文字列にストップリストがない英語ワード ブレーカーを使用した出力を返します。

The Microsoft business analysis

アクセントの区別は無効になっています。

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis" ', 1033, 0, 0);

B. ストップリスト フィルター処理のコンテキストで特定のワード ブレーカーの出力を表示する

次の例では、次のクエリ文字列で、LCID が 1033 の英語ワード ブレーカーと、ID が 77 の英語ストップリストを使用した出力を返します。

"The Microsoft business analysis" OR "MS revenue"

アクセントの区別は無効になっています。

SELECT * FROM sys.dm_fts_parser (' "The Microsoft business analysis"  OR " MS revenue" ', 1033, 77, 0);

C. 特殊文字を含む文字列の出力を表示する

次の例では、Unicode を使用して次のフランス語の文字列を解析します。

français

この例では、フランス語の LCID として 1036 と、ユーザー定義のストップリストの ID として 5 を指定します。 アクセントの区別が有効になっています。

SELECT * FROM sys.dm_fts_parser(N'français', 1036, 5, 1);

関連項目

次の手順