sys.dm_fts_parser (Transact-SQL)

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

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

構文

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

引数

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

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

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

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

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

    アクセントの区別

    0

    区別しない

    "café" と "cafe" のような単語が同じように扱われます。

    1

    区別する

    "café" と "cafe" のような単語が異なる単語として扱われます。

    注意

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

返されるテーブル

列名

データ型

説明

keyword

varbinary(128)

ワード ブレーカーによって返される、特定のキーワードの 16 進数表記です。この表記は、フルテキスト インデックスにキーワードを格納するために使用します。この値は人間が判読できる値ではありませんが、sys.dm_fts_index_keywordssys.dm_fts_index_keywords_by_document など、フルテキスト インデックスのコンテンツを返す他の動的管理ビューによって返される出力に特定のキーワードを関連付ける際に有用です。

注意
OxFF は、ファイルまたはデータセットの終わりを示す特殊文字を表します。

group_id

int

特定の用語の生成元になった論理グループを区別する際に役立つ整数値を格納します。たとえば、英語の場合、'Server AND DB OR FORMSOF(THESAURUS, DB)"' で次の group_id 値が生成されます。

group_iddisplay_term
1Server
2DB
3DB

phrase_id

int

フルテキストなどの複合語の代替形式がワード ブレーカーによって発行されているかどうかを区別する際に役立つ整数値を格納します。複合語 ('multi-million' など) が存在する場合、ワード ブレーカーによって代替形式が発行されることがあります。このような代替形式 (語句) は区別が必要になる場合があります。

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

phrase_iddisplay_term
1 multi
1 million
2 multimillion

occurrence

int

解析結果の各用語の順序を示します。たとえば、英語の "SQL Server query processor" という語句の場合、occurrence には語句内の用語に対する次の occurrence 値が格納されます。

occurrencedisplay_term
1 SQL
2 Server
3 query
4 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 値が生成されます。

source_termdisplay_term
word breakersword
word breakersbreakers
stemmersstemmers

説明

sys.dm_fts_parser では、CONTAINSFREETEXT などのフルテキスト述語および CONTAINSTABLEFREETEXTTABLE などの関数の構文と機能がサポートされます。

特殊文字の解析での Unicode の使用

クエリ文字列を解析する場合、クエリ文字列を Unicode として指定していない限り、sys.dm_fts_parser は接続先のデータベースの照合順序を使用します。したがって、ü や ç などの特殊文字を含む 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 は、フルテキスト クエリに関する他の多くの問題の理解やトラブルシューティングに大きく役立ちます。

権限

sysadmin 固定サーバー ロールのメンバーシップ、および指定したストップ リストに対するアクセス権が必要です。

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