フルテキスト インデックス作成とクエリのプロセス

フルテキスト検索のためのインデックス作成コンポーネントは、フルテキスト インデックスの初期作成を行い、以降フルテキスト インデックスの付いたテーブルのデータに変更があった場合には、このインデックスを更新します。

フルテキスト インデックス作成のプロセス

フルテキスト作成 (クロールとも呼ばれます) を開始すると、Full-Text Engine は大きなデータをバッチでメモリにプッシュして、フィルタ デーモン ホストに通知します。フィルタ デーモン ホストは、データをフィルタ処理してから分解し、逆単語リストに変換します。次にフルテキスト検索が、変換されたデータを単語リストからプルし、データを処理してストップ ワードを削除し、バッチ用の単語リストを 1 つ以上の逆インデックスに保持します。

varbinary(max) 型または image 型の列に格納されたデータにインデックスを作成する場合には、IFilter インターフェイスを実装するフィルタが、そのデータに指定されたファイル フォーマット (Microsoft Word など) に基づいてテキストを抽出します。場合によっては、フィルタ コンポーネントは varbinary(max) 型または image 型のデータを filterdata フォルダに書き込む必要があります。この場合、メモリへのプッシュは行われません。

一連の処理の中で、生成されたテキスト データがワード ブレーカに渡され、そこで個々のトークンまたはキーワードに分解されます。トークン化に使用する言語は列レベルで指定するか、varbinary(max) 型、image 型、または xml 型データのいずれかからフィルタ コンポーネントによって識別されます。

この後、追加の処理によってストップ ワードが削除され、トークンが正規化されて、フルテキスト インデックスまたはインデックス フラグメントに格納されます。

作成が完了すると、最終的なマージ プロセスが起動され、インデックス フラグメントが 1 つのマスタ フルテキスト インデックスにマージされます。これにより、多数のインデックス フラグメントではなく、1 つのマスタ インデックスのみを照会すれば済むため、クエリのパフォーマンスが向上し、関連順位付けにもより的確なスコア (評価) 統計を適用できます。

注意

マスタのマージ処理では、インデックス フラグメントをマージする際に大量のデータを読み書きする必要があるため、大量の I/O が発生しますが、クエリの着信がブロックされることはありません。また、マスタ マージで大量のデータを処理すると、実行時間が長いトランザクションが発生し、チェックポイント時のトランザクション ログの切り捨てが遅れる場合があります。この場合、完全復旧モデルでは、トランザクション ログが非常に大きくなることがあります。完全復旧モデルを使用するデータベースで大きなフルテキスト インデックスを再編成する前に、実行時間が長いトランザクションのための十分な領域をトランザクション ログに割り当てることをお勧めします。詳細については、「トランザクション ログ ファイルのサイズの管理」を参照してください。

フルテキスト クエリのプロセス

クエリ プロセッサは、処理を行うためにクエリのフルテキストの一部を Full-Text Engine に送ります。Full-Text Engine は、単語区切りと、必要に応じて、類義語の拡張、語幹への分割、ストップ ワード (ノイズ ワード) の処理を実行します。次に、クエリのフルテキストの一部を SQL 演算子の形式で、主にストリーミング テーブル値関数 (STVF) として表現します。クエリの実行中、STVF は正しい結果を取り出すために逆インデックスにアクセスします。結果は、この時点でクライアントに戻されるか、さらに処理を加えてからクライアントに戻されます。