フルテキスト インデックス作成とクエリのプロセス
フルテキスト検索のためのインデックス作成コンポーネントは、フルテキスト インデックスの初期作成を行い、以降フルテキスト インデックスの付いたテーブルのデータに変更があった場合には、このインデックスを更新します。Microsoft SQL Server 2005 では、フルテキスト インデックス作成をより効率的に処理できるようにフルテキスト収集メカニズムのアーキテクチャが改善され、パフォーマンスが大幅に向上しています。
フルテキスト インデックス作成のプロセス
フルテキスト作成 (クロールとも呼ばれます) を開始すると、データベース エンジンは大きなデータをバッチでメモリにプッシュして、Microsoft Full-Text Engine for SQL Server (MSFTESQL) にインデックス作成サービスを開始するように指示します。MSFTESQL サービスは、テーブルの 1 つまたは複数の列に格納されている文字とフォーマットされたバイナリ データにインデックスを作成します。フルテキスト エンジンはプロトコル ハンドラ コンポーネントを使用して、メモリからデータをプルし、追加の処理を行ってフルテキスト インデックスを作成します。
varbinary(max) 型または image 型の列に格納されたデータにインデックスを作成する場合には、IFilter インターフェイスを実装するフィルタが、そのデータに指定されたファイル フォーマット (Microsoft Word など) に基づいてテキストを抽出します。場合によっては、フィルタ コンポーネントは varbinary(max) 型または image 型のデータをサービス アカウントの Temp ディレクトリに書き込む必要があります。この場合、メモリへのプッシュは行われません。
一連の処理の中で、生成されたテキスト データがワード ブレーカに渡され、そこで個々のトークンまたはキーワードに分解されます。トークン化に使用する言語は列レベルで指定するか、varbinary(max) 型、image 型、または xml 型データのいずれかからフィルタ コンポーネントによって識別されます。
この後、追加の処理によってノイズ ワードが削除され、トークンが正規化されて、フルテキスト インデックスまたはインデックス フラグメントに格納されます。
作成が完了すると、最終的なマージ プロセスが起動され、インデックス フラグメントが 1 つのマスタ フルテキスト インデックスにマージされます。これにより、多数のインデックス フラグメントではなく、1 つのマスタ インデックスのみを照会すれば済むため、クエリのパフォーマンスが向上し、関連順位付けにもより的確なスコア (評価) 統計を適用できます。
メモ : |
---|
マスタのマージ処理では、インデックス フラグメントをマージする際に大量のデータを読み書きする必要があるため、大量の I/O が発生しますが、クエリの着信がブロックされることはありません。 |
フルテキスト クエリのプロセス
クライアントから送信されたフルテキスト クエリは、SQL Server プロセスの SQL Server QP (クエリ プロセッサ) に送られます。QP はこれを、フルテキスト クエリ コンポーネントに渡します。このコンポーネントは、OLE DB コマンドを作成し、そのコマンドを Microsoft Full-Text Engine for SQL Server (MSFTESQL) サービスに送信します。MSFTESQL プロセスでは、フルテキスト エンジンのクエリ プロセッサにより、ワード ブレーカやステミング機能だけでなく、類義語辞典ファイルやノイズ ワード ファイルも使用してクエリが処理されます。このクエリを処理した後、MSFTESQL サービスから SQL Server プロセスに結果セットが返されます。この結果セットは、さらに処理を行うために使用されるか、そのままクライアントに返されます。