(57)【特許請求の範囲】
【請求項１】
大規模なファイルシステムを検索対象とするファイル検索システムにおいて、
前記ファイルシステムのファイル・ディレクトリをスキャンして、ファイルパスのリストを生成する第１の処理機能部と、
各検索サーバに割り当てられる分割インデクスのそれぞれに対し、インデクスＩＤを割り当てる処理と、各インデクスＩＤを配置先となる検索サーバに紐付ける処理と、検索サーバの台数と各検索サーバに配置する分割インデクスの数とに基づいて、各インデクスＩＤに対してｎ個の仮想インデクスＩＤを紐付ける処理と、前記仮想インデクスＩＤの文字列からコンシステントハッシュ空間上のハッシュ値（第１のハッシュ値）を取得する処理と、前記ハッシュ値（第１のハッシュ値）と前記インデクスＩＤとの対応関係を示すテーブルを生成する処理と、前記リストから読み出されるファイルパスからコンシステントハッシュ空間上のハッシュ値（第２のハッシュ値）を取得する処理と、前記ハッシュ値（第２のハッシュ値）を用いて前記テーブルを参照し、各ファイルパスに対応付けるインデクスＩＤを決定する処理と、前記インデクスＩＤ毎に分割インデクスを生成する処理とを実行する第２の処理機能部と、
生成された分割インデクスを検索サーバに配置する第３の処理機能部と、
を有することを特徴とするファイル検索システム。
【請求項２】
請求項１に記載のファイル検索システムにおいて、
前記第２の処理機能部は、前記リストを任意の数に分割し、分割後の各リストに対する分割インデクスの生成処理を複数の分散処理システムに分散させる
ことを特徴とするファイル検索システム。
【請求項３】
請求項２に記載のファイル検索システムにおいて、
前記第２の処理機能部は、前記リストをインデクスＩＤ毎に分割する
ことを特徴とするファイル検索システム。
【請求項４】
請求項１に記載のファイル検索システムにおいて、
前記第１の処理機能部は、前記ファイルシステム上の任意のフォルダ階層毎に前記ファイルパスのリストを生成し、その生成のたび、生成されたリストを前記第２の処理機能部に与える
ことを特徴とするファイル検索システム。
【請求項５】
請求項１に記載のファイル検索システムにおいて、
検索サーバの追加時、ファイルパスから一意に算出されるハッシュ値をマッピングするコンシステントハッシュ空間上に設定された仮想インデクスＩＤのハッシュ値（第１のハッシュ値）とインデクスＩＤとの対応関係を更新する第４の処理機能部と、
更新後の前記対応関係を用い、分割インデクスの再配置を実行する第５の処理機能部と
を有することを特徴とするファイル検索システム。
【請求項６】
請求項１に記載のファイル検索システムにおいて、
検索サーバの削除時、削除対象とする検索サーバに割り当てられている分割インデクスに登録されているファイルパスから対応するインデクスＩＤを算出し、各インデクスＩＤに対応する再配置先の検索サーバ別のマージ用分割インデクスを生成する第６の処理機能部と
を有することを特徴とするファイル検索システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、大規模なファイル群を対象とした検索用インデクスの効率的な生成・更新・管理技術に関する。
【背景技術】
【０００２】
近年におけるアプリケーションの多様化やストレージコストの低価格化に伴い、ストレージに保存されるデータ量は爆発的に増加している。これに伴い、企業内で扱うドキュメントデータのデータ量も膨大になっている。このため、大量に存在するデータを有効活用するための検索システムの重要性が増している。
【０００３】
通常、検索対象とするドキュメントの数が膨大である場合、検索インデクス（索引データ）の事前の生成により、検索パフォーマンスの向上が図られている。この他、同じ検索インデクスを複数の検索サーバに設置して負荷を分散する方法や、複数の検索サーバ上に検索インデクスを分割配置し、検索処理を分散する方法等も、検索パフォーマンスの向上を図る方法として一般に採用されている。
【０００４】
このような技術背景において、検索インデクスの生成方法についても、様々な技術が提案されている。例えば特許文献１には、分割された検索インデクスのサイズの偏りをなるべく低減する手法が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−７０２５７号公報
【非特許文献】
【０００６】
【非特許文献１】Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Webhttp://www.akamai.com/dl/technical_publications/ConsistenHashingandRandomTreesDistributedCachingprotocolsforrelievingHotSpotsontheworldwideweb.pdf
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、現在のＩＴ情勢を考慮すると、検索対象となるデータ量は、今後ますます肥大化すると考えられる。また、検索サーバ数や分割インデクス数も膨大になることが容易に予想される。従って、今後は、分割インデクスを高速に生成できる仕組みが必要になると発明者らは考える。
【課題を解決するための手段】
【０００８】
そこで、発明者らは、前述した課題のうち分割インデクスの高速生成を目的として、各検索サーバに割り当てる分割インデクスの生成対象となるファイルパスのリストを生成する第１の処理機能部と、前記リストに基づいて分割インデクスを生成する第２の処理機能部と、生成された分割インデクスを検索サーバに配置する第３の処理機能部と、前記第１〜第３の処理機能部間における処理動作をパイプライン処理により実現する第４の処理機能部とを有するファイル検索システムを提案する。
【発明の効果】
【０００９】
本発明によれば、分割インデクスを高速に生成することができる。上述した以外の課題、構成及び効果は、以下の実施の形態の説明により明らかにされる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態に係る検索システムの概念構成を示す図。
【図２】検索サーバの機能構成例を示す図。
【図３】分散処理サーバの機能構成例を示す図。
【図４】管理サーバの機能構成例を示す図。
【図５】インデクスＩＤテーブルのデータ構造例を示す図。
【図６】検索サーバ管理テーブルのデータ構造例を示す図。
【図７】ファイル管理テーブルのデータ構造例を示す図。
【図８】システムの初期化フローを示す図。
【図９】インデクスＩＤテーブルの初期化フローを示す図。
【図１０】初期化が終了したインデクスＩＤテーブル例を説明する図。
【図１１】スキャナモジュールによるインデクスリストの生成フローを示す図。
【図１２】インデクス生成モジュールによる分割インデクスの生成フローを示す図。
【図１３】検索サーバへの分割インデクスの配置フローを示す図。
【図１４】検索サーバの追加時の処理フローを示す図。
【図１５】検索サーバの削除時の処理フローを示す図。
【発明を実施するための形態】
【００１１】
以下の実施の形態においては、複数のセクションに分割して、実施の形態に係る検索システムの実現に必要な処理機能を説明する。以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。以下の実施の形態において、その構成要素（要素ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではない。
【００１２】
また、以下の実施の形態において、各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路その他のハードウェアとして実現しても良い。また、前述した各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することにより実現しても良い。すなわち、ソフトウェアとして実現しても良い。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリやハードディスク、SSD（Solid State Drive）等の記憶装置、ICカード、SDカード、DVD等の記憶媒体に格納することができる。
【００１３】
また、制御線や情報線は、説明上必要と考えられるものを示すものであり、製品上必要な全ての制御線や情報線を表すものでない。実際にはほとんど全ての構成が相互に接続されていると考えて良い。
【００１４】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の機能を有する部材には同一または関連する符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さない。
【００１５】
［検索システムの全体構成］
図１に、本形態例に係る検索システムの構成例を示す。本形態例に係る検索システムは、検索クライアント１００、検索サーバ１０１、ファイルサーバ１０２、分散処理サーバ１０３、管理サーバ１０４から構成され、それらがネットワーク１０５を通じて互いに接続されている。ネットワーク１０５は、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）等として一般に知られるネットワークを用いて実現することができる。なお、ネットワーク１０５は、有線ネットワークでも無線ネットワークでも構わない。また、検索システムは、１つの領域・国内に構築される必要は無く、複数の地域・国間を跨いで構築されてもよい。
【００１６】
［検索クライアントの構成］
検索クライアント１００は、Ｗｅｂブラウザを動作させることができる環境がインストールされたコンピュータであり、据え置き型に限らず、携帯型のコンピュータ、携帯情報端末、携帯電話機の端末を含む。検索クライアント１００は、ＨＴＴＰ（Hypertext Transfer Protocol）等を使用して検索サーバ１０１に対して検索クエリを送信する機能と、検索サーバ１０１から検索結果を取得する機能と、取得した検索結果を利用者に表示する機能とを有している。検索クライアント１００は、検索システム上に複数存在する。
【００１７】
［検索サーバの構成］
図２に、検索サーバ１０１の内部構成例を示す。検索サーバ１０１は、検索クライアント１００から検索クエリを受信して検索処理を実行し、検索結果を返信するサーバである。検索サーバ１０１は、検索システム内に複数台存在し、それぞれがローカルストレージ２０１を保持している。ローカルストレージ２０１内には、ファイルサーバ１０２に保存されるファイル群に基づいて生成された検索用の分割インデクス２０２が保存されている。
【００１８】
検索サーバ１０１には、インデクス管理モジュール２０３と検索モジュール２０４がインストールされている。インデクス管理モジュール２０３は、分割インデクス２０２の管理・更新用のプログラムである。検索モジュール２０４は、検索用の分割インデクスを用いて検索処理を実行するプログラムである。因みに、インデクス管理モジュール２０３と検索モジュール２０４は、検索サーバ１０１のそれぞれにインストールされている。
【００１９】
分割インデクス２０２は、ファイルサーバ１０２上に保存されているファイル群に基づいて、管理サーバ１０４上のインデクス生成モジュール４０３及び分散処理サーバ１０３により生成される検索用のインデクスである。後述するように、分割インデクス２０２は、コンシステントハッシュ法に基づいて、インデクスＩＤ毎に分割されたインデクスである。なお、インデクスＩＤには分割インデクス２０２が紐付けられており、この紐付きを通じ、検索サーバ１０１に分割インデクス２０２が配置される。検索サーバ１０１上に配置させる分割インデクス２０２の数（インデクスの分割数）は、あらかじめ管理者が決定する。
【００２０】
インデクス管理モジュール２０３は、分割インデクス２０２を、検索サーバ１０１に配置・管理するモジュールである。分割インデクス２０２が新たに生成された場合、インデクス管理モジュール２０３は、分割インデクス２０２を検索サーバ１０１のローカルディスク２０１にダウンロードして保存する。
【００２１】
検索サーバ１０１に分割インデクス２０２が既に存在し、その分割インデクス２０２の更新操作を実行する場合、インデクス管理モジュール２０３は、既存の分割インデクス２０２に対して、新規に生成された分割インデクスをマージして最新の分割インデクスを生成する。
【００２２】
検索サーバ１０１の追加により、システム全体で保持している分割インデクスの数が増加した場合、インデクス管理モジュール２０３は、それぞれの検索サーバ１０１に保存されている既存の分割インデクス２０２をさらに分割する機能を有する。なお、新たに追加された検索サーバ１０１のインデクス管理モジュール２０３は、他の検索サーバ１０１で新規に分割されたインデクスを集約して１つの分割インデクス２０２を生成する機能を有する。
【００２３】
削除対象の検索サーバ１０１におけるインデクス管理モジュール２０３は、自サーバに保持されていた分割インデクス２０２をインデクスＩＤに従って再度分割し、他の検索サーバ１０１の分割インデクス２０２に割り振る機能を有する。
【００２４】
検索モジュール２０４は、検索サーバ１０１に配置された分割インデクス２０２を使用して、検索クライアント１００から受け取った検索クエリに対する検索結果を生成し、検索クライアント１００に検索結果を返信する機能を有する検索エンジンである。検索モジュール２０４は、他の検索サーバ群にインストールされているそれぞれの検索モジュール２０４と連携し、検索処理を分散的に実行する機能も有している。
【００２５】
［ファイルサーバの構成］
ファイルサーバ１０２は、企業内等において作成された大量のドキュメントデータを保存するサーバである。ファイルサーバ１０２は、検索システム内に複数台存在する。各ファイルサーバ１０２は、分散処理サーバ１０３及び管理サーバ１０４と、ＮＦＳ（Network File System）やＣＩＦＳ（Common Internet File System）等のプロトコルを通じて接続されている。これにより、分散処理サーバ１０３及び管理サーバ１０４上の各モジュールは、ファイルサーバ１０２上に存在するファイルへのアクセス及びファイル情報の取得が可能である。
【００２６】
［分散処理サーバの構成］
図３に、分散処理サーバ１０３の内部構成例を示す。分散処理サーバ１０３は、検索システム内に複数台存在する。これら複数の分散処理サーバ１０３は、一つの処理命令を他のサーバとの連携により分散的に処理する機能を有するサーバ群である。
【００２７】
分散処理サーバ１０３には、分散ファイルシステム３０２と分散処理モジュール３０３がインストールされている。分散処理サーバ１０３には、ローカルストレージ３０１が設けられている。分散ファイルシステム３０２は、ローカルストレージ３０１を用い、共通する一つのファイルシステムを全ての分散処理サーバ１０３から利用可能とするモジュールである。分散処理モジュール３０３は、管理サーバ１０４のインデクス生成モジュール４０２から命令を受けた場合、他の分散処理サーバ１０３と連携し、分割インデクス２０２を分散的に生成する機能を有するモジュールである。
【００２８】
［管理サーバの構成］
図４に、管理サーバ１０４の内部構成例を示す。管理サーバ１０４は、検索システムを構成する検索サーバ１０１、ファイルサーバ１０２、分散処理サーバ１０３等のサーバ管理機能を有するサーバである。管理サーバ１０４のローカルストレージ４０１には、分割インデクスの生成を制御するためのスキャナモジュール４０２、インデクス生成モジュール４０３、パイプライン制御モジュール４０４、システム管理モジュール４０５、インデクスＩＤテーブル４０６、検索サーバ管理テーブル４０７、ファイル管理テーブル４０８がインストールされている。これらのモジュールは、管理サーバ１０４以外に存在してもよい。例えばこれらのモジュールの全部又は一部は、分散処理サーバ１０３上で直接動作可能であってもよい。
【００２９】
スキャナモジュール４０２は、ファイルサーバ１０２上のファイル・ディレクトリをスキャンして、ファイル・フォルダパス名の一覧とそれらの属性情報を取得する機能と、それらのファイル・フォルダが新規生成・更新・削除のいずれの状態であるかを判定し、インデクスのターゲットとなるファイルパスが記述されたインデクスリストを生成する機能とを有するモジュールである。
【００３０】
スキャナモジュール４０２の機能は、以下の処理機能の実行を通じ実現することができる。例えばＬｉｎｕｘのＦｉｎｄコマンドを利用し、ファイルサーバ１０２上のファイル・ディレクトリパスの一覧とそれらの属性情報を取得する。この後、取得したファイル属性情報のハッシュ値を計算する。次に、任意のタイミングに取得しておいたファイル管理テーブル４０８（後述）に格納されているファイル属性情報のハッシュ値７０２（図７）と計算されたハッシュ値を比較し、その一致・不一致により、インデクス対象となるか否かを判定する。
【００３１】
ハッシュ値が同じであった場合、スキャナモジュール４０２は、該当するファイル・ディレクトリに更新が無いと判定し、インデクシングの対象外とする。ハッシュ値が異なる場合、スキャナモジュール４０２は、ファイル・ディレクトリに更新があったと判定し、インデクシング対象に設定する。
【００３２】
ファイル管理テーブル４０８にファイル・フォルダパス７０１が存在するにもかかわらず、Ｆｉｎｄコマンドによって取得できない場合、スキャナモジュール４０２は、当該ファイルパスがファイル削除を示すように、インデクスリストに情報を書き出す。
【００３３】
なお、インデクスリストは、インデクス処理対象のファイルパス、処理ステータスが記述されたテキストファイルである。インデクスリストに記載されるファイルパスと処理ステータスは、スキャナモジュール４０２がファイル管理テーブル４０８から抜き出して生成する一時ファイルであり、後述するインデクス生成モジュール４０３により利用される。
【００３４】
スキャナモジュール４０２は、各ファイルサーバ１０２上のファイルシステムのルートから最深部までを一度にスキャンするのでなく、１フォルダ階層毎又は任意のフォルダ階層毎にインデクスリストを出力し、インデクス生成モジュール４０３及びインデクス管理モジュール２０３の間でパイプライン処理を実行する。これにより、スキャナモジュール４０２がファイルサーバ１０２のスキャンを完全に終える前に、インデクス生成モジュール４０３及びインデクス管理モジュール２０３がインデクスの生成・更新処理を開始することが可能となり、インデクス生成速度の高速化を実現することが可能となる。
【００３５】
インデクス生成モジュール４０３は、スキャナモジュール４０２が出力したインデクスリストに基づいて、分散処理サーバ１０３にインデクスを分散的に生成させる機能を有するモジュールである。インデクス生成モジュール４０３は、コンシステントハッシュ法に基づいてファイルパスに対応するハッシュ値を算出し、当該ハッシュ値から対応するインデクスＩＤを求める。また、インデクス生成モジュール４０３は、インデクスＩＤ毎に分割インデクスを生成する。
【００３６】
インデクス生成モジュール４０３の処理は、タスクと呼ばれる処理単位に分割され、複数の分散処理サーバ１０３に分散される。なお、タスクは、分散処理サーバ１０３上において、第一の分散処理と第二の分散処理に分けて実行される。これらの処理は、大規模分散処理の技術として知られるＭａｐＲｅｄｕｃｅを使用することでも実現できる。その場合、第一の分散処理をＭａｐ処理、第二の分散処理をＲｅｄｕｃｅ処理として実現する。詳細動作については後述する。
【００３７】
パイプライン制御モジュール４０４は、インデクスの生成を高速化するために、スキャナモジュール４０２、インデクス生成モジュール４０３、インデクス管理モジュール２０３の処理を多重化制御するためのモジュールである。各モジュールのパイプライン制御に関する詳細動作は後述する。
【００３８】
システム管理モジュール４０５は、検索システム上に存在するサーバ群の管理や各種テーブルを初期化を実行する機能と、システムの初期化に係るパラメータを管理者が入力するためのユーザインターフェースを提供する機能とを有するモジュールである。
【００３９】
インデクスＩＤテーブル４０６の例を図５に示す。インデクスＩＤテーブル４０６は、仮想インデクスＩＤ５０１とインデクスＩＤ５０２を格納するテーブルであり、ファイルパスからインデクスＩＤを取得するために用いられる。インデクスＩＤテーブル４０６は、コンシステントハッシュ法の実現手段として利用される。
【００４０】
以下、コンシステントハッシュ法について解説する。コンシステントハッシュ法は、０〜２＾１２８−１（２＾１２８はＭＤ５ハッシュ法に基づく値。ＭＤ５は一例であって、任意のハッシュアルゴリズムを利用することが可能である）の整数の目盛りが振られた円周上にインデクスＩＤのハッシュ値を求めて配置し、円周上の範囲を分割する。なお、インデクスＩＤのハッシュ値を取得するとは、インデクスＩＤを文字列としてＭＤ５等のハッシュ関数を適用することを意味する。
【００４１】
ファイルパスからインデクスＩＤを取得するには、ファイルパスから同じハッシュ関数（この例ではＭＤ５）を利用してハッシュ値を求めて円周上に配置し、その位置から反時計回りに回って最初に遭遇するハッシュ値に対応するインデクスＩＤが、ファイルパスに紐付けるインデクスＩＤとなる。以上が基本的なコンシステントハッシュの概念である。ただし、単純なコンシステントハッシュ法は、各インデクスＩＤに割り当てられるファイル数は、円周上で分割される間隔に依存する。
【００４２】
このため、インデクスＩＤのハッシュ値だけで分割すると、インデクスＩＤの追加・削除を行った場合に、各インデクスＩＤに割り当てられるファイル数に偏りが生じてしまう。これは、インデクスサイズが各分割インデクス間で偏ることを意味し、検索パフォーマンスの劣化を招くことになる。このため、インデクスサイズを平準化する必要がある。
【００４３】
平準化を行うには、円周上に配置されるインデクスＩＤに対応する点の間隔を短くすることが必要となる。そこで、コンシステントハッシュ法の仮想ノードに相当する仮想インデクスＩＤを生成する。仮想インデクスＩＤは、インデクスＩＤに紐付けられるハッシュ値であり、１インデクスＩＤあたりｎ個の仮想インデクスＩＤを生成し、システム上に存在するそれぞれの分割インデクス間でサイズを平準化させる。仮想インデクスＩＤの生成と使用方法については後述する。
【００４４】
検索サーバ管理テーブル４０７の例を図６に示す。検索サーバ管理テーブル４０７は、インデクスＩＤ６０１と、そのインデクスＩＤが紐付けられている分割インデクスが配置されている配置先検索サーバ名６０２、分割インデクスの保存先のパス６０３、削除インデクスリストの保存先のパス６０４が格納されたテーブルである。削除インデクスリスト６０４は、インデクス生成モジュール４０３により生成される一時ファイルであり、検索サーバ１０１上に既に配置されている分割インデクス２０２において、削除すべきファイルパスが１行毎に書かれたテキストファイルである。
【００４５】
ファイル管理テーブル４０８の例を図７に示す。ファイル管理テーブル４０８は、ファイルサーバ１０２上に存在するファイル・フォルダパス名７０１の一覧と、それらの属性情報及びその属性情報から生成したハッシュ値７０２を保存・管理するためのテーブルである。このテーブルに保存されているハッシュ値７０２と、スキャナモジュール４０２のスキャン実行時に取得したファイルの属性情報から生成されるハッシュ値７０２を比較し、ファイルの更新状態（処理ステータス）７０３をチェックする。
【００４６】
［検索サーバ管理テーブルの初期化フロー］
図８に、検索サーバ管理テーブル４０７の初期化フローを示す。ここでは、検索サーバ１０１が２台存在し、各検索サーバ１０１上に２つ分割インデクス２０２を配置する場合を想定する。すなわち、検索システム全体におけるインデクスの分割数は４（＝２×２）である場合を想定する。また、２台の検索サーバ名は、”Ｓｅａｒｃｈ１”と”Ｓｅａｒｃｈ２”であるものとする。
【００４７】
まず、管理者は、検索サーバ管理テーブル４０７の初期化を行うために、検索サーバ１０１の台数、及び、各検索サーバ１０１上に配置する分割インデクス２０２の数からインデクスの分割数を設定する（Ｓ８０１）。
【００４８】
前述したように、この説明では、２台の検索サーバ１０１上に２つずつ分割インデクス２０２が配置されている。このため、全体のインデクス分割数は４である。この情報をシステム管理モジュール４０５に入力すると、システム管理モジュール４０５は、各分割インデクス２０２に対して割り振るインデクスＩＤを決定する（Ｓ８０２）。本明細書の場合、インデクスＩＤは０から始まる昇順の数字とする。すなわち、システム管理モジュール４０５は、「０」、「１」、「２」、「３」の順番にインデクスＩＤを割り振る。
【００４９】
次に、システム管理モジュール４０５は、各インデクスＩＤと検索サーバ１０１との紐付けを実行し（Ｓ８０３）、その結果を検索サーバ管理テーブル４０７に格納する（Ｓ８０４）。本実施例に場合、システム管理モジュール４０５が自動的にインデクスＩＤと検索サーバの紐付けを実行するが、管理者が手動で設定してもよい。
【００５０】
例えば本実施例の場合、検索サーバ管理テーブル４０７のエントリは、「インデクスＩＤ＝０，配置先検索サーバ名＝Ｓｅａｒｃｈ１」、「インデクスＩＤ＝１，配置先検索サーバ名＝Ｓｅａｒｃｈ１」、「インデクスＩＤ＝２，配置先検索サーバ名＝Ｓｅａｒｃｈ２」、「インデクスＩＤ＝３，配置先検索サーバ名＝Ｓｅａｒｃｈ２」の４つとなる。なお、初期化後の段階において、分割インデクス保存先パス６０３、削除インデクスリスト保存先パス６０４は空欄である。以上で、検索サーバ管理テーブル４０７の初期化が完了する。
【００５１】
［インデクスＩＤテーブルの初期化フロー］
図９に、インデクスＩＤテーブル４０６の初期化フローを示す。インデクスＩＤテーブル４０６の初期化も検索サーバ管理テーブル４０７の初期化と同様のタイミングで実行される。
【００５２】
まず、管理者が検索サーバ１０１の台数と各検索サーバ１０１上に配置する分割インデクスの数に基づいてインデクスの分割数を設定し（Ｓ９０１）、インデクスＩＤを決定する（Ｓ９０２）。
【００５３】
ここでも、インデクスＩＤは、「０」、「１」、「２」、「３」の４つであるものとする。なお、仮想インデクスＩＤの数は、一つのインデクスＩＤに対して２であるものとする。仮想インデクスＩＤの数は、最終的にインデクスＩＤに紐付けられるファイル数が平準化されるように定められる任意の固定値である。
【００５４】
次に、システム管理モジュール４０５は、１つのインデクスＩＤに対して任意の仮想インデクスＩＤを生成する（Ｓ９０３）。例えばインデクスＩＤ「０」に紐付ける仮想インデクスＩＤを「０−０」、「０−１」、インデクスＩＤ「１」に紐付ける仮想インデクスＩＤを「１−０」、「１−１」、インデクスＩＤ「２」に紐付ける仮想インデクスＩＤを「２−０」、「２−１」、インデクスＩＤ「３」に紐付ける仮想インデクスＩＤを「３−０」、「３−１」とする。
【００５５】
続いて、システム管理モジュール４０５は、仮想インデクスＩＤの文字列からハッシュ値を取得する（Ｓ９０４）。この後、システム管理モジュール４０５は、取得されたハッシュ値をインデクスＩＤテーブル４０６の仮想インデクスＩＤ５０１のカラムに格納し、そのエントリのインデクスＩＤ５０２のカラムにこの仮想インデクスＩＤが紐付けられるインデクスＩＤを格納する（Ｓ９０５）。
【００５６】
図１０に、初期化が終了したインデクスＩＤテーブル４０６の例を示す。このテーブルを利用することにより、ファイルパスが与えられたとき、そのファイルパスがどのインデクスＩＤに紐付けるかを知ることが可能となる。例えばファイルパス「／ＦｉｌｅＳｅｒｖｅｒ１／ｔｅｓｔ．ｔｘｔ」のハッシュ値を求めたところ「２９９９９９９９９９９」であった場合、このハッシュ値は、項番３と項番４の点の間に配置され、項番３のエントリの点にヒットする（コンシステントハッシュの円周上で左に回る場合）。項番３のインデクスＩＤは「３」であるので、ファイルパス「／ＦｉｌｅＳｅｒｖｅｒ１／ｔｅｓｔ．ｔｘ」”のインデクスＩＤは「３」となることが分かる。
【００５７】
このテーブルはコンシステントハッシュ法の実現方式であり、このテーブルを元にしてファイルパスからインデクスＩＤを取得し、インデクスＩＤ毎に分割インデクスを生成すると、各々の分割インデクスのサイズ又は紐付けられるファイル数の平準化が実現される。
【００５８】
［インデクスリストの生成フロー］
図１１に、スキャナモジュール４０２によるインデクスリストの生成フローを示す。まず、パイプライン制御モジュール４０４は、スキャナモジュール４０２に対し、フォルダツリーの１階層目のインデクスリストの生成開始を指示する（Ｓ１１０１）。前述したように、インデクスリストの生成は、１階層ずつに限らず、任意の階層数毎に実行してもよい。
【００５９】
次に、スキャナモジュール４０２は、ファイル管理テーブル４０８にアクセスし、指定された階層のファイル群が存在するか否かをチェックする（Ｓ１１０２）。指定された階層のファイルパスにエントリが存在する場合、スキャナモジュール４０２は、処理ステータスのカラムに削除を示す「−１」を設定する（Ｓ１１０３）。なお、指定された階層のファイルパスにエントリが存在しない場合、スキャナモジュール４０２は、Ｓ１１０３をスキップする。
【００６０】
その後、スキャナモジュール４０２は、ファイル検索の階層指定オプションを付与してＦｉｎｄコマンドを実行する（Ｓ１１０４）。これは、実際のＬｉｎｕｘＯＳ上では、Ｆｉｎｄコマンドに、ｍａｘｄｅｐｔｈ＝１（階層深度が１の場合）を設定することで実施できる。
【００６１】
指定した階層のファイル・フォルダパスとその属性情報を取得すると、スキャナモジュール４０２は、各々の属性情報に基づいてハッシュ値を取得する（Ｓ１１０５）。
【００６２】
続いて、スキャナモジュール４０２は、Ｆｉｎｄにより取得したファイルパスをキーに使用し、ファイルパスの有無をファイル管理テーブル４０８に問い合わせる（Ｓ１１０６）。
【００６３】
ファイルパスがファイル管理テーブル４０８に存在しない場合（Ｓ１１０６で否定結果）、当該ファイルは新規作成であることを意味する。従って、この場合、スキャナモジュール４０２は、ファイル管理テーブル４０８に新たにそのファイルパス７０１をキーとするエントリを生成し、ファイルハッシュ７０２と処理ステータス７０３に新規生成を示す「１」を追加する（Ｓ１１０７）。
【００６４】
一方、ファイルパス７０１がファイル管理テーブル４０８に存在する場合（Ｓ１１０６で肯定結果）、当該ファイルは既にファイル管理テーブル４０８に登録されているファイルであることを意味する。この場合、スキャナモジュール４０２は、ハッシュ値のチェックを実行する（Ｓ１１０８）。具体的には、スキャナモジュール４０２は、ファイル管理テーブル４０８からファイルパス７０１が一致するエントリのファイルハッシュ７０２を取得し、Ｆｉｎｄコマンドにより取得したハッシュ値と比較する。
【００６５】
ハッシュ値が一致した場合（Ｓ１１０８で肯定結果）、ファイル更新がなかったことを意味する。従って、この場合、スキャナモジュール４０２は、ファイルパスが一致するエントリの処理ステータスに「０」を設定する（Ｓ１１０９）。
【００６６】
ハッシュ値が一致しなかった場合（Ｓ１１０８で否定結果）、ファイル更新があったことを意味する。従って、この場合、スキャナモジュール４０２は、ファイルハッシュ７０２を新たなハッシュ値で上書きし、処理ステータス７０３にファイル更新があったことを示す「２」を上書きする（Ｓ１１１０）。
【００６７】
以上の処理により、指定された階層のファイル処理（「０」＝処理なし、「１」＝インデクス新規生成、「２」＝インデクス更新、「−１」＝インデクスから削除）が確定する。
【００６８】
次に、スキャナモジュール４０２は、ファイル管理テーブル４０８にアクセスし、指定されたフォルダ階層のエントリ内で処理ステータス７０３が、「１」、「２」、「−１」であるエントリを取得してインデクスリストに書き出し、分散ファイルシステム３０２上に保存する（Ｓ１１１１）。すなわち、何らかの変化があったファイルだけを抽出する。なお、インデクスリストは、インデクス処理対象のファイルパス、処理ステータスが記述されたテキストファイルである。
【００６９】
その後、スキャナモジュール４０２は、パイプライン制御モジュール４０４にインデクスリストの保存先パスと生成終了を通知する（Ｓ１１１２）。
【００７０】
以後、スキャナモジュール４０２は、パイプライン制御モジュール４０４に指示されたディレクトリのエントリをファイル管理テーブル４０８から取得し、フォルダ深度を２、３…と深めながらインデクスリストを生成する。
【００７１】
［分割インデクス生成のフロー］
図１２に、インデクス生成モジュール４０３による分割インデクス２０２の生成フローを示す。インデクス生成モジュール４０３は、スキャナモジュール４０２から与えられるインデクスリストに基づいて分割インデクス２０２を生成する。インデクス生成モジュール４０３の処理は、１つのインデクスリストに対して、タスクと呼ばれる複数の処理単位に分割され、複数の分散処理サーバ１０３上で分散的に処理される。以下、タスク生成及び分散処理サーバ上での処理を示す。
【００７２】
まず、スキャナモジュール４０２がインデクスリストの生成終了をパイプライン制御モジュール４０４に通知する（Ｓ１２０１）。このとき、パイプライン制御モジュール４０４は、分散処理サーバ１０３上でインデクスの生成を開始可能か否かをチェックする（Ｓ１２０２）。
【００７３】
分散処理サーバ１０３上でインデクスの生成が開始可能な場合（Ｓ１２０２で肯定結果）、パイプライン制御モジュール４０４は、インデクス生成モジュール４０３に対し、分割インデクスの生成開始とインデクスリストの保存先パスを通知する（Ｓ１２０３）。なお、インデクスの生成が開始可能でない場合（Ｓ１２０２で否定結果）の場合、パイプライン制御モジュール４０４は、一定時間の待機時間の後（Ｓ１２０２１）、再び、Ｓ１２０２の判定処理に戻る。
【００７４】
先の通知を受けたインデクス生成モジュール４０３は、分散ファイルシステム３０２上からインデクスリストを取得する（Ｓ１２０４）。インデクス生成モジュール４０３は、第一の分散処理として、以下に示すＳ１２０５〜Ｓ１２０７までの処理を行う。
【００７５】
まず、インデクス生成モジュール４０３は、インデクスリストを任意の数に分割する（Ｓ１２０５）。ここでの数は、分散処理サーバ１０３の台数及び処理性能から決定される数である。インデクスリストは、インデクス処理対象のファイルパス、処理ステータスが記述されたテキストファイルであり、このファイルを分割する際には、分割数に応じて単純に任意の行で区切って複数のインデクスリストが生成されることとなる。
【００７６】
分割された各々のインデクスリストは、それぞれが、分散処理サーバ１０３上で複数のタスクとして処理される。第一の分散処理における各々のタスク処理は、分割されたインデクスリストに記述されているファイルパスを取得し（Ｓ１２０６）、インデクスＩＤテーブルに問い合わせ、インデクスＩＤを取得する（Ｓ１２０７）。
【００７７】
第一のタスク処理が全て完了すると、インデクス生成モジュール４０３は、分散処理サーバ１０３上でインデクスＩＤによるグルーピングを行い、インデクスＩＤをキーとするインデクスリストを生成する（Ｓ１２０８）。
【００７８】
次に、第二の分散処理として、インデクス生成モジュール４０３は、以下に示すＳ１２０９〜Ｓ１２１２までの処理を行う。
【００７９】
まず、インデクス生成モジュール４０３は、インデクスＩＤをキーとするインデクスリスト（インデクスＩＤ分だけリストが存在する）に対し、分散処理サーバ１０３上で複数のタスクとして処理を開始する。
【００８０】
第二の分散処理におけるタスク処理は、インデクスＩＤをキーとするインデクスリストからファイルパスと処理ステータスを取得する（Ｓ１２０９）。
【００８１】
次に、タスク処理は、処理ステータスをチェックする（Ｓ１２１０）。ここで、処理ステータスが、「１」（＝ファイル新規生成）又は「２」（＝ファイル更新）の場合、各タスクは、ファイルサーバ１０２からファイルをダウンロードした後、分割インデクスを生成する（Ｓ１２１１）。なお、このとき生成される分割インデクスは、分散処理サーバ１０３のローカルストレージ３０１上に一時的に生成される。
【００８２】
これに対し、処理ステータスが「−１」（＝インデクスから削除）の場合、各タスクは、削除インデクスリストとしてファイルパスを削除インデクスリストとして出力する（Ｓ１２１２）。なお、削除インデクスリストは、検索サーバ１０１上に既に配置されている分割インデクスから削除すべきファイルパスが１行毎に書かれたテキストファイルである。
【００８３】
この後、インデクス生成モジュール４０３は、第二のタスク処理により生成された分割インデクスと削除インデクスリストをセットとして、分散ファイルサーバ１０３上にアップロードする（Ｓ１２１３）。
【００８４】
その後、インデクス生成モジュール４０３は、アップロードした保存先を分割インデクス保存先パス６０３と削除インデクスリスト保存先パス６０４に格納し（Ｓ１２１４）、パイプライン制御モジュール４０４に対し、分割インデクスの生成完了を通知する（Ｓ１２１５）。
【００８５】
以上のように、分散処理サーバ１０３上では、第一の分散処理と第二の分散処理が実行され、タスク処理が同時並列的に実行される。これにより、分割インデクスの生成速度が向上する。なお、コンシステントハッシュ法における仮想インデクスＩＤを利用して第二のタスク処理を実行することにより、分散処理数をさらに調整することもできる。
【００８６】
さらに、スキャナモジュール４０２とインデクス生成モジュール４０３は非同期に動作する。このため、スキャナモジュール４０２によるインデクスリストの生成が複数完了した場合には、Ｓ１２０１〜Ｓ１２１３の処理は多重化することが可能となり、分割インデクスの生成速度が向上する。
【００８７】
［検索サーバへの分割インデクスの配置フロー］
図１３に、インデクス生成モジュール４０３により生成された分割インデクス（この時点では、分割インデクスは、検索サーバ１０１ではなく、分散ファイルシステム３０２上に保存されている）を、インデクス管理モジュール２０３が、検索サーバ１０１に配置するフローである。
【００８８】
図１３に示すフローは、パイプライン制御モジュール４０４が、インデクス生成モジュール４０３から分割インデクス２０２の生成終了通知を受けることで開始する（Ｓ１３０１）。この通知の受けたパイプライン制御モジュール４０４は、検索サーバ管理テーブル４０７に問い合わせを行い、インデクスＩＤをキーとして、配置先検索サーバ名６０２を取得する（Ｓ１３０２）。
【００８９】
次に、パイプライン制御モジュール４０４は、特定された検索サーバ１０１上のインデクス管理モジュール２０３に対し、インデクス処理が可能か否かの問い合わせを行う（Ｓ１３０３）。インデクス処理が可能な場合（Ｓ１３０３で肯定結果）、パイプライン制御モジュール４０４は、インデクス管理モジュール２０３に対し、インデクス処理の開始を命令する（Ｓ１３０４）。なお、インデクス管理モジュール２０３が他の処理を実行中の場合、パイプライン制御モジュール４０４は、一定の時間待機する（Ｓ１３０５）。
【００９０】
次に、インデクス管理モジュール２０３は、既に分割インデクスが存在するか否かをチェックする（Ｓ１３０６）。既に分割インデクス２０２が同じ検索サーバ１０１上に存在する場合（Ｓ１３０６で肯定結果）、インデクス管理モジュール２０３は、分散ファイルシステム３０２上からインデクスＩＤに対応する分割インデクス２０２と削除インデクスリストをダウンロードする（Ｓ１３０７）。
【００９１】
インデクス管理モジュール２０３は、検索サーバ１０１上に存在する既存の分割インデクス２０２に対して、削除インデクスリストに基づいてインデクスを削除する（Ｓ１３０８）。次に、インデクス管理モジュール２０３は、ダウンロードした分割インデクス２０２を既存の分割インデクス２０２にマージし、最新の分割インデクス２０２を生成する（Ｓ１３０９）。
【００９２】
一方、分割インデクス２０２が同じ検索サーバ１０１上に存在しなかった場合（Ｓ１３０６で否定結果）、インデクス管理モジュール２０３は、分散ファイルシステム３０２上からインデクスＩＤに対応する分割インデクス２０２をダウンロードする（Ｓ１３１０）。
【００９３】
続いて、インデクス管理モジュール２０３は、検索モジュール２０４に分割インデクス２０２のマウントを要求する（Ｓ１３１１）。これにより、検索モジュール２０４に分割インデクスがマウントされ、検索の実行が可能となる。
【００９４】
最後に、インデクス管理モジュール２０３は、パイプライン制御モジュール４０４に対し、分割インデクスの配置終了を通知し、処理を完了する（Ｓ１３１２）。
【００９５】
［検索サーバの追加フロー］
図１４に、検索システムに検索サーバ１０１が追加された場合に実行される処理フローを示す。
【００９６】
この処理フローは、システム管理モジュール４０５に対し、管理者が、検索サーバ１０１の追加を入力することで開始される（Ｓ１４０１）。
【００９７】
検索サーバ１０１が追加されたことを受け付けると、システム管理モジュール４０５は、新規に追加された検索サーバ１０１に対し、新規にインデクスＩＤを割り当てる（Ｓ１４０２）。例えば２台の検索サーバ１０１が配置された検索システムに、１台の検索サーバ１０１が新たに追加される場合にあって、１台の検索サーバ１０１に２つの分割インデクス２０２が配置されるとき、新たに追加される検索サーバ１０１にはインデクスＩＤ４，５が割り当てられる。
【００９８】
次に、システム管理モジュール４０５は、検索サーバ管理テーブル４０７に、新規に生成されたインデクスＩＤ６０１のエントリを作成し、そのエントリに配置先検索サーバ名６０２を設定する（Ｓ１４０３）。すなわち、検索サーバ管理テーブル４０７の初期化を実行する。
【００９９】
その後、システム管理モジュール４０５は、新規に生成されたインデクスＩＤ５０２に対応付ける仮想インデクスＩＤ５０１のハッシュ値をインデクスＩＤテーブル４０６に格納する（Ｓ１４０４）。すなわち、インデクスＩＤテーブルを初期化する。
【０１００】
新規の仮想インデクスＩＤがインデクスＩＤテーブル４０６に追加されると、パイプライン制御モジュール４０４は、再配置のターゲットとなる全ての検索サーバ１０１上のインデクス管理モジュール２０３に対し、分割インデクスの再配置開始を命令する（Ｓ１４０５）。すなわち、再配置に関係する既存の検索サーバ１０１に対し、分割インデクスの再配置を命じる。
【０１０１】
再配置命令を受けた検索サーバ１０１のインデクス管理モジュール２０３は、既存の分割インデクス２０２の先頭からファイルパスを順々に取得する（Ｓ１４０６）。
【０１０２】
次に、インデクス管理モジュール２０３は、ファイルパスからハッシュ値を計算してインデクスＩＤテーブル４０６に問い合わせ、インデクスＩＤを取得する（Ｓ１４０７）。
【０１０３】
次に、インデクス管理モジュール２０３は、取得したインデクスＩＤが新規に追加されたインデクスＩＤか否か判定する（Ｓ１４０８）。インデクスＩＤが新規でなかった場合（Ｓ１４０８で否定結果）、インデクス管理モジュール２０３は、そのファイルパスについて何も処理を行わない。インデクスＩＤが新規であった場合（Ｓ１４０８で肯定結果）、インデクス管理モジュール２０３は、分割インデクスからそのエントリを抜き出し、新規インデクスＩＤに紐付けられている分割インデクスを生成・追加する（Ｓ１４０９）。
【０１０４】
なお、Ｓ１４０６〜Ｓ１４０９の操作は分割インデクス２０２に登録されている全てのファイルパスに対して処理される。また、分割インデクスは、一時的に検索サーバ１０１のローカルストレージ２０１上に生成されるものとする。
【０１０５】
その後、新規に生成された分割インデクスを分散ファイルシステム３０２にアップロードし（Ｓ１４１０）、パイプライン制御モジュール４０４に分割終了を通知する（Ｓ１４１１）。
【０１０６】
パイプライン制御モジュール４０４は、各々の検索サーバ１０１上のインデクス管理モジュール２０３から終了通知を受けた順番に、新規に追加された検索サーバ１０１のインデクス管理モジュール２０３に対し、インデクス配置処理の開始を指示する（Ｓ１４１２）。
【０１０７】
新規に追加された検索サーバ１０１のインデクス管理モジュール２０３は、分散ファイルシステム３０２から分割インデクスをダウンロードし、分割インデクスのマージ処理を繰り返す（Ｓ１４１３）。以上により、新規追加された検索サーバ１０１上に分散インデクス２０２を生成することが可能となる。
【０１０８】
［検索サーバ削除フロー］
図１５に、検索システムから検索サーバ１０１が削減された場合の処理フローを示す。この処理フローは、管理者が、検索サーバ１０１の削減をシステム管理モジュール４０５に入力することで開始される（Ｓ１５０１）。
【０１０９】
検索サーバ１０１が削除されたことを受け付けると、システム管理モジュール４０５は、削減対象である検索サーバ１０１が配置先ファイルサーバ名になっているエントリのインデクスＩＤ６０１を検索サーバ管理テーブル４０７から取得し、そのインデクスＩＤに紐付けられている仮想インデクスＩＤを計算して取得する（Ｓ１５０２）。
【０１１０】
その後、システム管理モジュール４０５は、Ｓ１５０２で取得した仮想インデクスＩＤを、インデクスＩＤテーブル４０６から削除する（Ｓ１５０３）。
【０１１１】
次に、システム管理モジュール４０５は、パイプライン制御モジュール４０４に対し、削減される検索サーバ１０１のインデクス管理モジュール２０３にインデクス削除の指示を出す（Ｓ１５０４）。
【０１１２】
指示を受けたインデクス管理モジュール２０３は、分割インデクス２０２に登録されているファイルパスを先頭から終端まで順に取得する（Ｓ１５０５）。
【０１１３】
次に、インデクス管理モジュール２０３は、取得したファイルパスからハッシュ値を計算し、計算されたハッシュ値に対応するインデクスＩＤをインデクスＩＤテーブルに問い合わせる（Ｓ１５０６）。
【０１１４】
その後、インデクス管理モジュール２０３は、分割インデクス２０２からファイルパスのエントリのインデクスＩＤを抜き出し、取得したインデクスＩＤに紐付けられた新規の分割インデクスを生成し、又は、その分割インデクスにインデクスデータを追加する。その後、インデクス管理モジュール２０３は、再配置先にマージするための分割インデクスを生成する（Ｓ１５０７）。この分割処理が終わった時、削除ターゲットである検索サーバ１０１のローカルストレージ２０１に、インデクスＩＤ毎の分割インデクスが複数存在する。
【０１１５】
次に、インデクス管理モジュール２０３は、Ｓ１５０７で生成したインデクスＩＤ毎の分割インデクスを分散ファイルシステム３０２上にアップロードする（Ｓ１５０８）。
【０１１６】
続いて、インデクス管理モジュール２０３は、システム管理モジュール４０５に対し、(1) インデクスＩＤ毎の分割インデクス生成が完了したこと、(2) 分散ファイルシステム３０２上の保存先情報を通知する（Ｓ１５０９）。
【０１１７】
この通知を受けて、システム管理モジュール４０５は、パイプライン制御モジュール４０４に指示を出し、再配置のターゲットとなる全ての検索サーバ１０１上のインデクス管理モジュール２０３に対してインデクスのマージを命じる指示を出す（Ｓ１５１０）。
【０１１８】
指示を受けた各々のインデクス管理モジュール２０３は、分割インデクスのダウンロードとマージ処理を行い、最新の分割インデクス２０２を生成する（Ｓ１５１１）。
【０１１９】
以上の完了後、インデクス管理モジュール２０３は、削除ターゲットの検索サーバ１０１をシステム上から削除する（Ｓ１５１２）。
【０１２０】
［まとめ］
本実施の形態によれば、検索インデクスに対応するハッシュ値をマッピングするコンシステントハッシュ空間に仮想ノード（仮想インデクスＩＤ）を設定することにより、分割インデクスのサイズの平準化と偏りの抑制とを同時に実現することができる。これにより、検索パフォーマンスの向上を実現することができる。
【０１２１】
また、本実施の形態によれば、検索サーバ１０１の物理的な追加又は削除に伴う分割インデクスの追加又は削除に関しても、仮想ノード（仮想インデクスＩＤ）の再配置により柔軟に対応することができる。結果的に、各検索サーバ１０１に対応付けられる複数の分割インデクス２０２の管理を簡素化することができる。
【０１２２】
また、本実施の形態によれば、パイプライン処理による分割インデクスの生成を、複数台の分散処理サーバ１０３に分散して実行することができる。これにより、分割インデクスの生成速度を向上させることができる。さらに、分散処理サーバ１０３上における分割インデクスの生成をインデクスＩＤ毎に実行することにより、分割インデクスの生成時における分散処理サーバ間の無駄なネットワークトラフィック及びディスクＩ／Ｏを軽減することができる。これにより、分割インデクスの生成をより効率的にかつ高速化することができる。
【０１２３】
また、本実施の形態によれば、分割リストの生成対象とするファイルパスを与えるインデクスリストの生成処理を、ファイルサーバ内のフォルダツリーの任意の階層数毎に実行することにより、分割インデクスの生成をより効率的にかつ高速化することができる。
【符号の説明】
【０１２４】
１００…検索クライアント
１０１…検索サーバ
１０２…ファイルサーバ
１０３…分散処理サーバ
１０４…管理サーバ
１０５…ネットワーク
２０１…ローカルストレージ
２０２…分割インデクス
２０３…インデクス管理モジュール
２０４…検索モジュール
３０１…ローカルストレージ
３０２…分散ファイルシステム
３０３…分散処理モジュール
４０１…ローカルストレージ
４０２…スキャナモジュール
４０３…インデクス生成モジュール
４０４…パイプライン制御モジュール
４０５…システム管理モジュール
４０６…インデクスＩＤテーブル
４０７…検索サーバ管理テーブル
４０８…ファイル管理テーブル
【図１】
0005657498.tif 000002
【図２】
0005657498.tif 000003
【図３】
0005657498.tif 000004
【図４】
0005657498.tif 000005
【図５】
0005657498.tif 000006
【図６】
0005657498.tif 000007
【図７】
0005657498.tif 000008
【図８】
0005657498.tif 000009
【図９】
0005657498.tif 000010
【図１０】
0005657498.tif 000011
【図１１】
0005657498.tif 000012
【図１２】
0005657498.tif 000013
【図１３】
0005657498.tif 000014
【図１４】
0005657498.tif 000015
【図１５】
0005657498.tif 000016