sys.dm_fts_parser (Transact-SQL)
適用対象: SQL Server
特定の ワード ブレーカー、 類義語辞典、および ストップリスト の組み合わせをクエリ文字列入力に適用した後、最終的なトークン化の結果を返します。 トークン化の結果は、指定されたクエリ文字列のフルテキスト エンジンの出力と同じです。
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
ストップリストの ID (存在する場合) は、 lcid で識別されるワード ブレーカーによって使用されます。 stoplist_id は int です。'NULL' を指定した場合、ストップリストは使用されません。 0 を指定すると、システム STOPLIST が使用されます。
ストップリスト ID は、データベース内で一意です。 特定のテーブルのフルテキスト インデックスのストップリスト ID を取得するには、 sys.fulltext_indexes カタログ ビューを使用します。
accent_sensitivity
フルテキスト検索で分音文字を区別するかしないかを制御するブール値です。 accent_sensitivity は ビットで、次のいずれかの値があります。
値 | アクセントの感度は... |
---|---|
0 | 大文字と小文字は区別されない 「カフェ」や「カフェ」などの単語は同じように扱われます。 |
1 | 機密 「カフェ」や「カフェ」などの単語は扱い方が異なります。 |
Note
フルテキスト カタログのこの値の現在の設定を表示するには、次の Transact-SQL ステートメントを実行します: SELECT fulltextcatalogproperty('<catalog_name>', 'AccentSensitivity');
。
返されるテーブル
列名 | データ型 | 説明 |
---|---|---|
キーワード | varbinary (128) | ワード ブレーカーによって返される特定のキーワードの 16 進数表現。 この表記は、フルテキスト インデックスにキーワードを格納するために使用します。 この値は人間が判読することはできませんが、特定のキーワードを、 sys.dm_fts_index_keywords や sys.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 : 1million : 12 for multimillion |
occurrence | int | 解析結果の各用語の順序を示します。 たとえば、英語の "SQL Server query processor " という語句の場合、occurrence には語句内の用語に対する次のオカレンス値が格納されます。SQL : 12 for Server 3 for query processor : 4 |
special_term | nvarchar (4000) | ワード ブレーカーによって発行されている用語の特性に関する情報を格納します。次のいずれかになります。 - 完全一致 - ノイズ ワード - 文の終わり - 段落の末尾 - 章の終わり |
display_term | nvarchar (4000) | 人間が判読できるキーワードの形式を格納します。 フルテキスト インデックスのコンテンツにアクセスするように設計されている関数と同様に、ここに表示される用語は、非正規化の制限のため元の用語と同一とは限りません。 ただし、元の入力から識別するのに十分な精度が必要です。 |
expansion_type | int | 特定の用語の拡張の特性に関する情報を格納します。次のいずれかになります。 0 = 単一の単語の大文字と小文字 2 = 変曲拡張 4 = 類義語辞典の拡張/置換 たとえば、類義語辞典で run が jog の拡張として定義されている場合を考えてみます。<expansion> <sub>run</sub> <sub>jog</sub> </expansion> FORMSOF (FREETEXT, run) という用語では、次の出力が生成されます。run expansion_type = 0 の場合runs with expansion_type = 2running with expansion_type = 2ran with expansion_type = 2jog expansion_type = 4 の場合 |
source_term | nvarchar (4000) | 特定の用語の生成元または解析元になった用語または語句です。 たとえば、 '"word breakers" AND stemmers' のクエリでは、英語で次の source_term 値が生成されます。word breakers display_term用 word word breakers display_term用 breakers stemmers display_term用 stemmers |
解説
sys.dm_fts_parser
では、CONTAINS、FREETEXT、CONTAINSTABLE FREETEXTTABLE などの関数など、フルテキスト述語の構文と機能がサポート。
特殊文字の解析に 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
はフルテキスト クエリに関する他の多くの問題を理解し、トラブルシューティングするのに大きく役立ちます。
アクセス許可
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);