説明

情報検索システム、検索サーバ及びプログラム

【課題】従来の情報検索システムは、検索用インデクスのオンラインアップデートを実現するため、インデクスのコピーを格納する物理ストレージを検索用と更新用の2系統用意する必要がある。
【解決手段】OSの提供するスナップショット機能により、オリジナルのインデクスの複製を作成し、その複製に対して検索エンジンをアタッチして利用するとともに、オリジナルのインデクスデータに対してインデクス更新処理を適用する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、インデックス容量の増大を抑制可能な情報検索システム及び検索サーバに関する。
【背景技術】
【0002】
情報爆発時代の到来により、組織・企業内において取り扱われるデータ量は指数関数的に増加している。なお、増加の著しいデータの多くは、ファイル等の非構造型データであると言われている。データ量の増加に伴い、情報の管理・再利用による業務効率の向上が求められている。これに伴い、組織・企業内におけるファイル検索技術のニーズが大きく拡大している。こうした背景に加え、近年における大量データ処理技術やファイル検索技術の発展・普及により、企業内におけるエンタープライズサーチの導入が進んでいる。
【0003】
検索システムの性能要件に挙げられる項目の一つに、インデクスの更新処理に要する時間(以下「更新処理時間」という。)がある。更新処理時間は、定期的に実行されるインデクス更新処理のバッチ処理時間が短いほど良い。
【0004】
また、検索システムの性能要件に挙げられる他の項目に、検索サービスを止めることなくインデクスを定期的に更新する機能、すなわち、検索サービスの可用性がある。検索サービスを停止しないインデクスの更新には、検索用と更新用の2つのインデクスを用いる方法がある。この方法は、検索用インデクスを利用して検索サービスを提供しつつ、バックグラウンドで更新用インデクスを更新する。具体的には、前回のインデクス更新時から新しく更新のあったファイルのみを差分インデクスとして構成し、更新用インデクスをマージする。ただし、この方法は、インデクスデータの保持領域を物理的に2つ保持する必要があり、ストレージ容量が最小必要量の2倍になってしまう。
【0005】
例えば特許文献1には、インデクスデータを圧縮・削減する方式として、以下の方法が開示されている。外部文書番号と内部文書番号をテーブルで管理し、文書に更新が発生すると、編集により存在位置が変更された文字列に関する位置情報のみをインデクスに追加する。これにより、高速なインデクス更新機能を実現するとともに、位置情報の二重登録を防止する。その結果、総インデクス容量の増加を抑えている。
【0006】
一方、特許文献2には、以下の方法が開示されている。インデクスの生成時、各文書の文字列を単語ごとに分割し、各単語が先頭から数えて何番目に位置するかを示す位置情報の数字を求める。その後、各単語の位置を示す数字を予め設定された固定長以下の数値に集約する。最後に、位置情報の列を1つの転置リストにマッピングして保存する。これにより、インデクスサイズを削減する。また、固定長の代わりに、任意に指定された区切り文字を用いて位置情報を集約することにより、誤検出の可能性はあるものの検出漏れを防いでいる。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特開2001−14342号公報
【特許文献2】特開2010−262379号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
前述した特許文献1及び2に係る発明では、個々のインデクスデータのデータ格納方式を工夫することにより、インデクスデータ自体の圧縮・削減を実現する。しかし、検索サービスを無停止のままインデクスを更新するには、依然として、2系統のインデクスデータを物理的に保持することに変わりはなく、2重化によるデータ容量の大幅な増加を防ぐことは難しい。また、インデクスの最適化処理に関する効率化を実現する方式でもない。
【0009】
本発明は、インデクスの2重化によるデータ容量の物理的な増大を防ぎつつ、オンラインによるインデクスの更新を実現する。
【課題を解決するための手段】
【0010】
前述した課題を解決するため、本発明に係る情報検索システムにおいては、オリジナルのインデクスファイルのスナップショットを作成し、検索用インデクスにはスナップショット側のデータを利用し、更新にはオリジナルのデータを利用する。
【発明の効果】
【0011】
本発明によれば、インデックス更新中の可用性を維持しつつも、必要とされる物理的なストレージ容量を削減することができる。上述した以外の課題、構成及び効果は、以下の説明により明らかにされる。
【図面の簡単な説明】
【0012】
【図1】本形態例に係る情報検索システムの構成を説明する図。
【図2】スナップショットを利用したインデクス更新処理の概念を示す図。
【図3】クローリング管理DBテーブルの構成例を示す図。
【図4】インデクス生成・更新に関する全体処理を説明するフローチャート。
【図5】クローリング処理を説明するフローチャート。
【図6】差分インデクス生成処理を説明するフローチャート。
【図7】インデクス更新処理を説明するフローチャート。
【発明を実施するための形態】
【0013】
以下の実施の形態においては、便宜上その必要があるときは、複数のセクションまたは実施の形態に分割して説明する。以下の実施の形態において、要素の数等(個数、数値、量、範囲等を含む)に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でもよい。
【0014】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の機能を有する部材には同一または関連する符号を付し、その繰り返しの説明は省略する。また、以下の実施の形態では、特に必要なとき以外は同一または同様な部分の説明を原則として繰り返さない。
【0015】
図1に、形態例に係る情報検索システムの全体構成を示す。当該システムは、利用者端末101、ファイルサーバ102、インデクス生成サーバ103、検索サーバ104で構成される。本形態例の場合、ファイルサーバ102とインデクス生成サーバ103はLAN105を介して接続され、利用者端末101、インデクス生成サーバ103、検索サーバ104はLAN105を介して接続される。本形態例では、LAN105を介して各装置が接続されているが、インターネット等のネットワーク経由で接続されてもよい。
【0016】
図1には、インデクス生成サーバ103と検索サーバ104が物理的に別のマシン上で稼働する例を表しているが、これらのサーバは物理的に同一のマシン上で稼働してもよい。
【0017】
ファイルサーバ102には、検索対象となるファイル106が格納されている。
インデクス生成サーバ103には、クローリングモジュール107、インデクス生成モジュール108、検索エンジン109、クローリング管理DB110が配置される。クローリングモジュール107は、ファイルサーバ102を探索して更新ファイルを発見し、ダウンロードする機能を提供する。インデクス生成モジュール108は、ダウンロードされたデータから差分インデクスを生成する。検索エンジン109は、インデクス生成・検索機能を提供するモジュールであり、オープンソースの検索エンジンとして、Apache LuceneやSennaがある。検索エンジン109は、差分インデクス生成時にインデクス生成モジュール108により利用される。クローリング管理DB110は、前回のクローリング時からのファイル・ディレクトリの更新を管理する。
【0018】
検索サーバ104には、検索エンジン109、検索サービス111、インデクス管理サービス112、ファイルシステム113、ボリューム管理サービス114、検索用インデクス115、オリジナルインデクス116が配置される。検索サービス111は、利用者端末101から検索要求を受け付けると、検索エンジン109を使用して検索結果を生成して応答する。インデクス管理サービス112は、インデクス生成サーバ103で生成された差分インデクスと削除ファイルリストに基づいてオリジナルインデクス116に対して更新処理を行う。この他、インデクス管理サービス112は、オリジナルインデクス116の更新後にボリューム管理サービス114が提供するスナップショット機能により検索用インデクス115を生成する。また、インデクス管理サービス112は、生成した検索用インデクス115を検索可能にする検索エンジン109が提供する検索コアのアタッチ機能を提供する。例えば、Apache Luceneをベースにした検索サービスを実現するSolrには、前述の検索コアに相当するSolrCoreが存在し、インデクスがアタッチされたSolrCoreを動的に切り替えることにより、検索可能なインデクスのリアルタイムの切り替え機能を実現する。ボリューム管理サービス114は、論理ボリュームを構成可能にする検索サーバのOSに搭載されたサービスであり、例えばLinuxにおけるLVM(Logical Volume Manager)が一例である。ボリューム管理サービス114は、構成されたボリュームに対してスナップショットを作成する機能を提供する。スナップショット機能はCopy On Writeにより、瞬間的にボリュームのコピーを生成する機能であり、生成されたコピーはRead Onlyでアクセス可能である。
【0019】
図2に、スナップショットを利用したインデクス更新処理の概念を示す。検索用インデクスとして検索コア201がアタッチしているN(自然数)世代目インデクス202は、オリジナルインデクス203を格納する論理ボリュームに対してスナップショットで生成され、コピーされたボリューム上のインデクスである。検索エンジン109は、検索要求に対し、検索用インデクス115であるN世代目インデクス202にアクセスして検索処理を実行する。検索処理において、インデクスへのアクセスはRead Onlyである。このため、スナップショット上のインデクスデータに対し、検索コア201をアタッチして検索処理することができる。
【0020】
次回更新時には、オリジナルインデクス203に対して更新処理を行う。このとき、スナップショット上のN世代目インデクス202のデータをそのままにして、オリジナルインデクス203のデータを更新することができる。更新後は、新たにスナップショットを生成し、そのスナップショット上のインデクスデータをN+1世代目インデクスとする。このN+1世代目インデクスに検索コア201をアタッチして検索可能にした後、N世代目インデクスを格納するスナップショットを削除する。このようにスナップショットを利用することで、インデクスを物理的に完全に2重化する方式に比べ、インデクスが使用するストレージ容量を圧縮・削減することができる。
【0021】
図3に、クローリング管理DB110に登録されているテーブルの構造例を示す。テーブルの属性値には、パス名301、ハッシュ値302、削除フラグ303がある。パス名301は、検索対象となるファイルサーバ内に格納されているファイル・ディレクトリのファイルパスを記録する。ハッシュ値302は、ファイル・ディレクトリの属性情報(ファイルパス、更新日時、所有者、ACL等)のハッシュ値を格納する。ハッシュ値302は、各ファイルパスで指定されたファイルの更新の検知に利用される。
【0022】
削除フラグ303は、前回のクローリング時と比較して、登録エントリに対応するファイル・ディレクトリが削除されているかどうかをチェックするために使用するフラグ情報である。削除フラグ303は、クローリング時に初期値として「1」が設定され、クローリングで存在が確認されたファイル・ディレクトリに「0」が設定される。全てのファイル・ディレクトリのクローリングが完了した時点で、削除フラグ303が「1」のエントリを調べると、削除ファイルリストを作成することができる。
【0023】
インデクス生成サーバ103は、削除ファイルリストと、新規作成・更新のあったファイルに関する差分インデクスを生成し、検索サーバ104に転送する。検索サーバ104は、転送された削除ファイルリストと差分インデクスを用い、現在利用されているインデクスの更新処理を実行する。
【0024】
図4に、インデクスの生成・更新処理を説明するフローチャートを示す。インデクスの生成・更新処理は、インデクス生成サーバ103及び検索サーバ104上で定期的に実行される処理である。インデクスの生成・更新処理は、前回の実行後に新規に作成・更新又は削除されたファイル・ディレクトリに対し、現在の検索サーバ104上で利用されているインデクスを更新する処理である。
【0025】
インデクスの生成・更新処理が開始されると、インデクス生成サーバ103は、検索対象となるファイルサーバ102に対してクローリング処理が実行される(ステップ401)。クローリング処理においては、前回のインデクス生成・更新処理以降に削除されたファイルリスト(削除ファイルリスト)の作成と、新規に作成・更新されたファイルのダウンロードが実行される。その後、ダウンロードされたファイルデータを用いた差分インデクスの生成処理が行われる(ステップ402)。次に、生成された差分インデクスと削除ファイルリストは検索サーバ104に転送され(ステップ403)、検索サーバ104上で、転送されたデータに基づいて現在検索に利用しているインデクスの更新処理を実行する(ステップ404)。フローチャートにおいて、サブルーチンとして定義したクローリング処理、差分インデクス生成処理、インデクス更新処理の詳細については、以降のフローチャートで説明する。
【0026】
図5に、クローリング処理のフローチャートを示す。クローリング処理は、インデクス生成サーバ内のクローリングモジュール107で実行される。クローリングモジュール107は、探索対象であるファイルサーバ102のディレクトリを探索するが、探索される各ファイル・ディレクトリに関してループ処理を行う(ステップ501)。
【0027】
まず、クローリングモジュール107は、探索対象とするファイル・ディレクトリのファイル属性値を取得し、ハッシュ値を計算する(ステップ502)。次に、ファイルパスをキーとしてクローリング管理DB110をチェックし、指定されたファイルパスのエントリがDB内に存在するか否かをチェックする(ステップ503)。
【0028】
クローリング管理DB110にファイルパスが存在しない場合(ステップ503で否定結果の場合)、当該ファイルパスのファイル・ディレクトリは、前回のクローリング時以降に新規生成されたことを意味する。このため、クローリングモジュール107は、クローリング管理DB110にエントリを追加し、ファイルの場合はデータをダウンロードする(ステップ504)。ファイル・ディレクトリが存在するため、クローリングモジュール107は、削除フラグをクリアして(ステップ507)、ループの次の探索ファイル・ディレクトリ処理に移行する。
【0029】
一方、クローリング管理DB110にファイルパスが存在しない場合(ステップ503で肯定結果の場合)、クローリングモジュール107は、計算したファイル属性値のハッシュ値が、クローリング管理DB110に登録されているハッシュ値と等しいがどうかチェックする(ステップ505)。
【0030】
計算したハッシュ値が登録されているハッシュ値が同じ場合(ステップ505で肯定結果の場合)、前回のクローリング時から更新されていないことを意味する。この場合、クローリングモジュール107は、データのダウンロード処理は行わず、削除フラグをクリアしてループ処理の次のステップに移る(ステップ507)。
【0031】
計算されたハッシュ値が登録されているハッシュ値と異なる場合(ステップ505で否定結果の場合)、前回のクローリング時よりファイル・ディレクトリが更新されていることを意味する。この場合、クローリングモジュール107はエントリのハッシュ値を更新し、ファイルの場合はデータをダウンロードする(ステップ506)。その後、クローリングモジュール107は、削除フラグをクリアしてループ処理の次のステップに移る(ステップ507)。
【0032】
探索・ダウンロード処理のループが終了した段階で、クローリングモジュール107は、クローリング管理DB110の削除フラグをチェックし、削除フラグが「1」のエントリのファイルパスを全て取得して削除ファイルリストを生成し、その後、次回クローリング処理のために全エントリの削除フラグを「1」に初期化する(ステップ508)。
【0033】
図6に、差分インデクス生成処理のフローチャートを示す。差分インデクス生成処理は、インデクス生成モジュール108により実行される。本モジュールは、クローリング処理によりダウンロードされた新規作成・更新されたファイル群に逐次アクセスし、差分インデクスに登録処理を行うループ処理を実行する(ステップ601)。
【0034】
ループ処理が開始されると、インデクス生成モジュール108は、ファイルからテキストデータを抽出し(ステップ602)、ファイルのメタデータを抽出する(ステップ603)。その後、インデクス生成モジュール108は、差分インデクスに追加登録するためのデータを作成する。インデクス生成モジュール108は、そのデータを入力値として検索エンジン109を利用し、作成されたデータを差分インデクスに追加登録する(ステップ604)。全てのダウンロードデータが差分インデクスに登録されるまでループ処理を続ける。本処理で生成される差分インデクスは、前回のインデクス生成・更新処理以降に新規作成・更新されたファイル群に関するインデクスである。
【0035】
図7に、インデクス更新処理のフローチャートを示す。本処理は、検索サーバ104上でインデクス管理サービスにより実行される処理であり、インデクス生成サーバ103で生成された差分インデクス及び削除ファイルリストに基づいて、N世代目の検索用インデクスであるN世代目インデクスを更新する処理である。
【0036】
まず始めに、インデクス管理サービスは、N世代目インデクスのスナップショットの元となるオリジナルインデクスに対し、削除ファイルリストに記録されたファイルに関するエントリを削除する(ステップ701)。
【0037】
次に、インデクス管理サービスは、オリジナルインデクスに差分インデクスをマージする(ステップ702)。例えば、Luceneの場合、インデクス管理サービスは、差分インデクスをオリジナルインデクスにマージするために、まず、差分インデクスに登録されているファイル群の中からオリジナルインデクスに登録されているものを削除する。その後、インデクス管理サービスは、差分インデクスのデータをオリジナルインデクスに追加する。
【0038】
次に、インデクス管理サービスは、更新されたオリジナルインデクスを記録しているボリュームのスナップショットを作成する(ステップ703)。その後、インデクス管理サービスは、作成したスナップショット上のインデクスを、N+1代目インデクスとして新規に生成した検索コア201にアタッチし(ステップ704)、アタッチした検索コア201のウォームアップ処理を実行する(ステップ705)。ウォームアップ処理とは、検索履歴情報を用いて、N+1世代目インデクスにアタッチした検索コアが内部的にアタッチしたインデクスに対してクエリを発行し、結果をキャッシュする処理で、次回クエリ時の応答性能の向上に行われる。ウォームアップ処理が終わると、インデクス管理サービスは、N世代目インデクスとN+1世代目インデクスのそれぞれがアタッチされている検索コア201をスワップする(ステップ706)。
【0039】
このスワップ処理により、N+1世代目インデクスが検索可能となる。最後に、インデクス管理サービスは、N世代目インデクスにアタッチされている検索コア201を破棄し、N世代目インデクスを保持するスナップショットを削除する(ステップ707)。
【0040】
以上の機能構成を採用することにより、検索サービスを稼働させたまま、動的にインデクスを更新することができる。この際、インデクスの更新はスナップショットの更新により実行する。従って、本形態例に係る情報検索システムは、検索用と更新用の2つのインデクスデータを物理的に保持する必要がない。従って、必要なストレージ容量を節減することができる。
【符号の説明】
【0041】
101…利用者端末
102…ファイルサーバ
103…インデクス生成サーバ
104…検索サーバ
105…LAN
106…ファイル
107…クローリングモジュール
108…インデクス生成モジュール
109…検索エンジン
110…クローリング管理DB
111…検索サービス
112…インデクス管理サービス
113…ファイルシステム
114…ボリューム管理サービス
115…検索用インデクス
116…オリジナルインデクス
201…検索コア
202…N世代目インデクス
203…オリジナルインデクス
204…N+1世代目インデクス
301…パス名
302…ハッシュ値
303…削除フラグ

【特許請求の範囲】
【請求項1】
ファイルサーバに接続された情報処理システムにおいて、
前記ファイルサーバに格納されたファイル群の中から、新規生成・更新、及び、削除されたファイル群を探索する処理機能と、
新規生成・更新されたファイル群をダウンロードする処理機能と、
削除されたファイル群に関する削除ファイルリストを生成する処理機能と、
ダウンロードされたファイル群のインデクスを生成する処理機能と、
前記インデクス及び前記削除ファイルリストを用い、記憶領域に格納されたインデクスを更新する処理機能と、
更新後のインデクスデータを格納する論理ボリュームのスナップショットを作成する処理機能と、
前記スナップショットされたボリューム上のインデクスデータを検索可能なインデクスとして設定する処理機能と
を有することを特徴とする情報処理システム。
【請求項2】
請求項1に記載の情報処理システムにおいて、
前記ファイルサーバに格納されたファイル群の中から、新規生成・更新、及び削除されたファイル群を探索する処理機能は、前回のインデクス更新処理時における前記ファイルサーバ内の全ファイル・ディレクトリのパス名を鍵とする各ファイル・ディレクトリの属性情報のハッシュ値及び削除フラグを格納したDBに照会し、新規生成・更新ファイルの検知及び削除されたファイルを認識することを特徴とする情報処理システム。
【請求項3】
請求項1に記載の情報処理システムにおいて、
N(自然数)+1番目のインデクスを検索可能なインデクスとして設定した後に、N番目のインデクスデータを保持するスナップショットを削除する処理機能を有する
ことを特徴とする情報処理システム。
【請求項4】
インデクス生成サーバに接続される検索サーバにおいて、
前回のインデクス生成以降、ファイルサーバで新規に生成・更新されたファイル群のインデクスと前記ファイルサーバから削除されたファイル群に関する削除ファイルリストを、前記インデクス生成サーバから受信する処理機能と、
前記インデクス及び前記削除ファイルリストを用い、記憶領域に格納されたインデクスを更新する処理機能と、
更新後のインデクスデータを格納する論理ボリュームのスナップショットを作成する処理機能と、
前記スナップショットされたボリューム上のインデクスデータを検索可能なインデクスとして設定する処理機能と
を有することを特徴とする検索サーバ。
【請求項5】
請求項4に記載の検索サーバにおいて、
N(自然数)+1番目のインデクスを検索可能なインデクスとして設定した後に、N番目のインデクスデータを保持するスナップショットを削除する処理機能を有する
ことを特徴とする検索サーバ。
【請求項6】
ファイルサーバに接続された情報処理システムに搭載されるコンピュータに、
前記ファイルサーバに格納されたファイル群の中から、新規生成・更新、及び、削除されたファイル群を探索する処理機能、
新規生成・更新されたファイル群をダウンロードする処理機能、
削除されたファイル群に関する削除ファイルリストを生成する処理機能、
ダウンロードされたファイル群のインデクスを生成する処理機能、
前記インデクス及び前記削除ファイルリストを用い、記憶領域に格納されたインデクスを更新する処理機能、
更新後のインデクスデータを格納する論理ボリュームのスナップショットを作成する処理機能、
前記スナップショットされたボリューム上のインデクスデータを検索可能なインデクスとして設定する処理機能
を実行させるプログラム。
【請求項7】
請求項6に記載のプログラムにおいて、
前記ファイルサーバに格納されたファイル群の中から、新規生成・更新、及び削除されたファイル群を探索する処理機能は、前回のインデクス更新処理時における前記ファイルサーバ内の全ファイル・ディレクトリのパス名を鍵とする各ファイル・ディレクトリの属性情報のハッシュ値及び削除フラグを格納したDBに照会し、新規生成・更新ファイルの検知及び削除されたファイルを認識することを特徴とするプログラム。
【請求項8】
請求項6に記載のプログラムにおいて、
N(自然数)+1番目のインデクスを検索可能なインデクスとして設定した後に、N番目のインデクスデータを保持するスナップショットを削除する処理機能を有する
ことを特徴とするプログラム。
【請求項9】
インデクス生成サーバに接続される検索サーバに搭載されるコンピュータに、
前回のインデクス生成以降、ファイルサーバで新規に生成・更新されたファイル群のインデクスと前記ファイルサーバから削除されたファイル群に関する削除ファイルリストを、前記インデクス生成サーバから受信する処理機能、
前記インデクス及び前記削除ファイルリストを用い、記憶領域に格納されたインデクスを更新する処理機能、
更新後のインデクスデータを格納する論理ボリュームのスナップショットを作成する処理機能、
前記スナップショットされたボリューム上のインデクスデータを検索可能なインデクスとして設定する処理機能
を実行させるプログラム。
【請求項10】
請求項9に記載のプログラムにおいて、
N(自然数)+1番目のインデクスを検索可能なインデクスとして設定した後に、N番目のインデクスデータを保持するスナップショットを削除する処理機能を有する
ことを特徴とするプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2013−73557(P2013−73557A)
【公開日】平成25年4月22日(2013.4.22)
【国際特許分類】
【出願番号】特願2011−214003(P2011−214003)
【出願日】平成23年9月29日(2011.9.29)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(000233055)株式会社日立ソリューションズ (1,610)