ワード ブレーカーとステミング機能の構成と管理

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

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

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

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

ワードブレーカーとステマーは言語ごとに異なります

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

SQL Server データベース エンジンがサポートするすべての言語で提供されているワードブレーカーやステマーを使う場合、通常は特別な操作をする必要はありません。

  • 言語ファミリのワード ブレーカーがあるが、特定のサブ言語には使用されない場合は、メジャー言語が使用されます。 たとえば、カナダ系フランス語テキストの処理には、フランス語のワード ブレーカーが使用されます。

  • 特定の言語用のワード ブレーカーが使用できない場合は、ニュートラル ワード ブレーカーが使用されます。 ニュートラル ワード ブレーカーを使用すると、単語は空白や句読点などのニュートラル文字で分割されます。

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

Full-Text 検索でサポートされている言語一覧を見るには、以下の Transact-SQL 文を使用します。 この一覧に含まれる言語については、その言語のワード ブレーカーが登録されています。

SELECT *
FROM sys.fulltext_languages;

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

フルテキスト検索で、ある言語のワード ブレーカーを使用するには、それらが登録されている必要があります。 登録されたワードブレーカーの場合、関連する言語リソースは全文のインデックス作成やクエリ操作にも利用可能になります。 これらのリソースにはステマー、ノイズワード(停止語)、シソーラスファイルが含まれます。

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

EXECUTE sp_help_fulltext_system_components 'wordbreaker';
GO

詳細については、「 sp_help_fulltext_system_components」を参照してください。

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

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

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

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

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

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

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

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

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

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

SELECT language_id AS 'LCID'
FROM sys.fulltext_index_columns;

詳細については、 sys.fulltext_index_columnsを参照してください。

単語分割処理タイムアウト エラーのトラブルシューティング

単語分割処理タイムアウト エラーは、さまざまな状況で発生する可能性があります。 これらの状況と各状況での対応方法については、 MSSQLSERVER_30053を参照してください。

MSSQLSERVER_30053エラーに関する情報

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

説明

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

  • クエリ言語のワード ブレーカーが正しく構成されていない。 例えば、レジストリの設定が正しくありません。

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

  • ワード ブレーカーが特定のクエリ文字列に対して過剰なデータを返す。 余剰データはバッファオーバーラン攻撃の可能性として扱われ、ワードブレーディングサービスをホストするフィルターデーモンプロセス(fdhost.exe)を停止します。

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

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

  • クエリが集中的に行われるワークロードをサーバー インスタンスで実行している。 例えば、ワードブレーカーが全文クエリ文字列の処理に時間がかかったり、多数のクエリがサーバー上で実行されている場合などです。 これは最も可能性の低い原因です。

ユーザー アクション

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

考えられる原因 ユーザー アクション
クエリ言語のワード ブレーカーが正しく構成されていない。 サード パーティ製ワード ブレーカーを使用している場合は、オペレーティング システムに誤って登録されている可能性があります。 この場合は、ワード ブレーカーを再登録してください。 詳細については、「 Full-Text Search で使用されるワード ブレーカーを以前のバージョンに戻す」を参照してください。
ワード ブレーカーが特定のクエリ文字列に対して誤動作する。 ワードブレーカーがデータベース エンジンでサポートされている場合は、Microsoft カスタマー サービス & サポートにお問い合わせください。
ワード ブレーカーが特定のクエリ文字列に対して過剰なデータを返す。 ワードブレーカーがデータベース エンジンでサポートされている場合は、Microsoft カスタマー サービス & サポートにお問い合わせください。
フィルター デーモン プロセスの構成が正しくない。 現在のパスワードを使用していること、およびドメイン ポリシーがフィルター デーモン アカウントのログオンを妨げていることを確認します。
クエリが集中的に行われるワークロードをサーバー インスタンスで実行している。 負荷を少なくしてクエリの再実行を試みてください。

更新されたワード ブレーカーの影響を理解する

各バージョンのデータベース エンジンには、言語ルールの改訂を含む更新されたワードブレーカーを含めることができます。 これらの更新されたワードブレーカーは、以前のデータベース エンジンからインポートされた全文インデックスのワードブレーカーとは異なる挙動を示す可能性があります。

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