(57)【特許請求の範囲】
【請求項１】
ファイルシステム制御部と、構成情報ファイルシステムとを有する検索機能付きファイルストレージ装置において、
前記ファイルシステム制御部が、N-gramインデックスの生成に使用された原始ファイルの構成文字列の配列上の先頭アドレスを０とし、前記構成文字列のうちＮ（自然数）で割り切れるアドレスに位置する文字で始まるＮ個の文字列に対応する前記N-gramインデックスの符号だけを追記した構成ファイルを生成する
ことを特徴とする検索機能付きファイルストレージ装置。
【請求項２】
請求項１に記載の検索機能付きファイルストレージ装置において、
前記ファイルシステム制御部は、
仮想的に管理されている原始ファイルの削除時、又は、仮想的に管理する原始ファイルの新規保存時、又は、仮想的に管理されている原始ファイルの内容変更時、前記N-gramインデクスを更新する
ことを特徴とする検索機能付きファイルストレージ装置。
【請求項３】
請求項１に記載の検索機能付きファイルストレージ装置において、
前記ファイルシステム制御部は、実管理する原始ファイルのN-gramインデクスの作成と並行して、前記構成ファイルを作成する
ことを特徴とする検索機能付きファイルストレージ装置。
【請求項４】
請求項３に記載の検索機能付きファイルストレージ装置において、
前記ファイルシステム制御部は、前記構成ファイルの作成後に、ストレージ領域上から前記原始ファイルを削除する
ことを特徴とする検索機能付きファイルストレージ装置。
【請求項５】
検索機能付きファイルストレージ装置に搭載されたコンピュータに、
N-gramインデクスの作成に使用された原始ファイルの構成文字列の配列上の先頭アドレスを０とし、前記構成文字列のうちＮ（自然数）で割り切れるアドレスに位置する文字で始まるＮ個の文字列に対応する前記N-gramインデックスの符号だけを追記した構成ファイルを生成するステップと、
生成された前記構成ファイルを記憶領域に格納するステップと
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索機能を有するファイルストレージ装置と当該装置の動作を制御するプログラムに関する。
【背景技術】
【０００２】
近年、全文検索技術は急速に進歩しつつある。その一方で、全文検索技術が対象とするデータ量の巨大化に伴い、幾つかの課題が指摘されている。
【０００３】
指摘の一つは、索引（以下、「インデクス」という。）の肥大化である。特に、テキストファイル（人間が直接理解可能な形式のファイル）を索引付けする場合、インデクスの規模は、索引付けの対象となったファイルとほぼ等しい大きさになる。結果的に、ファイルそのものの内容（以下、「コンテンツ」という。）の２倍の容量が必要となる。
【０００４】
指摘の１つは、コンテンツとインデクスの間で同種の情報を二重に保持することに伴う情報の一貫性である。すなわち、情報の一貫性を両者間で保持することの困難性についての指摘である。
【０００５】
これらの問題のうち前者については、例えば特許文献１に示す方法が提案されている。すなわち、ｎグラム構造に特殊な情報を付与し、インデクスの規模を抑制する方法が提案されている。一方、これら問題のうち後者については、例えば特許文献２に示す方法が提案されている。すなわち、ファイルシステムの内部にインデクスを設け、コンテンツとインデクスが一致しない期間を短縮する方法が提案されている。なお、この方法では、ファイルシステム全体を走査することなく、効率的にインデクスを構築する工夫が広く行われている。
【０００６】
しかし、特許文献１に記載の方法は、インデクスの容量を抑制できたとしても、コンテンツが使用する容量を抑制することはできない。また、この方法は、インデクスの構築／更新時に、ファイルシステム全体の走査を必要とする。従って、コンテンツがファイルシステムに登録された後も、それらが走査されてインデクスが構築されるまでの間、コンテンツとインデクスの内容が一致しない期間が発生する。
【０００７】
一方、特許文献２に記載の方法は、利用者に対してファイルシステムとして振る舞い、新たなコンテンツがシステムに登録される契機を自ら検出することができる。このため、ファイルシステムの全体を走査しなくても、インデクスを構築することができる。従って、特許文献１のようにコンテンツとインデクスとの間に不整合が生じる期間は生じないか、少なくとも期間を短縮できる。しかし、特許文献２の方法は、ファイルシステムの内部において、コンテンツとインデクスをそれぞれ独立したデータとして取り扱う。このため、コンテンツとインデクスで同種の情報を二重に持つことに変わりはない。また、ファイルシステム内部の障害により不整合を生じさせないための処理は複雑化しがちである。さらに、この方法は、容量上の効率化を改善することはできない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００４−１６４２２３号公報
【特許文献２】特開２００５−３０９７２７号公報
【非特許文献】
【０００９】
【非特許文献１】D.A. Huffman, "A method for the construction of minimum-redundancy codes", Proceedings of the I.R.E., Sept. 1952, pp. 1098-1102
【非特許文献２】早坂 良太, 『オープンソースの全文検索システムの速度性能比較』, 電気通信大学尾内研究室卒業論文, 平成18年, pp. 1
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ところで、特許文献１の方法には、仮にファイルシステムが更新の生じたファイルのみを通知する機能を利用可能であるとしても、以下に示す問題が予想される。各種の障害や機器の構成変更が生じた場合に、コンテンツとインデックスの間の一貫性を回復するのに長期の期間が必要になるという問題である。特許文献１の方法は、一貫性を回復するために、コンテンツを収容したファイルシステム全体を走査する以外の手段に乏しい。このため、ファイルシステムが巨大な場合には特に、インデックスの一貫性を回復するまでに、数日から数週間もの期間が必要となる。
【００１１】
また、現在の全文検索システムは、大量のテキスト文書（人間が理解可能な形式の文書）を索引付けする場合、文書そのものと同じかそれを越える規模のインデクスを必要とする。インデクス全体は索引付けを行った文書と同量の情報を含んでおり、システム全体で冗長な情報を含んでいる。しかも、冗長な情報は、全文検索システムと同一の情報でなく、複雑な依存関係を有している。このため、各種の障害発生時に一貫性が保たれなくなり、索引付けの再実行、更新されたファイルの検出等、復旧処理の複雑化の原因となっている。
【００１２】
本発明の目的の一つは、従来に比べ、大幅に小さな空間に文書とその索引とを収容することができるファイルシステムとプログラムを提供することである。また、本発明の一つの目的は、ファイルの内容を小さなコストで直ちに索引に登録できるファイルシステムとプログラムを提供することである。また、本発明の一つの目的は、索引とファイル本体の内容の一貫性を容易に維持できるファイルシステムとプログラムを提供することである。
【課題を解決するための手段】
【００１３】
発明者らは、前述した目的の一つ又は複数を実現するため、ファイルシステム制御部と、構成情報ファイルシステムとを有する検索機能付きファイルストレージ装置において、ファイルシステム制御部が、N-gramインデクスの作成に使用された原始ファイルの構成文字列を、その配列順に重複なくかつ抜けなく再構成できるように、N-gramインデクスの各項目を表す符号の一部を配列した構成ファイルを生成する仕組みを提案する。
【発明の効果】
【００１４】
本発明の場合、N-gramインデクスの作成に使用した原始ファイルの保存に代えて、原始ファイルの構成文字列を、その配列順に重複なくかつ抜けなく再構成できるように、N-gramインデクスの各項目を表す符号の一部を配列した構成ファイルを保存する。構成ファイルは、N-gramインデクスの符号列の一部（Ｎ分の１）で構成されるため、原始ファイルそのものを保存する場合に比して容量が小さく済む。結果的に、従来に比べ、大幅に小さな空間に文書（原始ファイル）とその索引とを収容することができる。
【００１５】
また、本発明の場合には、原始ファイルの代わりに保存する構成ファイルそのものがN-gramインデクスの符号列で表現される。このため、小さいコストでファイルの内容を直ちに索引に登録することができ、かつ、索引とファイル本体の内容の一貫性を容易に維持することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明に係るシステムの全体構成例を示す図。
【図２】N-gramインデクスのデータ構成例を示す図。
【図３】構成ファイルのデータ構成例とN-gramインデックスとの対応関係を説明する図。
【図４】ファイルシステム制御部の詳細構成例を示す図。
【図５】ファイルの新規作成時におけるファイルシステム制御部の処理動作を説明するフローチャート。
【図６】ファイルの削除時におけるファイルシステム制御部の処理動作を説明するフローチャート。
【発明を実施するための形態】
【００１７】
以下、図面に基づいて、発明の実施形態例を説明する。なお、後述する実施形態はいずれも一例であり、本発明には、本明細書に記載する任意の機能を組み合わせることで実現されるシステム、本明細書に記載する一部の機能を周知技術で置換したシステム、本明細書に記載する機能に周知技術を追加したシステムも含まれる。また、後述する実施例で実行される機能は、計算機（コンピュータ）上で実行されるプログラムとして実現される。もっとも、プログラムの一部又は全部は、ハードウェアを通じて実現しても良い。
【００１８】
（システムの全体構成）
図１に、実施例に係るストレージシステムの構成を示す。ストレージシステムは、検索機能付きファイルストレージ装置１０と、このファイルストレージ装置に直接接続されたクライアントコンピュータ１と、このファイルストレージ装置にネットワーク３及びネットワークファイルシステムゲートウェイ４を通じて接続されるクライアントコンピュータ２とで構成される。
【００１９】
ここで、クライアントコンピュータ１及び２は、本システムを利用する各種のコンピュータである。ネットワークシステムゲートウェイ４は、検索機能付きファイルストレージ装置１０をネットワーク経由で使用する場合に、検索機能付きファイルストレージ装置１０をWindowsファイル共有又はそれに類したネットワークファイルシステムとして動作させるための手段である。
【００２０】
検索機能付きファイルストレージ装置１０は、ローカルファイルシステムゲートウェイ５、ファイルシステム制御部６、構成情報ファイルシステム７、N-gramインデクス８、全文検索部９で構成される。
【００２１】
ここで、ローカルファイルシステムゲートウェイ５は、検索機能付きファイルストレージ装置１０を外部から利用可能とするためのインターフェースである。ローカルファイルシステムゲートウェイ５は、例えば外部から与えられた要求を、装置内のデータ構造に適した形式に整理し、ファイルシステム制御部６に引き渡す機能を提供する。
【００２２】
ファイルシステム制御部６は、ローカルファイルシステムゲートウェイ５から与えられた要求に基づいて、構成情報ファイルシステム７及びN-gramインデクス８に対する入出力処理を実行する。
【００２３】
構成情報ファイルシステム７は、ファイル及びディレクトリのメタ情報、すなわちファイル名、権限情報、変更時刻等、ファイル内容以外の情報を含んでいる。また、構成情報ファイルシステム７は、格納前のファイル（原始ファイル）の内容そのものをファイル（以下、「構成ファイル」という。）として格納しないことを特徴とする。
【００２４】
構成ファイルの内容は、N-gramインデクス内に含まれる符号の連接として表現される。この明細書において、「連接」とは、符号の配列順にN-gramインデクスから対応文字列を読み出して配列した場合に、原始ファイルの構成文字列を重複や抜けなく再構成できる関係の意味で使用する。
【００２５】
例えば原始ファイルの構成文字列が「Hello」であり、バイグラムの場合（２文字の並びでインデックスを形成する場合）、N-gramインデクスは「He」「el」「ll」「lo」「o*」となる。このとき、各インデックスを特定する符号が出現順に「1」、「2」、「3」、「4」、「5」と付されているとすると、構成ファイルは、「1,3,5」で与えられる。この構成ファイルを構成する符号の並び順に文字列を読み出すと、「He」、「ll」、「o*」となり、原始ファイルの構成文字列「Hello」を抜けなく、かつ、重複なく復元できる。本明細書では、このような対応関係を有する構成ファイルを、N-gramインデクス８に基づいて作成し、構成情報ファイルシステム７に格納する。
【００２６】
なお、構成情報ファイルシステム７は、実際には必ずしもファイルシステムでなくても良い。構成情報ファイルシステム７は、例えばファイル及びディレクトリに関する情報を保持したデータベースでも良い。この明細書では、構成情報ファイルシステム７が、通常のファイルシステムで構成されているものとして説明する。
【００２７】
また、ローカルファイルシステムゲートウェイ５を経由することなく、ユーザが構成情報ファイルシステム７に直接アクセスできる仕組みは通常提供されないものとする。その一方で、構成情報ファイルシステム７の一部又は全部が、検索機能付きファイルストレージ装置１０からのみアクセス可能な外部システムとして、検索機能付きファイルストレージ装置１０の外部に配置される構成が考えられる。
【００２８】
N-gramインデクス８は、長さＮの文字列とその出現位置の対応関係をリスト形式（テーブル構造）で保持するファイルである。
【００２９】
全文検索部９は、ユーザから与えられた検索語に基づいた全文検索を、N-gramインデクスを対象として実行するアプリケーションソフトウェアである。
【００３０】
（N-gramインデックスのデータ構造）
図２に、N-gramインデクス８のデータ構造例を示す。Ｎの大きさは自然数であれば任意である。図２の場合には、説明を容易にするために、便宜的にＮ＝２の場合を示す。
N-gramインデクス８の各行は「Ｎ文字列」２１により識別される。
【００３１】
「符号」２２は「Ｎ文字列」２１を一意に特定するデータである。「Ｎ文字列」２１をN-gramインデックス８内に格納する際には、異なる符号が同一のＮ文字列を示しても良い。
【００３２】
「出現位置１」２３及び「出現位置２」２４は、対応する「Ｎ文字列」２１がどのファイルのどの位置に出現するかを示すデータである。図２においては、出現位置１と２の２つを用意しているが、「Ｎ文字列」の出現箇所が１つだけの場合には、出現位置２は使用されない。
【００３３】
因みに、各出現位置のうち対応ファイルの出現位置の特定には、inode番号、ファイルパス等を使用する。この実施例では、inode番号を使用する。また、ファイル内における各Ｎ文字列の出現位置の特定には、各Ｎ文字列の先頭に位置する文字（第１文字）が、対応ファイルの構成文字列で出現する先頭からの位置で特定する。従って、図２に示す例の場合、Ｎ文字列「ed」の出現位置１は、ファイル101の先頭から101番目の位置に出現することを表している。
【００３４】
また、Ｎ文字列は任意のファイルにおいて、任意の回数だけ出現し得る。このため、１つのＮ文字列に対して、任意の個数の出現位置が対応付けられた形式でN-gramインデックス８内に収容される。例えば、図２に示す例の場合、Ｎ文字列「ed」は、ファイル102の先頭から65番目の位置にも出現する。この位置は、Ｎ文字列「ed」に対応する出現位置２として格納される。勿論、「Ｎ文字列」の出現箇所が３つ以上の場合には、出現箇所の数だけ出現位置の記憶欄が用意される。
【００３５】
（構成ファイルとN-gramインデックスとの関係）
図３は構成ファイルのデータ構造とN-gramインデックスとの関係を示す。前述したように、構成ファイルを構成するN-gramインデクスの符号の配列は、対応する文字列を符号の配列順に表記すると、原始ファイルの構成文字列が抜け及び重複なしに再現されるように作成されている。因み、図３に示す例の場合、構成ファイルの配列（すなわち、符号１→符号２）により文字列「edac」を再構成することができる。
【００３６】
構成ファイルは、検索機能付きファイルストレージ装置１０内のどこに配置しても良い。この実施例の場合には、構成情報ファイルシステム７内のファイルとして格納する。
【００３７】
一般に、Ｎ文字列の出現頻度は一様ではないと考えられる。従って、N-gramインデックスの符号とＮ文字列の組を適切に選ぶことにより、構成ファイルの規模を小さくすることができる。すなわち、出現頻度が高いＮ文字列には短い符号を割り当て、出現頻度が低いＮ文字列には長い符号を割り当てれば、構成ファイルの大きさを小さくすることができる。この符号の選び方は、公知の方法として非特許文献１等に開示されている。
【００３８】
（ファイルシステム制御部の機能ブロック構成）
図４に、ファイルシステム制御部６の機能ブロック構成を示す。ファイルシステム制御部６は、ファイル復号部４２、ファイル属性情報制御部４３、ファイル符号化部４４、ファイル格納部４５、ファイル索引づけ部４６で構成される。これらの機能ブロックが構成情報ファイルシステム７とN-gramインデクス８と協調し、データの保管、索引づけ、通常ファイルとしてのアクセス機能を提供する。勿論、ファイルシステム制御部６は、前述した構成ファイルの作成も実行する。
【００３９】
ファイルシステムへのアクセスは、(1) ファイル内容の読み取り、(2) 属性情報の読み書き、(3) ファイル内容の書き込みの三つに大別できる。
【００４０】
ファイル復号部４２は、ファイル内容の読み取り機能を提供する。すなわち、ファイル復号部４２は、構成ファイルを構成する符号の配列に従ってN-gramインデクスの文字列を読み出し、原始ファイルの構成文字列を復元する。この後、ファイル復号部４２は、復元した構成文字列を要求元のクライアントコンピュータに出力する。
【００４１】
ファイル属性情報制御部４３は、属性情報の読み書き機能を提供する。ファイル属性情報制御部４３は、(1) ファイルの移動、削除、新規作成、(2) ファイル名の変更、参照、(3) 権限情報の変更、参照、(4) 更新日時の変更、参照を実行する。
【００４２】
ファイル索引づけ部４６は、ファイルシステム内に書き込まれる原始ファイルを走査し、原始ファイルから切り出したＮ文字列をN-gramインデクスに登録する機能と、各Ｎ文字列に符号を割り当てる機能とを提供する。この符号は、前述したように、ファイル格納部４５やファイル復号部４２で使用される。
【００４３】
（検索機能付きファイルシステムの処理動作）
（新規ファイルの追加）
図５に、検索機能付きファイルシステム１０に新規ファイルを追加する場合に、ファイルシステム制御部６が実行する処理動作を示す。このフローチャートでは、新規に追加されたファイルを走査し、符号化と索引づけを行う手順を示す。
【００４４】
クライアントコンピュータから新規にファイル（原始ファイル）が書き込まれた場合、ファイルシステム制御部６は、構成情報ファイルシステム７内に構成ファイルを新規作成し、これを書き込みモードでオープンする（Ｓ５０１）。
【００４５】
この実施例の場合、原始ファイルからの読み取りは、初期状態において構成文字列の先頭から開始されるものとする。なお、原始ファイルからの読取は、構成文字列の最後尾から開始することも可能である。
【００４６】
次に、ファイルシステム制御部６は、原始ファイルから入力できるデータがあるか否かを判定する（Ｓ５０２）。
【００４７】
入力可能なデータが一文字もない場合（Ｓ５０２で否定結果の場合）、ファイルシステム制御部６は、構成ファイルをクローズし、原始ファイルをストレージ領域上から削除する（Ｓ５０３）。以後、ファイルシステムは、原始ファイルを構成ファイルとN-gramインデックスを通じて仮想的に管理する状態になる。
【００４８】
一方、原始ファイルに読み取り可能な文字列がある場合、ファイルシステム制御部６は、原始ファイルからＮ文字を読み取る（Ｓ５０４）。この際、読み取り可能な文字列が１文字以上あるがＮ文字に満たない場合、ファイルシステム制御部６は、読み取れるだけ文字列を読み取り、Ｎ文字に満たない文字の数だけの記号"None"を、読み取った文字列の末尾に付加する。これにより、文字列全体の長さをＮ文字にする。"None"は全ての入力ファイルに含まれないことが保証された記号である。こうして得られた長さＮの文字列をＮ文字列とする。前述したように、Ｎ文字列はN-gramインデクスにおいて、各項目を一意に識別する識別子である。
【００４９】
次に、ファイルシステム制御部６は、今回得られたＮ文字列が、N-gramインデクス内に既に登録されているか否かを判定する（Ｓ５０５）。
【００５０】
否定結果が得られた場合（登録されていない場合）、ファイルシステム制御部６は、当該Ｎ文字列を新たな項目として登録する（Ｓ５１０）。例えばＮ文字列の出現位置が初期状態の場合、N-gramインデクスには何の登録もない。このとき、登録されたＮ文字列には何らかの符号を登録する。符号の与え方は、Ｎ文字列を一意に識別できれば任意である。
【００５１】
一方、肯定結果が得られた場合（登録済みの場合）、ファイルシステム制御部６は、Ｎ文字列に対応する項目に付されている符号をN-gramインデクスから取得する。ここまでの処理により、全てのＮ文字列について、対応する符号が取得される。
【００５２】
次に、ファイルシステム制御部６は、現在の処理中のＮ文字列の先頭に位置する文字が、構成文字列の配列上の先頭アドレスを０とする場合にＮ（自然数）で割り切れるアドレスか否かを判定する。Ｎで割り切れる場合、ファイルシステム制御部６は、現在処理中のＮ文字列に対応する符号を構成ファイルに追記する（Ｓ５０６）。これに対し、Ｎで割り切れない場合、ファイルシステム制御部６は、現在処理中のＮ文字列に対応する符号を構成ファイルに追記せず廃棄する。
【００５３】
この後、ファイルシステム制御部６は、N-rgamインデクスに現在のＮ文字列の出現箇所を記録する（Ｓ５０７）。この出現箇所の記録は、構成ファイルに追記しなかったＮ文字列も含め、全てのＮ文字列が対象である。この出現位置の記録により、任意の文字列に関する全文検索が可能になる。
【００５４】
次に、ファイルシステム制御部６は、原始ファイルからの読み取り位置を、現在の読取位置に対して１文字後方にずらす（Ｓ５０８）。この後、ファイルシステム制御部６は、処理Ｓ５０２に戻り、以降の処理を反復する。
【００５５】
なお、Ｓ５０７の処理は索引づけに過ぎず、原始ファイルの内容には影響を及ぼさない。このため、登録すべき内容をキューに蓄積して別スレッドで処理する等の技法を適用すれば、ファイルシステムとしての応答性を高めることができる。ただし、この方法を用いると、コンテンツとインデクスの内容が一致しない期間が生じる。また、インデクスへの反映が障害によって失敗に終わった場合の回復処理を考慮する必要等が生じ、システムの複雑化の要因となる。従って、実施にあたっては、これらのトレードオフを考慮し、慎重にシステムを設計することが必要となる。この本実施例では、Ｓ５０６、Ｓ５０７及びＳ５０８の処理を逐次的に実行するものとする。
【００５６】
（ファイルの削除）
図６に、検索機能付きファイルシステム１０から特定のファイルを削除する場合に、ファイルシステム制御部６が実行する処理動作を示す。なお、ファイル内容の更新（変更）は、ファイルの削除と新規ファイルの追加の連続実行を通じて実現できる。
【００５７】
クライアントコンピュータから削除すべきファイルが指定された場合、ファイルシステム制御部６は、構成情報ファイルシステム７内の構成ファイルを読み取りモードでオープンする（Ｓ６０１）。
【００５８】
この実施例の場合、ファイルシステム制御部６は、構成ファイルからのデータ入力が可能か否かを判定する（Ｓ６０２）。
【００５９】
構成ファイルから読み出せるデータがない場合（すなわち、ファイルサイズが０の場合）、ファイルシステム制御部６は、構成ファイルをクローズし、直ちに構成情報ファイルシステム７から削除する（Ｓ６０７）。
【００６０】
一方、構成ファイルから読み取り可能なデータがある場合、ファイルシステム制御部６は、構成ファイルの現在位置から符号を読み出し、当該符号に対応するＮ文字列をN-gramインデクスから入力する。なお、入力可能な文字数がＮに満たない場合、図５の説明の場合と同様、末尾に文字"None"を補うことによりＮ文字列とする（Ｓ６０４）。なお、構成ファイルから文字列を復元する際の詳細については後述する。
【００６１】
この後、ファイルシステム制御部６は、N-gramインデクスから処理中のＮ文字列に対応する項目を抽出し、このＮ文字列に対応付けられている出現位置を削除する（Ｓ６０５）。例えば図２のＮ文字列が“ed”が削減対象であった場合、例えば出現位置１の「ファイル101：101」を削除する。なお、N-gramインデックス８には、ある原始ファイルについて作成されたＮ文字列のうち構成ファイルに登録されていないＮ文字列が多数存在する（Ｓ５０７を参照）。従って、ここでの削除では、構成ファイルから再現された文字列に対して１文字ずつシフトして得られるＮ文字列も同時に削除される。
【００６２】
その後、ファイルシステム制御部６は、構成ファイルからの現在位置を後方に１文字後方にずらす（Ｓ６０６）。この後、ファイルシステム制御部６は、処理Ｓ６０２に戻り、以降の処理を反復する。Ｓ６０２において、次に処理すべきデータがなくなると、ファイルシステム制御部６は、構成ファイルをクローズし、対応ファイルの削除を完了する（Ｓ６０７）。
【００６３】
（構成ファイルの復号機能）
Ｓ６０４の処理を実行するために、ファイルシステム制御部６は、内部読み取りバッファを有している。この内部読み取りバッファは、構成ファイルから読み出される連続する２個の符号を復号する際に復号される最大でＮ個×Ｎ文字列のデータを保持することができる記憶容量を有しているものとする。
【００６４】
また、内部読み取りバッファは、復号対象とする符号が構成ファイルの中で出現する位置の情報を保存する領域を有しているものとする。また、構成ファイルを復号化する場合（元の構成文字列を復号する場合）、ファイルシステム制御部６は、新たに復号化された符号が復号化済みの文字列内で出現する位置ｉを計算できるものとする。例えば位置ｉは、処理対象とする符号に対応するＮ文字列の先頭文字の位置として与えられる。
【００６５】
この場合において、処理がＳ６０２からＳ６０４に移行すると、ファイルシステム制御部６は、構成ファイルの現在位置に対応するＮ文字列を入力する。このとき、ファイルシステム制御部６は、内部読み取りバッファ内の読み取り開始位置、すなわち復号化後の文字列の先頭からの文字数ｊを与え、対応するＮ文字列を読み取る。この文字数ｊは、内部読み取りバッファ内からＮ文字列が読み出されるたび、１文字ずつ後方にシフトされる。
【００６６】
ここで、ｊ−ｉがＮより小さい場合、ファイルシステム制御部６は、内部読み取りバッファは内部に保持したＮ個のＮ文字列のうちから要求されたｊに対応するＮ文字列を応答する。例えばＮ＝３の場合に、２つの符号に対応する文字列「abcdef」が内部読み取りバッファに格納されているものとする。このとき、ｊ＝１に対して「abc」が読み出される。次にｊは２に更新され、「bbcd」が読み出され。次にｊは３に更新され「cde」が読み出される。
【００６７】
一方、ｊ−ｉがＮと等しい場合、ファイルシステム制御部６は、構成ファイルから次の符号を読み出し、N-gramインデクス８を用いた復号化の後、内部読み取りバッファにＮ個のＮ文字列を生成する。例えばｉ＝１かつｊ＝４の場合、「def」が読み出されると共に、次の文字列の生成に備えて、構成ファイルの次の符号に対応する文字列「ghi」を復号し、内部読み取りバッファに読み込む。
【００６８】
この後、ファイルシステム制御部６は、内部読み取りバッファ内における符号に対応するＮ文字列の先頭位置を与えるｉにＮを加え、位置情報を更新する。前述の例であれば、ｉ＝１から４に更新する。さらにその後、ファイルシステム制御部６は、要求された読み取り位置（文字数ｊ）を順次更新し、それぞれに対応するＮ文字列を内部読み取りバッファから応答する。
【００６９】
（実施形態の効果）
以上説明したように、本実施例の場合、N-gramインデクスの作成に使用した原始ファイルの保存に代えて、原始ファイルの構成文字列をその配列順に重複なくかつ抜けなく再構成できるようにN-gramインデクスの符号を選択的に配列した構成ファイルを保存する。これにより、原始ファイルそのものを保存する場合に比して、ストレージシステムの消費容量を小さくできる。結果的に、従来に比べ、大幅に小さな空間に文書（原始ファイルを復元できる情報）とその索引とを収容することができる。
【００７０】
また、本実施例の場合には、原始ファイルの代わりに保存する構成ファイルそのものがN-gramインデクスの符号列で表現される。このため、小さいコストでファイルの内容を直ちに索引に登録することができ、かつ、索引とファイル本体の内容の一貫性を容易に維持することができる。
【００７１】
（ウイルスの検索処理）
テキストファイルに限らず、一般のファイルを収容するストレージとして利用した場合には、前述した効果に加え、コンピュータウイルスの検索を画期的に高速に行えるストレージを実現できる。この効果について、若干の説明を補う。
【００７２】
現行のコンピュータウイルス対策ソフトウェアは「パターンファイル」と呼ばれるウイルスの特徴を収録したデータベースを持っている。コンピュータウイルス対策ソフトウェアは、検索対象として指定されたファイルシステム全体を、このパターンファイルの内容と照合しつつ走査する。
【００７３】
ここで、N-gramインデクスによる全文検索は、単語区切りに基づいた転置インデクスと異なり、漏れのない検索が可能である。従って、本実施例に係る検索機能付きファイルストレージ装置１０の場合には、単にウイルスの特徴を検索語として全文検索を行うだけで特定のウイルスの存在の可否を判定することができる。
【００７４】
N-gramインデクスの検索性能は設計にもよるが、数百万ドキュメントに対する一回の検索が１msec程度で完了する製品も既に存在する（例えば非特許文献２参照）。従って、数百万のファイルが存在するファイルシステムに対する数万のウイルスパターンの検索を数秒以内に完了させることも困難ではないことになる。
【符号の説明】
【００７５】
１    クライアントコンピュータ1
２    クライアントコンピュータ2
３    ネットワーク
４    ネットワークファイルシステムゲートウェイ
５    ローカルファイルシステムゲートウェイ
６    ファイルシステム制御部
７    構成情報ファイルシステム
８    N-gramインデクス
９    全文検索部
１０  検索機能付きファイルストレージ装置
２１  Ｎ文字列
２２  符号
２３  出現位置１
２４  出現位置２
４２  ファイルシステム復号部
４３  ファイル属性情報制御部
４４  ファイル符号化部
４５  ファイル格納部
４６  ファイル索引づけ部
【図１】
0005441791.tif 000002
【図２】
0005441791.tif 000003
【図３】
0005441791.tif 000004
【図４】
0005441791.tif 000005
【図５】
0005441791.tif 000006
【図６】
0005441791.tif 000007