フルテキスト検索のアーキテクチャ
フルテキスト検索は Full-Text Engine によって実行されます。Full-Text Engine にはインデックス作成サポートとクエリ サポートの 2 つの役割があります。
SQL Server 2008 以降のフルテキスト検索のアーキテクチャは、次のプロセスで構成されています。
SQL Server プロセス (sqlservr.exe)
注 MSFTESQL サービスは、SQL Server 2008 以降のバージョンには存在しません。SQL Server 2005 以前のバージョンの MSFTESQL サービスで実行されていたフルテキスト タスクは、SQL Server プロセスで実行されるようになりました。
フィルタ デーモン ホスト プロセス (fdhost.exe)
セキュリティ上の理由から、SQL Server 2008 以降では、フィルタはフィルタ デーモン ホストと呼ばれる個別のプロセスによって読み込まれます。サーバー インスタンスでは、マルチスレッド フィルタに対してはすべてマルチスレッド処理が使用され、シングル スレッド フィルタに対してはすべてシングル スレッド処理が使用されます。
注 fdhost.exe は、SQL Server 2005 以前のバージョンの Full-Text Engine フィルタ デーモン (msftefd.exe) に代わるものです。
fdhost.exe プロセスは、FDHOST ランチャー サービス (MSSQLFDLauncher) によって作成され、FDHOST ランチャー サービス アカウントのセキュリティ資格情報を基に実行されます。そのため、フルテキスト インデックスやフルテキスト クエリを使用する場合は、このサービスが実行されている必要があります。このサービスのサービス アカウントの設定の詳細については、「フルテキスト検索の FDHOST ランチャー (MSSQLFDLauncher) サービス アカウントを設定する方法 (SQL Server 構成マネージャー)」を参照してください。
これらのプロセスには、フルテキスト検索のアーキテクチャのコンポーネントが含まれます。次の図は、各コンポーネントとその関係をまとめたものです。図の後で、各コンポーネントについて説明します。
SQL Server プロセス
フルテキスト検索では、SQL Server プロセスの次のコンポーネントが使用されます。
ユーザー テーブル
これらのテーブルには、フルテキスト インデックスを作成する対象のデータが格納されます。
フルテキスト Gatherer
フルテキスト Gatherer は、フルテキスト クロール スレッドと連携して動作します。このコンポーネントは、フルテキスト インデックス作成のスケジュール設定や実行、およびフルテキスト カタログの監視を行います。
注 SQL Server 2008 以降では、フルテキスト カタログは仮想オブジェクトであり、ファイル グループには属しません。フルテキスト カタログは、フルテキスト インデックスのグループを指す論理的概念です。
類義語辞典ファイル
このファイルには、検索語句のシノニムが含まれています。詳細については、「類義語辞典の構成」を参照してください。
ストップ リスト オブジェクト
ストップ リスト オブジェクトには、頻繁に出現する、検索に不要な語の一覧が含まれています。詳細については、「ストップ ワードとストップ リスト」を参照してください。
注 ストップ リスト オブジェクトは、SQL Server 2005 以前のバージョンのノイズ ワード ファイルに代わるものです。
SQL Server クエリ プロセッサ
クエリ プロセッサは、SQL クエリをコンパイルして実行します。SQL クエリにフルテキスト検索クエリが含まれる場合、コンパイル時と実行時にクエリが Full-Text Engine に送信されます。クエリ結果は、フルテキスト インデックスと照合されます。詳細については、「Full-Text Engine」を参照してください。
Full-Text Engine
SQL Server の Full-Text Engine は、クエリ プロセッサと完全に統合されています。Full-Text Engine は、フルテキスト クエリをコンパイルして実行します。クエリの実行の一環として、Full-Text Engine が類義語辞典とストップ リストから入力を受け取る場合があります。SQL Server 2008 以降のバージョンでは、Full-Text Engine for SQL Server は SQL Server クエリ プロセッサ内で実行されます。
インデックス ライタ (インデクサ)
インデックス ライタは、インデックスが作成されたトークンの保存に使用される構造を構築します。
フィルタ デーモン マネージャ
フィルタ デーモン マネージャは、Full-Text Engine フィルタ デーモン ホストの状態を監視します。
フィルタ デーモン ホスト
フィルタ デーモン ホストは、Full-Text Engine によって起動されるプロセスです。このプロセスでは、次に示されているフルテキスト検索コンポーネントが実行されます。これらのコンポーネントは、テーブルのデータにアクセスしたりフィルタを適用したり、データを単語に区切ったりします。また、クエリ入力の単語区切りやステミングを行います。
フィルタ デーモン ホストのコンポーネントは次のとおりです。
プロトコル ハンドラ
このコンポーネントは、メモリからデータを取り出して追加処理を行ったり、指定されたデータベースのユーザー テーブルのデータにアクセスしたりします。このコンポーネントの役割の 1 つは、フルテキスト インデックスが設定された列からデータを収集し、フィルタ デーモン ホストに渡すことです。その後にフィルタ デーモン ホストで、必要に応じてフィルタやワード ブレーカが適用されます。
フィルタ
一部のデータ型では、ドキュメント内のデータにフルテキスト インデックスを設定する前にフィルタ処理が必要になります。varbinary、varbinary(max)、image、または xml 列のデータなどです。特定のドキュメントで使用されるフィルタは、そのドキュメント型によって異なります。たとえば、Microsoft Word (.doc) 文書、Microsoft Excel (.xls) ドキュメント、および XML (.xml) ドキュメントでは、それぞれ異なるフィルタが使用されます。フィルタは、ドキュメントからテキストのチャンクを抽出し、埋め込みの書式設定を削除してテキストを保持します。場合によっては、テキストの位置に関する情報も保持されます。結果は、テキスト情報のストリームになります。詳細については、「フルテキスト検索フィルター」を参照してください。
ワード ブレーカとステミング機能
ワード ブレーカは、特定の言語の語彙の規則に基づいて単語の境界を検出する言語固有のコンポーネントです (単語区切り)。各ワード ブレーカには、動詞を活用して変化形の拡張を行う言語固有のステミング機能コンポーネントが関連付けられています。インデックスの作成時、フィルタ デーモン ホストでは、ワード ブレーカとステミング機能を使用して特定のテーブル列のテキスト データに関する言語分析を実行します。列のインデックス作成に使用されるワード ブレーカとステミング機能は、フルテキスト インデックスのテーブル列に関連付けられた言語によって決まります。詳細については、「ワード ブレーカーとステミング機能」を参照してください。
注 すべてのフルテキスト言語コンポーネントについては、「フルテキスト言語コンポーネントの構成」を参照してください。