(57)【特許請求の範囲】
【請求項１】
走査対象ファイルのインデクス作成済みのファイルリストを分散処理サーバによって作成するステップと、前記分散処理サーバによって作成されたインデクス作成済みのファイルリストを記憶装置に記憶させるステップと、前記インデクス作成済みのファイルリストを前記記憶装置から取得し、そのファイルリストから走査対象ファイルのディレクトリＵＲＬを取得し、そのディレクトリＵＲＬを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割方針を決定するステップと、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを前記分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するステップと、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力するステップとを備え、
前記走査処理の分割方針を決定するステップは、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を１とする分割方針を決定し、所定数を越えた場合には最上位階層のディレクトリから所定階層までの階層を１つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度１階層を分割単位として走査する分割方針を決定するものであることを特徴とするファイルリスト生成方法。
【請求項２】
走査対象ファイルのインデクス作成済みのファイルリストを作成する分散処理サーバと、該分散処理サーバによって作成されたインデクス作成済みのファイルリストを記憶した記憶装置と、前記インデクス作成済みのファイルリストを前記記憶装置から取得し、そのファイルリストから走査対象ファイルのディレクトリＵＲＬを取得し、そのディレクトリＵＲＬを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割単位を決定するファイル走査処理分割方針決定手段と、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを前記分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するファイル走査手段と、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力する比較手段とを備え、
前記ファイル走査処理分割方針決定手段は、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を１とする分割方針を決定し、所定数を越えた場合には最上位階層のディレクトリから所定階層までの階層を１つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度１階層を分割単位として走査する分割方針を決定するものであることを特徴とするファイルリスト生成システム。
【請求項３】
走査対象ファイルのインデクス作成済みのファイルリストを取得し、そのファイルリストから走査対象ファイルのディレクトリＵＲＬを取得し、そのディレクトリＵＲＬを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割単位を決定するファイル走査処理分割方針決定手段と、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するファイル走査手段と、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力する比較手段とを備え、
前記ファイル走査処理分割方針決定手段は、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を１とする分割方針を決定し、所定数を越えた場合には最上位階層のディレクトリから所定階層までの階層を１つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度１階層を分割単位として走査する分割方針を決定するものであることを特徴とするファイルリスト生成装置。
【請求項４】
走査対象ファイルのインデクス作成済みのファイルリストを作成する分散処理サーバと、該分散処理サーバによって作成されたインデクス作成済みのファイルリストを記憶した記憶装置と、ファイルリスト作成サーバとから構成されたシステムに使用するプログラムであって、
前記ファイルリスト作成サーバを、
前記インデクス作成済みのファイルリストを前記記憶装置から取得し、そのファイルリストから走査対象ファイルのディレクトリＵＲＬを取得し、そのディレクトリＵＲＬを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割単位を決定するファイル走査処理分割方針決定手段と、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを前記分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するファイル走査手段と、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力する比較手段として機能させ、
さらに前記ファイル走査処理分割方針決定手段を、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を１とする分割方針を決定し、所定数を越えた場合には最上位ディレクトリから所定階層までの階層を１つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度１階層を分割単位として走査する分割方針を決定する手段として機能させることを特徴とするファイルリスト生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイルサーバ内に保存された大量のファイルデータの階層を効率よく解析するための技術に関するものであり、特に、検索システムにおいて検索インデックスを更新すべきファイルデータについて、リストを効率的に生成できるファイルリスト生成方法及びシステム、ファイルリスト生成装置並びにプログラムに関するものである。
【背景技術】
【０００２】
近年、コンピュータ性能の高速化、ＨＤＤの大容量化に伴い、膨大な数の非定型文書が作られるようになっている。このため、膨大な数の文書の中から、必要とする文書を高速かつ的確に探し出すことの検索システムの必要性が高まっている。検索結果を的確なものとするためには、検索対象となる非定型文書が格納されたファイルサーバに対して検索インデクス作成後に行われたファイルデータの追加、変更、削除操作をタイムリーに検索インデクスに反映することが重要となる。これらを検索インデクスへと反映させる際、変更されていないファイルデータについても検索インデクスを更新すると多大な時間がかかってしまうため、一般的には追加、変更、削除のあったファイルデータのみに絞って検索インデクスを更新する。そのためには、追加、変更、削除されたファイルデータの一覧を作成する必要がある。
【０００３】
このような検索システムのニーズにこたえるため、ファイルサーバの中にはファイルデータの操作履歴を記憶し、外部からの要求に応じて追加、変更、削除されたファイルデータの一覧を提供するインタフェースを備えるものも存在する（下記先行技術文献参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２６８４５６号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
追加、変更、削除されたファイルデータの一覧を作成する際、ファイルサーバが一覧を提供している場合はそのインタフェースを利用すればよいが、そのようなインタフェースを備えていないファイルサーバの場合は、ファイルサーバ内に存在する検索インデクス作成対象範囲のファイルデータ全てを走査し、更新操作の有無を判定する必要がある。ここで、追加、変更、削除されたファイルデータが少量である場合であっても、全てのファイルデータを走査する必要があるため、追加、変更、削除されたファイルデータの一覧の作成処理が、インデクス更新処理の長時間化の要因となってしまっている。
これに対して、ファイルサーバ内のファイルツリー構造を幾つかに分割し、それらのサブツリーに対する走査処理を並列に行うことにより、走査処理を高速化することが考えられる。
【０００６】
しかしながら、ファイルサーバ内のファイルツリーは環境によって様々未知であるため、効率的な分割方法を決定することは困難である。
【０００７】
本発明の目的は、検索インデクス更新処理を高速に行うことで、検索システムによる検索結果を可能な限り的確なものとすることであり、これを実現させるため、既に一度インデクスを作成したことのあるファイルサーバに対して、ファイルデータ走査処理を並列分散実行し、追加、変更、削除されたファイルデータの一覧を高速に作成することができるファイルリスト生成方法及びシステム、ファイルリスト生成装置およびプログラムを提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明に係るファイルリスト生成方法は、走査対象ファイルのインデクス作成済みのファイルリストを分散処理サーバによって作成するステップと、前記分散処理サーバによって作成されたインデクス作成済みのファイルリストを記憶装置に記憶させるステップと、前記インデクス作成済みのファイルリストを前記記憶装置から取得し、そのファイルリストから走査対象ファイルのディレクトリＵＲＬを取得し、そのディレクトリＵＲＬを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割方針を決定するステップと、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを前記分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するステップと、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力するステップとを備え、
前記走査処理の分割単位を決定するステップは、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を１とする分割方針を決定し、所定数を越えた場合には最上位階層のディレクトリから所定階層までの階層を１つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度１階層を分割単位として走査する分割方針を決定するものであることを特徴とする。
【０００９】
また、本発明に係るファイルリスト生成システムは、走査対象ファイルのインデクス作成済みのファイルリストを作成する分散処理サーバと、該分散処理サーバによって作成されたインデクス作成済みのファイルリストを記憶した記憶装置と、前記インデクス作成済みのファイルリストを前記記憶装置から取得し、そのファイルリストから走査対象ファイルのディレクトリＵＲＬを取得し、そのディレクトリＵＲＬを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割単位を決定するファイル走査処理分割方針決定手段と、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを前記分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するファイル走査手段と、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力する比較手段とを備え、
前記ファイル走査処理分割方針決定手段は、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を１とする分割方針を決定し、所定数を越えた場合には最上位階層のディレクトリから所定階層までの階層を１つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度１階層を分割単位として走査する分割方針を決定するものであることを特徴とする。
【００１０】
また、本発明に係るファイルリスト生成装置は、走査対象ファイルのインデクス作成済みのファイルリストを取得し、そのファイルリストから走査対象ファイルのディレクトリＵＲＬを取得し、そのディレクトリＵＲＬを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割単位を決定するファイル走査処理分割方針決定手段と、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するファイル走査手段と、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力する比較手段とを備え、
前記ファイル走査処理分割方針決定手段は、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を１とする分割方針を決定し、所定数を越えた場合には最上位階層のディレクトリから所定階層までの階層を１つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度１階層を分割単位として走査する分割方針を決定するものであることを特徴とする。
【００１１】
また、本発明に係るファイルリスト生成プログラムは、走査対象ファイルのインデクス作成済みのファイルリストを作成する分散処理サーバと、該分散処理サーバによって作成されたインデクス作成済みのファイルリストを記憶した記憶装置と、ファイルリスト作成サーバとから構成されたシステムに使用するプログラムであって、
前記ファイルリスト作成サーバを、
前記インデクス作成済みのファイルリストを前記記憶装置から取得し、そのファイルリストから走査対象ファイルのディレクトリＵＲＬを取得し、そのディレクトリＵＲＬを解析して各階層のディレクトリ数を集計し、その集計結果に基づき走査対象ディレクトリの走査処理を分割して行う分割単位を決定するファイル走査処理分割方針決定手段と、決定された分割方針に従い走査対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の走査対象ファイルを前記分散処理サーバによって分散走査し、走査対象ファイルのファイルリストを作成するファイル走査手段と、作成されたファイルリストと前記インデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力する比較手段として機能させ、
さらに前記ファイル走査処理分割方針決定手段を、最上位階層から数えたディレクトリ数が所定数未満であれば走査対象ディレクトリの走査処理を行う分割数を１とする分割方針を決定し、所定数を越えた場合には最上位ディレクトリから所定階層までの階層を１つの分割単位として初回走査を行い、その初回走査で発見した走査対象ディレクトリの下位階層は深度１階層を分割単位として走査する分割方針を決定する手段として機能させることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、既に一度検索インデクスを作成したことのあるファイルデータについて、そのディレクトリ構造を解析してディレクトリ数を集計し、その集計結果に基づき、ファイルデータを分割して走査する分割方針を決定し、決定された分割方針に従い検索対象ファイルのディレクトリを分割し、分割した単位で各ディレクトリ上の検索対象ファイルを分散処理サーバによって分散走査し、検索対象ファイルのファイルリストを作成し、作成されたファイルリストとインデクス作成済みのファイルリストとを比較して前記インデクス作成後に追加、変更、削除されたファイルの一覧を作成して出力するように構成したため、ファイルサーバ上で追加、変更、削除されたファイルの一覧を高速に作成することが可能となる。これによって、検索インデクスの更新処理を高速に行うことが可能となり、結果として、検索システムによる検索結果を可能な限り的確なものとすることができる。
【図面の簡単な説明】
【００１３】
【図１】本発明に係る第一の実施形態を示すシステム構成図である。
【図２】インデクス済みファイルリストのデータ構成図である。
【図３】インデクス済みファイルリストの概念図である。
【図４】ファイルツリーを解析し、ファイル走査処理の分割方針を決定する処理のフローチャートである。
【図５】インデクス済みファイルリストとファイルサーバ走査実行手段によって得られたファイルサーバ上のファイル一覧を比較して追加、変更、削除されたファイルデータの一覧を作成する処理のフローチャートである。
【図６】ファイルリスト作成と走査範囲設定処理を示すフローチャートである。
【図７】図６の続きを示すフローチャートである。
【図８】インデクス済みファイルのＵＲＬリストの残件処理のフローチャートである。
【図９】ソート済みＵＲＬリストの残件処理のフローチャートである。
【図１０】更新ファイル追加処理のフローチャートである。
【図１１】追加ファイル追加処理のフローチャートである。
【図１２】削除ファイル追加処理のフローチャートである。
【図１３】ファイルツリーの途中の階層でディレクトリ数増加の割合が急激に大きくなるようなファイルツリーの概念図である。
【図１４】ディレクトリ数増加の割合が急激に大きくなる階層を検出するための２階差分値の説明図である。
【図１５】インデクス作成直後のディレクトリツリーと更新後のディレクトリツリーの例を示すイメージ図である。
【発明を実施するための形態】
【００１４】
以下、本発明を実施する場合の第一の実施形態について、図面に基づき詳細に説明する。
図１は、本発明に係る第一の実施形態におけるシステム構成図である。
図１に示したファイルリスト生成システムは、ファイルリスト作成サーバ１、分散処理サーバ群２、およびファイルサーバ３（以下「サーバ等」という）を、ＬＡＮ（Local Area Network）４等の有線又は無線の通信回線により互いに通信可能に接続したシステムである。
図１においては、サーバ等はＬＡＮ４によって互いに通信可能に接続されているが、接続方法はＬＡＮに限定されるものではなく、例えばＷＡＮ（Wide Area Network）やインターネットによって接続されていてもよい。また、図１においては、サーバ等が同一ＬＡＮセグメント上で接続されているが、この構成は一例に過ぎず、どのような構成になっていてもよい。さらに、図１においては、ファイルリスト作成サーバ１、分散処理サーバ群２、およびファイルサーバ３はそれぞれ１台ずつ存在しているが、それぞれ２台以上存在しても構わない。また、ファイルリスト作成サーバ１、分散処理サーバ群２、およびファイルサーバ３はそれぞれ異なる装置である必要はなく、例えば、ファイルリスト作成サーバ１、分散処理サーバ群２、およびファイルサーバ３の機能を１台の装置によって実現することも可能である。
【００１５】
以上のような構成により、ファイルリスト作成サーバ１は分散処理サーバ群２を利用してファイルサーバ３上のファイルデータのうち、前回のインデクス作成処理以降に追加、更新、削除されたファイルデータの一覧を作成する。
ファイルリスト作成サーバ１はＰＣ等の装置であり、記憶装置１５と通信可能に接続されている。
【００１６】
記憶装置１５は磁気ディスク等の装置であり、ファイルリスト作成サーバ１に内蔵され又は外部接続される。記憶装置１５と、ファイルリスト作成サーバ１の主記憶装置等は、ファイルリスト作成サーバ１の記憶手段として機能する。記憶装置１５には、インデクス済みファイルリスト１６が記憶されている。インデクス済みファイルリスト１６には、既に検索インデクスを作成したことのある、ファイルサーバ３上の記憶装置３１に格納されている検索対象ファイル３２のＵＲＬが１以上記憶されている。
【００１７】
サーバ等と通信可能に接続されている検索用インデクス作成サーバ５によって検索用インデクスが更新された後、ファイルリスト作成サーバ１が、インデクス済みファイルリスト１６に対して、インデクス済みファイルの追加、更新、削除を反映する。
ファイルリスト作成サーバ１はスケジューラ１１、ファイル走査処理分割方針決定手段１２、ファイル走査実行手段１３、およびファイルリスト比較手段１４を備えている。
また、ファイルリスト作成サーバ１はＣＰＵ、主記憶装置等を備えており、ＣＰＵは記憶装置１５に記憶されているファイルリスト比較手段等のプログラムを主記憶装置上にローディングし、その命令コードを実行することで各種の処理を実行する。
【００１８】
スケジューラ１１は追加、更新、削除されたファイルデータの一覧を定期的に作成するにあたり、記憶装置１５に記憶されている一覧作成処理実行時間間隔を参照してファイル走査処理分割方針決定手段１２を起動した後、ファイル走査実行手段１３、ファイルリスト比較手段１４を起動して、インデクス済みファイルリスト１６の作成後に追加、更新、削除されたファイルデータの一覧を作成する。
ファイル走査処理分割方針決定手段１２は記憶装置１５に記憶されているインデクス済みファイルリスト１６を分析し、ファイル走査処理をどのように分割して並列実行させるかの方針を判定する。この動作については、ファイル走査処理分割方針決定処理（図４）として後述する。
【００１９】
ファイル走査実行手段１３はファイル走査処理分割方針判定手段１２によって判定されたファイル走査処理の分割方針に基づいて、ファイルサーバ３の記憶装置３１に格納された検査対象ファイル３２を走査し、現在ファイルサーバ３上にあるファイルデータの一覧を作成する。
ファイルリスト比較手段１４はファイル走査実行手段１３によって作成された現在ファイルサーバ３上にあるファイルデータの一覧と、記憶装置１５に記憶されているインデクス済みファイルリスト１６とを比較し、追加、更新、削除されたファイルデータの一覧を作成する。この動作については、ファイル走査処理（図５）として後述する。
【００２０】
図２はインデクス済みファイルリスト１６の構成要素であるファイルレコード１６０のデータ構成図である。
インデクス済みファイルリスト１６は、１以上のインデクス済みファイルレコード１６０から構成される。インデクス済みファイルレコード１６０には、検索用インデクス作成済みであるファイルに関して、その情報がディレクトリＵＲＬ１６１とディレクトリ内ファイル情報１６２に分けて記憶されている。
【００２１】
具体的にはディレクトリＵＲＬ１６１はファイルサーバ上のディレクトリを一意に識別するためのパスが設定される。例えばファイルサーバの識別名が”server1”であり、共有名がshare1である共有ディレクトリの直下にあるetcという名前のディレクトリを示すＵＲＬはhttp://server1/share1/etc/となる。
ディレクトリ内ファイル情報１６２は、ファイル名１６３とファイル情報ハッシュ値１６４から構成される。ディレクトリ内ファイル情報１６２は１つのディレクトリＵＲＬ１６０に対して、ディレクトリ直下にあるファイルの個数分（ｎ個）情報が記憶される。具体的にはファイル名１６３はfile1.docやfile2.xmlのようなファイル名が記憶される。
【００２２】
ファイル情報ハッシュ値１６４はそのファイルが更新されたか否かを判定するために用いるファイルのメタデータから作成したハッシュ値を記憶する。例えば、ファイルの最終更新時刻、またはファイルサイズのいずれかが変化している場合にファイルが更新されたと判断する場合は、ファイルの最終更新時刻とファイルサイズを文字列化したものを連結し、そのハッシュ値を算出して記憶する。
ここで、最終更新時刻とファイルサイズは一例であり、例えばファイルや上位ディレクトリのアクセス権情報が管理者等によって変更された場合にファイルが更新されたと判断できるよう、それらのアクセス権情報をもとにハッシュ値を算出することも考えられる。
【００２３】
図３はインデクス済みファイルリスト１６の具体例を示した概念図である。
この概念図に示すファイルサーバ３の構成においては、あるファイルサーバ３の識別名が“server1”である。“server1”では２つのディレクトリが共有されており、それぞれ”share1”、”share2”という共有名により一意に識別可能である。“server1”の”share1”、”share2”には、図示したようなディレクトリおよびファイルが存在する。例えば、“server1”の“share1”には、“etc”、“doc”の２つのディレクトリが存在し、“etc”ディレクトリには“file1.doc”、“file2.xml”の２つのファイルが、“doc”ディレクトリには“file3.doc”の１つのファイルが存在する。
【００２４】
同様に、“server1”の“share2”には、１つのディレクトリ“pjt”が存在し、“pjt”ディレクトリには“pjt1”、“pjt2”、“pjt3”の３つのディレクトリが存在し、そのうち“pjt1”ディレクトリには“file4.txt”、“file5.doc”の２つのファイルが存在する。
例えば、図３における点線内の部分３１に対するインデクス済みファイルリスト１６のデータとしては、ディレクトリＵＲＬ１６１には”http://server1/share1/etc/”という値が記憶され、ディレクトリ内ファイル情報１６２のファイル名１６３が”file1.doc”であり、ファイル情報ハッシュ値１６４が”5c34a4dd1B46183A58ABC2B2C8F1B1D58EA34FC65DA8EB25B9FFD1A6131308CC”であるレコードと、ファイル名１６３が”file2.xml”であり、ファイル情報ハッシュ値１６４が”63b2cda32728C336134A8836A765270710D6712F11B2BEE0FA68715D7FDE74A3”であるレコードが記憶される。
【００２５】
図４はファイル走査処理分割方針決定手段１２の動作を示すフローチャートである。
ファイル走査処理分割方針決定手段１２は、走査対象のファイルツリー構造を複数に分割して走査処理を並列に行うことで高速化するという本発明の目的に対し、分割された範囲があまりに小さかった場合には並列処理を行うことによるオーバーヘッドが並列処理による高速化のメリットを上回ってしまうことを避けるために、既にインデクス済みのファイルの一覧を分析することにより、最初に行う走査処理の範囲が適切な大きさになるように判断する処理である。このような判断処理は、走査対象のファイルツリー構造が、走査処理開始ディレクトリに近い上位階層ほどディレクトリ数が少なく、下位階層ほどディレクトリ数が多い三角形構造の場合に適している。三角形構造の中でも特に、階層間のディレクトリ数の増加の割合が一定ではなく途中の階層で増加の割合が急激に大きくなるような場合、最上位階層から増加割合が急激に大きくなる直前の階層までを最初の走査範囲に設定する。
【００２６】
図１３は途中の階層で増加の割合が急激に大きくなるようなファイルツリーの概念図である。図中の丸１３０６は１つのディレクトリを表す。なお、各ディレクトリの下にはファイルがある。また、下位階層のディレクトリは上位階層のいずれかのディレクトリに属している。
この概念図に示すファイルサーバ３のファイルツリーの構造においては、第一階層１３０１に１ディレクトリが属し、第二階層１３０２には３ディレクトリが属し、第三階層１３０３には６ディレクトリが属し、第四階層１３０４には１２ディレクトリが属し、第五階層１３０５には１００００ディレクトリが属している。このようなファイルツリー構造を持つファイルサーバとしては企業組織のヒエラルキーに即して構築された企業内ファイルサーバが考えられる。例えば第一階層１３０１を”本部”とし、第二階層１３０２を”部”、第三階層１３０３を”課”、第四階層１３０４を”各従業員”用のディレクトリとする場合、このようなディレクトリ数の比率を持つファイルツリー構造になる。各階層間のディレクトリ数の増加の割合は階層間のディレクトリ数の２階差分値によって近似的に算出できる。
２階差分値とは図１４の説明図に示すように、各階層のディレクトリ数について上位階層と直下の下位階層のディレクトリ数の差を１階差分値としたとき、さらに下位階層のディレクトリ数と１階差分値との差を２階差分値とするものである。２階微分演算を近似したものに相当する。
【００２７】
図１４の説明図においては、第３階層と第４階層のディレクトリ数の２階差分値が急変しているために、第４階層でディレクトリ数が急変していることを近似的に検出することができる。
図１３の例においては、第一階層１３０１、第二階層１３０２、第三階層１３０３間の２階差分値は１となり、第二階層１３０２、第三階層１３０３、第四階層１３０４間の２階差分値は３となり、第三階層１３０３、第四階層１３０４、第五階層１３０５間の２階差分値は９９８２となる。これらの２階差分値の比較から第四階層１３０４と第五階層１３０５の間で増加の割合が急激に大きくなっていることが判断できる。ファイル走査処理分割方針決定手段１２はこの手法によって、最上位階層１３０１から第４階層１３０４までを１つの分割深度として初回走査範囲に設定する。
【００２８】
初回走査範囲に設定した第４階層の以下の下位階層については、ディレクトリ数が多いため、その下位のディレクトリ階層を１深度単位として走査し、当該ディレクトリ上のファイルリストを作成する。
なお、ディレクトリ数が多い第５階層以下の階層においては、当該階層に属するディレクトリの走査を複数の分散処理サーバ群２で分担して走査する。この場合、分担の仕方については任意である。
また、最下位階層までのディレクトリ数の集計結果が非常に少なく所定数未満であった場合には、分割して走査しても高速化の目的に反するので、分割数を１として走査する。
【００２９】
このように本実施形態では、検索用インデクス作成直後の検索対象ファイルのディレクトリ構造を反映したディレクトリツリーが判明する。そして、その後、検索対象ファイルを全て走査（初回走査、次回走査、次々回走査・・・）することにより、検索用インデクス作成直後のディレクトリツリーを原型ツリーとして、これに追加、削除されたファイルを反映したディレクトリツリーが判明する。また、ディレクトリは追加されていないが、内容が更新されたファイルがあればハッシュ値が更新されたディレクトリが判明する。
【００３０】
図１５に当初の検索用インデクス作成直後のディレクトリツリーと更新後のディレクトリツリーのイメージ図を示している。
そこで、当初の原型ツリーと追加、削除、更新を反映した最新ツリーとをファイルリスト同士（ＵＲＬリスト同士）で比較することによって追加、削除、更新のあったファイルリストを抽出することが可能になる。この場合、ファイルリスト同士の比較処理も分散処理サーバ群２の各分散処理実行手段２１で分散して実行することにより、高速に追加、削除、更新のあったファイルリストを抽出することが可能になる。
従って、ディレクトリ数が多くない所定数未満の階層までは初回走査で一挙にディレクトリ構造を解明し、ディレクトリ数が多い下位階層では１階層単位で走査してそのディレクトリ構造を解明するという処理を行っていることになる。
【００３１】
図４のＳ４０１に至るまでの処理は、前述のように、スケジューラ１１が、追加、更新、削除されたファイルデータの一覧を定期的に作成するにあたり、記憶装置１５に記憶されている一覧作成処理実行間隔を参照して、処理を開始させる。
まず、走査対象となるファイルサーバ３の共有ディレクトリに関わる全てのディレクトリのＵＲＬ１６１（全ての走査対象ディレクトリのＵＲＬ）を記憶装置１５に記憶されたインデクス済みファイルリスト１６から取得する（Ｓ４０１）。
次に取得した各ディレクトリＵＲＬ１６１を文字”/”でファイルパス上の各階層のディレクトリ名に分割する（Ｓ４０２）。例えば、前述の例でいうと、”http://server1/share1/etc/”は、”http:”、””（空字列）、”server1”、
”share1”、”etc”に分割される。
【００３２】
次に、分割したディレクトリ名がそれぞれ、ファイルパス上の何階層目に所属しているか階層数を算出する（Ｓ４０３）。例えば前述の例で言うと、”http://server1/share1/etc/”の”share1”は第一階層となり、“etc”は第二階層となる。
次に、階層ごとにディレクトリ数を集計する。例えば図３に示したファイルツリーの場合、共有ディレクトリ”share1”に係る第一階層は”share1”一つであると算出される。同様に第二階層は”etc”と”doc”の二つであると算出される。Ｓ４０２とＳ４０３は複数の分散処理サーバ群２において分散処理実行手段２１を利用して並列に処理できる。例えば、ディレクトリＵＲＬ１６１を５０００行ずつ各分散処理サーバ群２に分配し、各分散処理サーバ群２は割り当てられたディレクトリＵＲＬ１６１一つずつに対して、Ｓ４０２とＳ４０３の処理を行う。
【００３３】
次に、階層ごとにユニークなディレクトリ名がいくつあるかを数えることにより、階層ごとのディレクトリ数を集計する（Ｓ４０４）。Ｓ４０４は複数の分散処理サーバ群２において分散処理実行手段２１を利用して並列に処理できる。Ｓ４０３で算出した階層数ごとに、ディレクトリ名を各分散処理サーバ群２に分配し、各分散処理サーバ群２は割り当てられた階層についてS４０４のユニークなディレクトリ数を集計する処理を行う。
このＳ４０２〜Ｓ４０４がファイルツリー構造を解析するする処理に相当する。
【００３４】
次に、集計が完了した階層のうち、第一階層について処理を進める（Ｓ４０５）。
次に、第一階層の推定ファイル数を算出して、推定総ファイル数に加算する（Ｓ４０６）。なお、推定ファイル数は、Ｓ４０４で算出した第一階層のディレクトリ数に一定の数をかけることで算出する。一定の数とは例えば１００といった値である。この値はファイルリスト作成サーバ１上の設定ファイルなどに記憶している値を参照する。この値は、１ディレクトリが保持するファイルの平均の数に近い値を推定して設定することが望ましい。
【００３５】
次に、推定総ファイル数が最高推定総ファイル数以上かどうかを判定する（Ｓ４０７）。なお、最高推定総ファイル数はファイルリスト作成サーバ１上の設定ファイルなどに記憶している値を参照する。この値は、例えば２００００００といった値であり、一台のファイルリスト作成サーバ１が１度のファイルサーバ走査によって少なくとも数時間以内に走査完了できる数字を推定して設定することが望ましい。推定総ファイル数が最高推定総ファイル数以上だった場合は、最初の階層から今階層までをまとめて走査する対象として判断する（Ｓ４１２）。すなわちこの場合は、第一階層のみを走査対象として判断する。最高推定総ファイル数は、まとめて走査する対象の範囲が際限なく拡大することを防ぐ目的で設定している。
【００３６】
推定総ファイル数が最高推定総ファイル数より少なかった場合は、次に、前々階層、前階層、今階層のディレクトリ数の２階差分値を計算する（Ｓ４０８）。第一階層の場合は、前々階層、前階層が無いため、第一階層のディレクトリ数そのものを２階差分値とする。
次に、２階差分値が階層数２階差分閾値以上かどうかを判定する（Ｓ４０９）。なお、階層数２階差分閾値はファイルリスト作成サーバ１上の設定ファイルなどに記憶している値を参照する。この値は階層間のディレクトリ数の増加の割合がどの程度急激であるかを近似的に示す値であり、例えば５０００といった値を設定する。
【００３７】
２階差分値が２階差分閾値以上である場合は、次に推定総ファイル数が最低推定総ファイル数以上であるかどうかを判定する（Ｓ４１０）。なお、最低推定総ファイル数はファイルリスト作成サーバ１上の設定ファイルなどに記憶している値を参照する。この値は、例えば１００００００と言った値であり、一台のファイルリスト作成サーバ１が１度のファイルサーバ走査によって少なくとも数分以上走査にかけるファイル数を推定して、その数を設定することが望ましい。
推定総ファイル数が最低推定総ファイル数以上である場合は、最初の階層から今階層までをまとめて走査する対象として判断する（Ｓ４１２）。
【００３８】
Ｓ４１０の判断で推定総ファイル数が最低推定総ファイル数より少なかった場合は、次の階層に進む（Ｓ４１１）。図４の処理はあまりに小さな範囲を走査範囲として設定しないようにするための処理であるため、一定数のファイルは走査範囲に含まれるようにＳ４１０の判断処理を加えている。
Ｓ４０９の判断で２階差分値が２階差分閾値より小さかった場合は、次の階層に進む（Ｓ４１１）。
Ｓ４１１で次の階層に進んだ後は、Ｓ４０６の処理に戻る。Ｓ４０７かＳ４０９とＳ４１０のどちらかの判断によって走査範囲が決まるまでＳ４０６からＳ４１１の処理を繰り返し実行する。
これらの処理により、ファイル走査実行手段１３が最初に行う走査処理の範囲として、適切な範囲が決定される。
【００３９】
図５はファイル走査実行手段１３とファイルリスト比較手段１４によって追加、更新、削除されたファイルデータの一覧を作成する処理の動作を示すフローチャートである。
図４のフローチャートに示した処理の終了後、スケジューラ１１が図５の処理を起動させる。
図４のフローチャートで示された分割方針決定手段によって判断された範囲を走査範囲に設定する（Ｓ５０１）。
【００４０】
次に走査範囲のファイルを走査し、ファイルとディレクトリのＵＲＬを列挙する（Ｓ５０２）。
ファイルサーバ３内の一部範囲を走査してファイルとディレクトリを列挙することは周知の技術であるため、ファイルサーバ走査実行手段１３がどのように走査を行うかについてはここでは詳細には記載しないが、例えばファイルリスト作成サーバ１がファイルサーバ３の記憶装置３１の検索対象ファイル３２を、ネットワークファイルシステムを通じてアクセス可能な状態にし、ファイルリスト作成サーバ１のローカルファイル用のファイルツリー探索プログラムを使用して各ファイルデータのファイルシステム上のファイルパスの一覧を出力するなどさせればよい。ファイルシステム上のファイルパスが求まれば、ファイルパスにファイルサーバ３の識別名などをファイルパスに付け加えることでＵＲＬを作成することができる。
【００４１】
次に、ファイルリストを作成し、次回走査範囲を設定する（Ｓ５０３）。この次回走査範囲は、Ｓ５０２で走査された範囲の最下層のディレクトリが設定され、そのディレクトリの直下1階層分を走査範囲として設定する。すなわちＳ５０１で設定された初回の走査より後の走査では1階層ずつファイルツリーを走査する。この処理の詳細はファイルリスト作成と走査範囲設定処理（Ｓ６０１等）として後述する。
次に、次回走査範囲が空かどうかを判断する（Ｓ５０４）。
もし次回走査範囲が空であれば、ファイルツリーを全て探索し終えたので、処理を終了する。
次回走査範囲が空でなければ、Ｓ５０２に戻って次の走査範囲について走査し、ファイルとディレクトリのＵＲＬを列挙する。
【００４２】
図６及び図７は、ファイルリスト作成と走査範囲設定処理の動作を示すフローチャートである。これは図５のＳ５０３の処理の詳細なフローである。
最初に、Ｓ５０２で列挙されたファイルとディレクトリのＵＲＬを文字列順にソートする（Ｓ６０１）。
次に、インデクス済みファイルリスト１６から走査範囲のインデクス済みファイルのＵＲＬリストを取得する（Ｓ６０２）。インデクス済みファイルのＵＲＬリストは、インデクス済みファイルリスト１６から走査範囲に含まれるディレクトリＵＲＬ１６１のレコードをすべて抽出し、それらのレコードに含まれるファイル名１６３をそれぞれ接続してファイルのＵＲＬを作成することで作成できる。ここで走査範囲は階層数で表すことができ、階層数はディレクトリＵＲＬに含まれる”/”の数から算出可能である。よって、例えば”/”を指定数含む正規表現を作成して、その正規表現に適合するディレクトリＵＲＬ１６１を抽出することで、走査範囲のディレクトリＵＲＬ１６１のレコードを抽出することができる。
【００４３】
次に、ソート済みＵＲＬリストの先頭行を取り出す（Ｓ６０３）。このＵＲＬは現在ファイルサーバ３上で走査範囲に含まれる検索対象ファイル３２のうち、ファイルＵＲＬが辞書順（ＡＢＣ順）で最も前にあるファイルのＵＲＬである。
次に、インデクス済みファイルのＵＲＬリストの先頭行を取り出す（Ｓ６０４）。このＵＲＬは記憶装置１５に記憶されたインデクス済みファイルリスト１６のなかで走査範囲に含まれるファイルのうち、ファイルＵＲＬが辞書順で最も前にあるファイルのＵＲＬである。
次に、Ｓ６０３とＳ６０４で取り出したＵＲＬ同士を文字列として比較する（Ｓ６０５）。
次に、Ｓ６０５の比較の結果、ＵＲＬが文字列として一致していたかどうかを判断する（Ｓ６０６）。
【００４４】
もしＵＲＬが一致していた場合は、現在ファイルサーバ３上にあるファイルまたはディレクトリと、インデクス済みファイルリストのファイルまたはディレクトリのＵＲＬが一致しているということなので、このファイルまたはディレクトリは、新規にファイルサーバ３上に追加されたファイルまたはディレクトリや、前回インデクスされたファイルまたはディレクトリが削除されたものではなく、変更が無かった、または更新があったファイルまたはディレクトリであると判断できる。このファイルまたはディレクトリは更新の可能性があるファイルまたはディレクトリであるとして、追加、更新、削除されたファイルデータの一覧に追加する処理（Ｓ６０７）を行う。この処理の詳細は更新ファイル追加処理（Ｓ９０１等）として後述する。
【００４５】
次に、ソート済みＵＲＬリストに次の行があるかどうかを判断する（Ｓ６０８）。
もしソート済みＵＲＬリストに次の行がある場合は、次に、インデクス済みファイルのＵＲＬリストに次の行があるかを判断する（Ｓ６０９）。
もしインデクス済みファイルのＵＲＬリストに次の行がある場合は、ソート済みＵＲＬリストの次の行を取り出す（Ｓ６１０）。
【００４６】
次に、インデクス済みファイルのＵＲＬリストの次の行を取り出す（Ｓ６１１）。
次に、Ｓ６０５に戻り、次のＵＲＬ同士を比較する。ソート済みＵＲＬリストとインデクス済みファイルのＵＲＬリストの全てのＵＲＬについて処理を終えるまで、これらの処理を繰り返し実行する。
もしＳ６０８の判断で、ソート済みＵＲＬリストに次の行が無かった場合は、インデクス済みファイルのＵＲＬリストに残っているＵＲＬを削除されたファイルまたはディレクトリであるとして追加、更新、削除ファイル一覧に追加する処理（図７のＳ６２０）を行う。この処理の詳細はインデクス済みファイルのＵＲＬリストの残件処理（Ｓ７０１等）として後述する。
【００４７】
もしＳ６０９の判断で、インデクス済みファイルのＵＲＬリストに次の行が無かった場合は、ソート済みＵＲＬリストに残っているＵＲＬを追加されたファイルまたはディレクトリとして追加、更新、削除ファイル一覧に追加する処理（図７のＳ６１９）を行う。この処理の詳細は、ソート済みＵＲＬリストの残件処理（Ｓ８０１等）として後述する。
もしＳ６０６の判断で、ＵＲＬが文字列として一致していなかった場合は、次にソート済みＵＲＬリストのＵＲＬが辞書順でインデクス済みファイルのＵＲＬリストのＵＲＬより前かどうかを判断する（図７のＳ６１２）。
【００４８】
もしソート済みＵＲＬリストのＵＲＬが辞書順でインデクス済みファイルのＵＲＬリストのＵＲＬより前だった場合は、インデクス済みファイルリストには存在していないファイルまたはディレクトリがファイルサーバ３上に新たに作成されたということを示すので、次に追加されたファイルまたはディレクトリであるとして、追加、更新、削除されたファイルデータの一覧に追加する処理（図７のＳ６１３）を行う。例えば、インデクス済みファイルのＵＲＬリストのＵＲＬが”http://server1/share1/etc/file1.doc”であり、ソート済みＵＲＬリストのＵＲＬが”http://server1/share1/etc/file0.txt”だった場合は、ソート済みＵＲＬリストのＵＲＬの方が辞書順で前であり、”http://server1/share1/etc/file0.txt”というファイルが前回のインデクス更新時から今回のインデクス時までの間にファイルサーバ３に新たに作成されたファイルであると判断できる。この処理の詳細は追加ファイル追加処理（Ｓ１００１等）として後述する。
【００４９】
次に、ソート済みＵＲＬリストに次の行があるかを判断する（Ｓ６１４）。
もしソート済みＵＲＬリストに次の行があればソート済みＵＲＬリストの次の行を取り出す（Ｓ６１５）。
次に、図６のＳ６０５に戻ってＵＲＬ同士を比較する。このとき、ソート済みＵＲＬリストのＵＲＬはＳ６１５の処理によって次の行に進んでいるが、インデクス済みファイルのＵＲＬリストのＵＲＬは次の行に進んでいない。
もしＳ６１４の判断でソート済みＵＲＬリストに次の行がなかった場合は、次にインデクス済みファイルのＵＲＬリストの残件処理（Ｓ６２０）を行う。
もしＳ６１２の判断でソート済みＵＲＬリストのＵＲＬが辞書順でインデクス済みファイルのＵＲＬリストのＵＲＬより後だった場合は、インデクス済みファイルリストに含まれていたファイルまたはディレクトリが、現在のファイルサーバ３上には存在しないということを示すので、次に削除されたファイルまたはディレクトリであるとして、追加、更新、削除されたファイルデータの一覧に追加する処理（図７のＳ６１６）を行う。この処理の詳細は削除ファイル追加処理（Ｓ１１０１等）として後述する。
【００５０】
次に、インデクス済みファイルのＵＲＬリストに次の行があるかどうかを判断する（Ｓ６１７）。
もしインデクス済みファイルのＵＲＬリストに次の行があればインデクス済みファイルのＵＲＬリストの次の行を取り出す（Ｓ６１８）。
次に、Ｓ６０５に戻ってＵＲＬ同士を比較する。このとき、インデクス済みファイルのＵＲＬリストのＵＲＬはＳ６１８の処理によって次の行に進んでいるが、ソート済みＵＲＬリストのＵＲＬは次の行に進んでいない。
【００５１】
もしＳ６１７の判断でインデクス済みファイルのＵＲＬリストに次の行がなければ、次にソート済みＵＲＬリストの残件処理（Ｓ６１９）を行う。
これまで述べたように、Ｓ６０５の判断でＵＲＬが一致していた場合は、ソート済みＵＲＬリストとインデクス済みファイルのＵＲＬリストを共に次の行に進め、Ｓ６０５の判断でＵＲＬが一致せず、かつＳ６１２の判断でソート済みＵＲＬリストのＵＲＬが辞書順で前だった場合はソート済みＵＲＬリストのみを次の行に進め、Ｓ６０５の判断でＵＲＬが一致せず、かつＳ６１２の判断でソート済みＵＲＬリストのＵＲＬが辞書順で後だった場合はインデクス済みファイルのＵＲＬリストのみを次の行に進める。このような方法で両ＵＲＬリストのＵＲＬを先頭から最後尾まで比較していくことで、該当範囲について追加、更新、削除されたファイルを全て追加、更新、削除されたファイルデータの一覧に追加することができる。
【００５２】
これらの処理により、今回の走査範囲についての追加、更新、削除されたファイルデータの一覧が作成され、次回の走査範囲が決定される。
図８はインデクス済みファイルのＵＲＬリストの残件処理の動作を示すフローチャートである。これは図７のＳ６２０の処理の詳細なフローである。
最初に、インデクス済みファイルのＵＲＬリストに次の行があるかどうかを判断する（Ｓ８０１）。ここでインデクス済みファイルのＵＲＬリストとは、図６の処理におけるインデクス済みファイルのＵＲＬリストと同じものを指す。
もしインデクス済みファイルのＵＲＬリストに次の行がある場合は、次にインデクス済みファイルのＵＲＬリストの次の行を取り出す（Ｓ８０２）。
【００５３】
次に取り出したインデクス済みファイルのＵＲＬリストのＵＲＬがディレクトリのものかどうかを判断する（Ｓ８０３）。
もし取り出したＵＲＬがディレクトリのものである場合は、次にインデクス済みファイルリストからＵＲＬが示すディレクトリ以下のファイルの一覧を取得する（Ｓ８０４）。これは、ファイルツリーにおいて上位のディレクトリが削除されると、その配下のファイルおよびディレクトリは全て削除されることから、インデクス済みファイルリストに存在する当該ファイルを、全て削除ファイルとして追加、更新、削除ファイル一覧に追加しなければならないためである。インデクス済みファイルリスト一覧から取り出したＵＲＬが示すディレクトリ以下のファイルの一覧を取得する方法としては、例えばインデクス済みファイルリストから取り出したＵＲＬと前方一致するＵＲＬを検索する方法が考えられる。
【００５４】
次に取得したファイルを全て削除ファイルとして追加、更新、削除ファイル一覧に追加する（Ｓ８０５）。
次にＳ８０１に戻り、インデクス済みファイルのＵＲＬリストに次の行があるかどうかを判断する。
もしインデクス済みファイルのＵＲＬリストに次の行が無い場合は処理を終了する。
もしインデクス済みファイルのＵＲＬリストに次の行がある場合はＳ８０１からＳ８０５の処理をインデクス済みファイルのＵＲＬリスト全てに対して繰り返し行う。
もしＳ８０３の判断でＵＲＬがディレクトリのものではなくファイルのものだった場合は、次にそのファイルを削除ファイルとして追加、更新、削除ファイル一覧に追加する（Ｓ８０５）。
【００５５】
これらの処理により、インデクス済みファイルのＵＲＬリストに残っているＵＲＬが、削除されたファイルまたはディレクトリとして追加、更新、削除ファイル一覧に追加される。
【００５６】
図９はソート済みＵＲＬリストの残件処理の動作を示すフローチャートである。これは、図７のＳ６１９の処理の詳細なフローである。
最初に、ソート済みＵＲＬリストに次の行があるかどうかを判断する（Ｓ９０１）。
もしソート済みＵＲＬリストに次の行がある場合は、次にソート済みＵＲＬリストの次の行を取り出す（Ｓ９０２）。
次に、ＵＲＬがディレクトリのものかどうかを判断する（Ｓ９０３）。
もしＵＲＬがディレクトリのものである場合は、次に、それが走査範囲の最下層のディレクトリであるかどうかを判断する（Ｓ９０４）。例えば、図１２のファイルツリーで第一階層１２０１から第五階層１２０５までを走査範囲に設定した場合は、第五階層１２０５に属するディレクトリのＵＲＬが最下層のディレクトリと判断される。
【００５７】
もしＵＲＬが示すディレクトリが最下層のディレクトリだった場合は、そのディレクトリは次回走査範囲における起点ディレクトリの一つとして含まれるため、次回走査範囲に追加する（Ｓ９０５）。この次回走査範囲はファイルリスト作成サーバ１の主記憶装置上に保持してもよいし、次回走査範囲に追加されるディレクトリ数が多い場合は記憶装置１５に一時的に記憶して次回処理の際にロードするようにしてもよい。
【００５８】
もしＳ９０４の判断で走査範囲の最下層のディレクトリではなかった場合は、現走査範囲に下位のディレクトリが含まれているため、そのディレクトリは次回走査範囲に含める必要は無い。よって、次にＳ９０１に戻ってソート済みＵＲＬリストに次の行があるか判断する。
もしＳ９０３の判断でＵＲＬがディレクトリのものではなくファイルのものだった場合は、そのファイルを追加ファイルであるとして追加、更新、削除ファイル一覧に追加する。
次に、Ｓ９０１に戻ってソート済みＵＲＬリストに次の行があるか判断する。
もしＳ９０１の判断でソート済みＵＲＬリストに次の行が無かった場合は、処理を終了する。
【００５９】
これらの処理により、ソート済みＵＲＬリストに残っているＵＲＬが、ファイルの場合は追加ファイルとして追加、更新、削除ファイル一覧に追加され、また、走査範囲の最下層のディレクトリの場合は次回走査範囲に追加される。
図１０は更新ファイル追加処理の動作を示すフローチャートである。これは図６のＳ６０７の処理の詳細なフローである。
最初に、ＵＲＬがディレクトリのものであるかどうか判断する（Ｓ１００１）。このＵＲＬは図６のＳ６０５で比較し、Ｓ６０６で一致していると判断されたＵＲＬであり、ソート済みＵＲＬリストから取り出したＵＲＬを使用してもよいし、インデクス済みファイルのＵＲＬリストから取り出したＵＲＬを使用してもよい。
【００６０】
もしＵＲＬがディレクトリのものである場合は、次に走査範囲の最下層のディレクトリであるかどうかを判断する（Ｓ１００２）。
もしＵＲＬが示すディレクトリが最下層のディレクトリだった場合は、そのディレクトリは次回走査範囲における起点ディレクトリの一つとして含まれるため、次回走査範囲に追加する（Ｓ１００３）。
【００６１】
もしＳ１００２の判断で走査範囲の最下層のディレクトリではなかった場合は、現走査範囲に下位のディレクトリが含まれているため、そのディレクトリは次回走査範囲に含める必要は無い。よって処理を終了する。
もしＳ１００１の判断で、ＵＲＬがディレクトリのものではなくファイルのものだった場合は、次にそのＵＲＬに対するインデクス済みファイルのファイル情報ハッシュ値１６４と、ファイルサーバ３上のソート済みＵＲＬリストのＵＲＬが示すファイルのメタデータからファイル情報ハッシュ値１６４と同様の方式で算出したハッシュ値を比較する（Ｓ１００４）。
【００６２】
次に、比較したハッシュ値に差があるかどうかを判断する（Ｓ１００５）。
Ｓ１００５の判断でハッシュ値に差がある場合は、そのファイルが更新されていることを示すので、次にそのＵＲＬを更新ファイルとして追加、更新、削除ファイル一覧にＵＲＬを追加する（Ｓ１００６）。
Ｓ１００５の判断でハッシュ値に差が無い場合は、そのファイルが更新されていないことを示すので、そのファイルについては追加、更新、削除ファイル一覧に追加する必要は無い。そのため、これで処理を終了する。
これらの処理により、ＵＲＬがファイルであり、かつ更新されていた場合は、更新ファイルであるとして追加、更新、削除されたファイルデータの一覧に追加され、また、走査範囲の最下層のディレクトリの場合は次回走査範囲に追加される。
【００６３】
図１１は追加ファイル追加処理の動作を示すフローチャートである。これは図７のＳ６１３の処理の詳細なフローである。
最初に、ソート済みＵＲＬリストのＵＲＬがディレクトリのものかどうかを判断する（Ｓ１１０１）。
もしＵＲＬがディレクトリのものだった場合は、次にそのディレクトリが走査範囲の最下層のディレクトリかどうかを判断する（Ｓ１１０２）。
もしディレクトリが最下層のものだった場合は、次にディレクトリを次回走査範囲に追加する（Ｓ１１０３）。
もしＳ１１０２の判断で、ディレクトリが走査範囲の最下層のディレクトリではなかった場合は、これで処理を終了する。
【００６４】
もしＳ１１０１の判断で、ソート済みＵＲＬリストのＵＲＬがディレクトリのものではなくファイルのものだった場合は、そのファイルを追加ファイルとして追加、更新、削除ファイル一覧に追加する（Ｓ１１０４）。
これらの処理により、ＵＲＬがファイルである場合は、追加ファイルであるとして追加、更新、削除されたファイルデータの一覧に追加され、また、走査範囲の最下層のディレクトリの場合は次回走査範囲に追加される。
【００６５】
図１２は削除ファイル追加処理の動作を示すフローチャートである。これは図７のＳ６１６の処理の詳細なフローである。
最初に、インデクス済みファイルのＵＲＬリストのＵＲＬがディレクトリのものかどうかを判断する（Ｓ１２０１）。
もしＵＲＬがディレクトリのものだった場合は、そのディレクトリ以下のファイル全てを削除ファイルとして追加、更新、削除ファイル一覧に追加する必要があるため、次に、インデクス済みファイルリストからＵＲＬ配下のファイルの一覧を取得する（Ｓ１２０２）。
次に、削除ファイルとして追加、更新、削除ファイル一覧に取得した一覧に含まれるファイル全てを追加する（Ｓ１２０３）。
【００６６】
もしＳ１２０１の判断でインデクス済みファイルのＵＲＬリストのＵＲＬがディレクトリのものではなくファイルのものだった場合は、そのファイルを削除ファイルとして追加、更新、削除ファイル一覧に追加する（Ｓ１２０４）。
【００６７】
図５で示したＳ５０２の走査は複数の分散処理サーバ群２において分散処理実行手段２１を利用して並列に処理できる。Ｓ５０２の処理を分散させる場合は走査範囲に設定されたディレクトリのうち一定数を一つの分散処理実行手段２１に割り当てる。例えば一つの分散処理実行手段２１が最大５ディレクトリを受け持つようにすると、走査範囲に設定されたディレクトリが２２あった場合、５ディレクトリ、５ディレクトリ、５ディレクトリ、５ディレクトリ、２ディレクトリの５つに処理が分散される。
また、図５で示したＳ５０３のファイルリスト作成処理と次回走査範囲の設定も複数の分散処理サーバ群２において分散処理実行手段２１を利用して並列に処理できる。Ｓ５０３の処理を分散させる場合は、１つのディレクトリに対する処理を一つの分散処理実行手段２１に割り当てる。例えば図３に示す例で走査範囲が”http://server1/share1/etc”と”http://server1/share1/doc”だと設定されていた場合、”http://server1/share1/etc/”についての処理を一つの分散処理実行手段２１に割り当てて、”http://server1/share1/doc/”についての処理を一つの分散処理実行手段２１に割り当てる。例えば”http://server1/share1/etc/”についての処理を割り当てられた分散処理実行手段２１は”http://server1/share1/etc/file1.doc”や”http://server1/share1/etc/file2.xml”などの”http://server1/share1/etc/”の直下にあるディレクトリおよびファイルについてＳ５０３の処理を行う。
【００６８】
これらの処理により、ＵＲＬがファイルである場合は、削除ファイルであるとして追加、更新、削除されたファイルデータの一覧に追加され、また、ディレクトリの場合はインデクス済みファイルリストのＵＲＬ配下のファイル全てが削除ファイルとして追加、更新、削除されたファイルデータの一覧に追加される。
【符号の説明】
【００６９】
１    ファイルリスト作成サーバ
２    分散処理サーバ群
３    ファイルサーバ
４    ネットワーク
１１    スケジューラ
１２    ファイル走査処理分割方針決定手段
１３    ファイル走査実行手段
１４    ファイルリスト比較手段
１５    ファイルリスト作成サーバ１に接続された記憶装置
１６    インデクス済みファイルリスト
２１    分散処理実行手段
３１    ファイルサーバ３に接続された記憶装置
３２    検索対象ファイル
１６０  インデクス済みファイルリスト１６のファイルレコード
１６１  ディレクトリＵＲＬ
１６２  ディレクトリ内ファイル情報
１６３  ファイル名
１６４  ファイル情報ハッシュ値
【図１】
0005798503.tif 000002
【図２】
0005798503.tif 000003
【図３】
0005798503.tif 000004
【図４】
0005798503.tif 000005
【図５】
0005798503.tif 000006
【図６】
0005798503.tif 000007
【図７】
0005798503.tif 000008
【図８】
0005798503.tif 000009
【図９】
0005798503.tif 000010
【図１０】
0005798503.tif 000011
【図１１】
0005798503.tif 000012
【図１２】
0005798503.tif 000013
【図１３】
0005798503.tif 000014
【図１４】
0005798503.tif 000015
【図１５】
0005798503.tif 000016