検索用のワード ブレーカーとステマーの構成と管理 (SQL Server)

適用対象: SQL Server Azure SQL データベース

ワード ブレーカーとステミング機能は、すべてのフルテキスト インデックス データに対して言語分析を実行します。 言語分析では、次の 2 つを行います。

  • 単語の境界 (単語区切り) の検出ワード ブレーカー が、言語の語彙の規則に基づいて単語の境界を検出し、個々の単語を識別します。 各単語 ( トークンともいいます) は、サイズを縮小するために圧縮された表現でフルテキスト インデックスに挿入されます。

  • 動詞の活用 (ステミング)ステミング機能 はその言語の規則に基づいて特定の語の変化形を生成します (たとえば、"running"、"ran"、"runner" は、"run" という語の変化形です)。

言語固有のワード ブレーカーとステマー

ワード ブレーカーとステミング機能は言語に固有のものであり、言語分析の規則は言語によって異なります。 言語固有のワード ブレーカーを使用すると、その言語に対する検索結果の精度が高くなります。

ワード ブレーカーとステマーは、SQL Server でサポートされるすべての言語に提供されており、通常は、特に操作をしなくても使用できます。

  • 言語ファミリにはワード ブレーカーが存在していても、特定のサブ言語は対象とされない場合は、主言語が使用されます。 たとえば、カナダ系フランス語テキストの処理には、フランス語のワード ブレーカーが使用されます。
  • 特定の言語用のワード ブレーカーが使用できない場合は、ニュートラル ワード ブレーカーが使用されます。 ニュートラル ワード ブレーカーを使用すると、単語は空白や句読点などのニュートラル文字で分割されます。

サポートされる言語の一覧の取得

SQL Server フルテキスト検索でサポートされている言語の一覧を見るには、次の Transact-SQL ステートメントを使用します。 この一覧に含まれる言語については、その言語のワード ブレーカーが登録されています。

SELECT * FROM sys.fulltext_languages

登録されているワード ブレーカーの一覧の取得

フルテキスト検索で、ある言語のワード ブレーカーを使用するには、それらが登録されている必要があります。 ワード ブレーカーを登録すると、関連する言語リソース (ステマー、ノイズ ワード (ストップワード)、類義語辞典ファイル) もフルテキスト インデックス操作やフルテキスト クエリ操作で使用できるようになります。

登録されているワード ブレーカー コンポーネントの一覧を表示するには、次のステートメントを使用します。

EXEC sp_help_fulltext_system_components 'wordbreaker';  
GO  

追加のオプションと詳細については、「sp_help_fulltext_system_components (Transact-SQL)」を参照してください。

ワード ブレーカーを追加または削除する場合

ワード ブレーカーを追加、削除、または変更すると、フルテキスト インデックスおよびフルテキスト クエリでサポートされている Microsoft Windows のロケール識別子 (LCID) の一覧を更新する必要があります。 詳細については、「 登録済みのフィルターおよびワード ブレーカーの表示または変更」を参照してください。

既定のフルテキスト言語オプションの設定

SQL Serverのローカライズされたバージョンでは、適切な言語が存在する場合、 SQL Server セットアップによって default full-text language オプションはサーバーの言語に設定されます。 SQL Serverのローカライズされていないバージョンでは、 [既定のフルテキスト言語] オプションは英語になります。

フルテキスト インデックスを作成または変更する場合は、フルテキスト インデックス列ごとに言語を指定できます。 列に言語が指定されていない場合、既定では構成オプション default full-text languageの値になります。

Note

1 つのフルテキスト クエリ関数句に指定されるすべての列は、クエリで LANGUAGE オプションが指定されていない限り、同じ言語を使用する必要があります。 クエリ対象のフルテキスト インデックスが付けられた列に使用する言語によって、フルテキスト クエリの述語 (CONTAINS および FREETEXT) および関数 (CONTAINSTABLE および FREETEXTTABLE) の引数に対して実行される言語分析が決まります。

インデックス列の言語の選択

フルテキスト インデックスを作成する際には、各インデックス列に対して言語を指定することをお勧めします。 列に言語が指定されていない場合、システムの既定の言語が使用されます。 列のインデックス作成に使用されるワード ブレーカーとステミング機能は、列の言語によって決まります。 また、指定した言語の類義語辞典ファイルが、列のフルテキスト クエリで使用されます。

フルテキスト インデックスの作成時に列の言語を選択する際には、注意点が 2 つあります。 これらの注意点は、テキストをトークン化する方法と、Full-Text Engine によるインデックス作成の方法にかかわるものです。 詳細については、「 フルテキスト インデックス作成時の言語の選択」を参照してください。

特定の列のワード ブレーカーの言語を表示するには、次のステートメントを実行します。

SELECT language_id AS 'LCID' FROM sys.fulltext_index_columns;

追加のオプションと詳細については、「sys.fulltext_index_columns (Transact-SQL)」をご覧ください。

単語区切りのタイムアウト エラーのトラブルシューティング

単語区切りのタイムアウト エラーは、さまざまな状況で発生する可能性があります。 エラーが発生する状況とその対処方法については、「MSSQLSERVER_30053」をご覧ください。

MSSQLSERVER_30053 エラーに関する情報

プロパティ
製品名 SQL Server
イベント ID 30053
イベント ソース MSSQLSERVER
コンポーネント SQLEngine
シンボル名 FTXT_QUERY_E_WORDBREAKINGTIMEOUT
メッセージ テキスト フルテキスト クエリ文字列の単語区切り処理がタイムアウトしました。 このタイムアウトは、ワード ブレーカーによるフルテキスト クエリ文字列の処理が長時間かかったか、サーバー上で実行されているクエリ数が多い場合に発生する可能性があります。 負荷を少なくしてクエリの再実行を試みてください。

説明

単語区切りのタイムアウト エラーは、次の状況で発生する可能性があります。

  • クエリ言語のワード ブレーカーが正しく構成されていない場合。たとえば、レジストリ設定が正しくない場合です。

  • ワード ブレーカーが特定のクエリ文字列に対して誤動作する。

  • ワード ブレーカーが特定のクエリ文字列に対して過剰なデータを返す。 過剰なデータは、バッファー オーバーラン攻撃を引き起こす可能性のあるものとして処理されます。これにより、単語区切りサービスをホストする、フィルター デーモン プロセス (fdhost.exe) がシャットダウンされます。

  • フィルター デーモン プロセスの構成が正しくない。

    パスワードの期限が切れている場合、またはドメイン ポリシーが原因でフィルター デーモン アカウントがログオンできない場合。この 2 つは、最も一般的な構成上の問題です。

  • クエリが集中的に行われるワークロードをサーバー インスタンスで実行している場合。たとえば、ワード ブレーカーによるフルテキスト クエリ文字列の処理が長時間かかったり、多数のクエリがサーバー上で実行されている場合です。 この状況がエラーの原因になることはまれです。

ユーザーの操作

次に示すように、タイムアウトについて考えられる原因に適した、ユーザーのアクションを選択してください。

考えられる原因 ユーザー アクション
クエリ言語のワード ブレーカーが正しく構成されていない。 サード パーティ製のワード ブレーカーを使用しているとき、ワード ブレーカーがオペレーティング システムに正しく登録されていない場合があります。 この場合は、ワード ブレーカーを再登録してください。 詳細については、「Revert the Word Breakers Used by Search to the Previous Version」(検索で使用するワード ブレーカーを以前のバージョンに戻す) を参照してください。
ワード ブレーカーが特定のクエリ文字列に対して誤動作する。 ワード ブレーカーが SQL Server でサポートされている場合は、マイクロソフト カスタマー サポート サービスに問い合わせてください。
ワード ブレーカーが特定のクエリ文字列に対して過剰なデータを返す。 ワード ブレーカーが SQL Server でサポートされている場合は、マイクロソフト カスタマー サポート サービスに問い合わせてください。
フィルター デーモン プロセスの構成が正しくない。 正しいパスワードを使用していることと、フィルター デーモン アカウントのログオンがドメイン ポリシーによって拒否されていないことを確認してください。
クエリが集中的に行われるワークロードをサーバー インスタンスで実行している。 負荷を少なくしてクエリの再実行を試みてください。

更新されたワード ブレーカーの影響について

各バージョンの SQL Server では、通常、新しいワード ブレーカーが含まれています。これらのワード ブレーカーでは、言語の規則が改良されているため、以前のワード ブレーカーよりも精度が向上しています。 新しいワード ブレーカーは、前のバージョンの SQL Server からインポートされたフルテキスト インデックスのワード ブレーカーとは少し動作が異なる場合もあります。

データベースが現在のバージョンの SQL Server にアップグレードされたときにフルテキスト カタログをインポートした場合は、この動作の違いが重要になります。 フルテキスト カタログのフルテキスト インデックスで使用される 1 つまたは複数の言語が、新しいワード ブレーカーに関連付けられる可能性があります。 詳細については、「フルテキスト検索のアップグレード」を参照してください。

参照

CREATE FULLTEXT INDEX (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)
フルテキスト検索に使用するストップワードとストップリストの構成と管理