(57)【特許請求の範囲】
【請求項１】
コンピュータに、
入力された複数のファイルそれぞれに対し、複数のキーそれぞれの存否、および、前記キーが存在する場合の前記キーが存在する位置についての情報を、前記複数のファイルそれぞれに対する字句解析の際に生成し、
前記情報に基づいて、前記複数のキーのそれぞれの符号に対し、前記複数のファイルそれぞれに対する存否および前記キーが存在する位置を対応付けたインデックス情報を生成する
処理を実行させることを特徴とするインデックス生成プログラム。
【請求項２】
前記情報より、複数の前記位置の軸に対し複数のハッシュ関数を適用した複数のハッシュ化軸を用いたハッシュ化インデック情報を生成する
処理を実行させることを特徴とする請求項１に記載のインデックス生成プログラム。
【請求項３】
出現頻度が所定頻度より低いキーの場合には、動的辞書を用いて符号化し、符号化した符号を前記動的辞書に登録し、
該生成する処理は、前記情報に基づいて、登録した符号に対し、前記複数のファイルそれぞれに対する存否および前記符号に対応するキーが存在する位置を対応付けたインデックス情報を生成する
処理を実行させることを特徴とする請求項１に記載のインデックス生成プログラム。
【請求項４】
入力された複数のファイルそれぞれに対し、複数のキーそれぞれの存否、および、前記キーが存在する場合の前記キーが存在する位置についての情報を、前記複数のファイルそれぞれに対する字句解析の際に生成する第１の生成部と、
前記情報に基づいて、前記複数のキーのそれぞれの符号に対し、前記複数のファイルそれぞれに対する存否および前記キーが存在する位置を対応付けたインデックス情報を生成する第２の生成部と、
を有することを特徴とするインデックス生成装置。
【請求項５】
コンピュータが、
入力された複数のファイルそれぞれに対し、複数のキーそれぞれの存否、および、前記キーが存在する場合の前記キーが存在する位置についての情報を、前記複数のファイルそれぞれに対する字句解析の際に生成し、
前記情報に基づいて、前記複数のキーのそれぞれの符号に対し、前記複数のファイルそれぞれに対する存否および前記キーが存在する位置を対応付けたインデックス情報を生成する
処理を実行することを特徴とするインデックス生成方法。
【請求項６】
コンピュータに、
単語を含む探索要求を受け付け、
複数のファイルそれぞれに対する字句解析の際に生成される情報であって複数の単語それぞれの存否、および、前記単語が存在する場合の前記単語が存在する位置についての情報に基づいて生成された、前記複数の単語のそれぞれの符号に対し、前記複数のファイルそれぞれに対する存否および前記単語が存在する位置を対応付けたインデックス情報を参照し、前記探索要求に対応する単語が存在するファイルおよび位置を特定する
処理を実行させることを特徴とする検索プログラム。
【請求項７】
該特定する処理は、前記探索要求に含まれる単語の出現頻度が所定頻度より低い場合には、前記単語を動的辞書を用いて符号化し、符号化した単語の符号に対し、前記インデックス情報を参照し、前記探索要求に含まれる単語が存在するファイルおよび位置を特定する
処理を実行させることを特徴とする請求項６に記載の検索プログラム。
【請求項８】
単語を含む探索要求を受け付ける受付部と、
複数のファイルそれぞれに対する字句解析の際に生成される情報であって複数の単語それぞれの存否、および、前記単語が存在する場合の前記単語が存在する位置についての情報に基づいて生成された、前記複数の単語のそれぞれの符号に対し、前記複数のファイルそれぞれに対する存否および前記単語が存在する位置を対応付けたインデックス情報を参照し、前記探索要求に対応する単語が存在するファイルおよび位置を特定する特定部と、
を有することを特徴とする検索装置。
【請求項９】
コンピュータが、
単語を含む探索要求を受け付け、
複数のファイルそれぞれに対する字句解析の際に生成される情報であって複数の単語それぞれの存否、および、前記単語が存在する場合の前記単語が存在する位置についての情報に基づいて生成された、前記複数の単語のそれぞれの符号に対し、前記複数のファイルそれぞれに対する存否および前記単語が存在する位置を対応付けたインデックス情報を参照し、前記探索要求に対応する単語が存在するファイルおよび位置を特定する
処理を実行することを特徴とする検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インデックス生成プログラムなどに関する。
【背景技術】
【０００２】
テキストデータの検索を高速化するために、テキストデータに含まれる文字ごとの、ファイルごとの存否をインデックス化した、ビットマップ型インデックスが知られている（例えば、特許文献１参照）。
【０００３】
また、レコードに含まれるデータ項目の内容をキーにして、キーに対するレコードの格納位置を指すインデックを生成し、データベースの探索の際に利用する技術がある（例えば、特許文献２参照）。
【０００４】
一方、単語に対応付けられたポインタテーブル型のインデックスを生成する技術が知られている（例えば、非特許文献１参照）。かかる技術について、図１を参照して説明する。図１は、ポインタテーブル型インデックスの生成処理の参考例を示す図である。図１に示すように、かかる技術では、文書ファイルごとに単語を抽出し、文書ＩＤと単語ＩＤとその出現位置に対応づけられたインデックスを生成し、それを収集し、単語ＩＤについてソートする。これにより、単語ＩＤをもとに文書ＩＤと出現位置とを対応づけた転置インデックス、すなわちポインタテーブル型インデックスを生成する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１３／０３８５２７号
【特許文献２】特開昭６３−１８９９３４号公報
【特許文献３】特開昭６３−２７１５２５号公報
【非特許文献】
【０００６】
【非特許文献１】西田圭介著「Googleを支える技術」技術評論社、2008年4月25日
【非特許文献２】関口宏司著「ApacheLucene入門」技術評論社、2006年6月25日
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、ファイル、キーおよびその出現位置を含むインデックスを圧縮形式にて１パスで容易に生成できないという問題がある。また、別の観点では、キーに対するファイルおよびその出現位置の組合せの探索を容易に行えないという問題がある。
【０００８】
例えば、従来のビットマップ型インデックスは、文字をキーとした場合に、キーおよびファイルを含むインデックスであるが、ファイル、キーおよびその出現位置を含むインデックスではなく、インデックスの生成と圧縮はそれぞれ独立していて２パスとなっている。したがって、かかる技術では、ファイル、キーおよびその出現位置を含むインデックスを圧縮形式にて１パスで容易に生成できない。
【０００９】
また、ビットマップ型インデックスでは、出現位置の情報を含まないため、キーに対するファイルおよびその出現位置の組合せを探索する際には、インデックスにより対象のファイルを特定した後、それぞれのファイルを参照し、キーに対するファイルの出現位置を確認する必要がある。したがって、キーに対するファイルおよびその出現位置の組合せの探索を容易に行えない。
【００１０】
一方、ポインタテーブル型のインデックスを生成する技術では、文書ファイルごとに含まれる単語が異なるので、文書ファイルの更新や追加の度に、巨大なクラウド環境において３パスでインデックスの生成処理と収集処理とソート処理および転置処理が繰り返される。さらに、１パスでインデックスの圧縮が行われる。したがって、ポインタテーブル型のインデックスは、ファイル、キーおよびその出現位置を含むインデックスを含むインデックスであるが、かかる技術では、文書ファイルに対するポインタテーブル型インデックスを圧縮形式にて１パスで容易に生成できない。
【００１１】
なお、上記課題は、データ項目の内容をキーとしたが、データ項目の内容だけではなく、単語や文字にも同様に生じる課題である。
【００１２】
１つの側面では、ファイル、キーおよびその出現位置を含むインデックスを圧縮形式にて１パスで容易に生成することを目的とする。また、１つの側面では、キーに対するファイルおよびその出現位置の組合せの探索を容易に行うことを目的とする。
【課題を解決するための手段】
【００１３】
第１の案では、インデックス生成プログラムは、コンピュータに、入力された複数のファイルそれぞれに対し、複数のキーそれぞれの存否、および、前記キーが存在する場合の前記キーが存在する位置についての情報を、前記複数のファイルそれぞれに対する字句解析の際に生成し、前記情報に基づいて、前記複数のファイルそれぞれに対する、前記キーおよび前記位置のインデックス情報を生成する処理を実行させる。
【発明の効果】
【００１４】
１つの態様によれば、ファイル、キーおよびその出現位置を含むインデックスを圧縮形式にて１パスで容易に生成できる。
【図面の簡単な説明】
【００１５】
【図１】図１は、ポインタテーブル型インデックスの生成処理の参考例を示す図である。
【図２】図２は、実施例に係るビットマップ型インデックスの生成処理の流れの一例を示す図である。
【図３】図３は、実施例に係るビットマップ型インデックスの一例を示す図である。
【図４】図４は、実施例に係る動的辞書の一例を示す図である。
【図５】図５は、実施例に係るハッシュ化インデックス生成処理の一例を示す図である。
【図６】図６は、符号化ファイルの構成例を示す図である。
【図７】図７は、実施例に係る検索処理の一例を示す図である。
【図８】図８は、実施例に係るハッシュ化ビットマップ復元処理の一例を示す図である。
【図９】図９は、実施例に係るインデックス生成装置の構成を示す機能ブロック図である。
【図１０】図１０は、実施例に係るインデックス生成処理のフローチャートの一例を示す図である。
【図１１】図１１は、実施例に係る符号化処理のフローチャートの一例を示す図である。
【図１２】図１２は、実施例に係る検索装置の構成を示す機能ブロック図である。
【図１３】図１３は、実施例に係る検索処理のフローチャートの一例を示す図である。
【図１４】図１４は、コンピュータのハードウェア構成例を示す図である。
【図１５】図１５は、コンピュータで動作するプログラムの構成例を示す図である。
【図１６】図１６は、実施形態のシステムにおける装置の構成例を示す図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示するインデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【００１７】
［実施例に係るビットマップ型インデックス生成の一例］
図２は、実施例に係るビットマップ型インデックスの生成処理の流れの一例を示す図である。図２に示すように、ビットマップ型インデックス生成処理は、入力された複数のファイルに対し、複数の単語それぞれの存否、および単語が存在する場合の単語の位置についての情報を、複数のファイルそれぞれに対する字句解析の際に生成する。そして、ビットマップ型インデックス生成処理は、生成された情報に基づいて、複数のファイルそれぞれに対する、単語および単語の位置のビットマップ型インデックスを生成する。なお、以降、ビットマップ型インデックス生成処理を「インデックス生成処理」というものとする。
【００１８】
インデックス生成処理の一例を、以下に説明する。例えば、インデックス生成処理を実行するインデックス生成装置は、符号化対象のファイルＦ１に含まれる１つのファイル３を記憶領域にロードする。なお、ファイル３の「３」は、ファイルＩＤが「３」であることを示す。
【００１９】
インデックス生成装置は、ファイル３を記憶領域から読み出し、読み出したファイル３に対して字句解析を行う。ここでいう字句解析とは、符号化されていない状態のファイルを単語に分割することをいう。
【００２０】
インデックス生成装置は、静的辞書Ｓ０と単語の文字列とを比較して、静的辞書Ｓ０に単語の文字列に対応する符号があるか否かを判定する。なお、かかる判定処理は、静的辞書Ｓ０を用いて符号化可能な単語の文字列を特定するビットフィルタと単語の文字列とを比較して、単語の文字列がビットフィルタにヒットするか否かを判定しても良い。ここでいうビットフィルタとは、静的辞書Ｓ０を用いて符号化可能な単語の文字列を特定するフィルタのことをいう。インデックス生成装置は、静的辞書Ｓ０に単語の文字列に対応する符号がある場合には、静的辞書Ｓ０に基づいて単語の文字列を、当該単語の文字列に対応する符号（静的コード）に符号化する。
【００２１】
インデックス生成装置は、静的辞書Ｓ０に単語の文字列に対応する符号がない場合には、単語の文字列が動的辞書Ｄ０に登録されているか否かを判定する。インデックス生成装置は、単語の文字列が動的辞書Ｄ０に登録されていない場合には、単語の文字列を動的辞書Ｄ０に登録し、動的辞書Ｄ０に基づいて、登録した単語の文字列を、当該登録した単語の文字列に対応する動的コードに符号化する。また、インデックス生成装置は、単語の文字列が動的辞書Ｄ０に登録されている場合には、動的辞書Ｄ０に基づいて、当該単語の文字列を、当該単語の文字列に対応する動的コードに符号化する。
【００２２】
ここで、静的辞書Ｓ０とは、一般的な英語辞典、国語辞典や教科書などを基にして、文書中に出現する単語の出現頻度を特定し、出現頻度のより高い単語に対して、より短い符号を割り当てた辞書のことをいう。静的辞書Ｓ０には、それぞれの単語に対応する符号である静的コードがあらかじめ登録されている。これに対して、動的辞書Ｄ０とは、静的辞書に登録されていない単語と、動的に付された動的コード（符号）とを対応付けた辞書である。静的辞書Ｓ０に登録されていない単語には、一例として、出現頻度の低い単語（低頻度単語）、未知語、数値、時刻、タグなどがある。ここでいう未知語とは、静的辞書Ｓ０に登録されていない単語であり、符号化する文書の中で繰り返し出現する特長がある単語のことをいう。動的辞書Ｄ０には、静的辞書Ｓ０に登録されていない単語の出現順に、動的コードに対応付けられた単語がバッファ部に登録される。なお、動的辞書Ｄ０に関する詳しい説明は後述する。
【００２３】
そして、インデックス生成装置は、符号化された単語コードを、符号化ファイルＦ２内のファイル３の符号化データのエリアに格納する。
【００２４】
そして、インデックス生成装置は、ファイル３に対し、符号化された単語コードおよび当該単語コードが示す単語の位置についての情報を生成する。インデックス生成装置は、生成された情報に基づき、ファイル３に対する、単語コードが示す単語の存否を２次元ビットマップ型インデックスＢＩ１に設定する。インデックス生成装置は、生成された情報に基づき、ファイル３に対する、単語コードおよび当該単語コードが示す単語の位置を３次元ビットマップ型インデックスＢＩ２に設定する。
【００２５】
ここでいう２次元ビットマップ型インデックスＢＩ１とは、全文検索のためのインデックスであり、単語を指定するポインタと単語の各対象ファイルでの存否を示すビットを連結したビット列である。すなわち、２次元ビットマップ型インデックスＢＩ１とは、ファイルに含まれる単語について、ファイルごとの存否をインデックス化したビットマップのことをいう。検索処理時には、このビットマップを、ビットのＯＮ・ＯＦＦに応じて検索対象の単語を含むか否かを示すインデックスとして用いることができる。単語を指定するポインタとしては、例えば、単語の符号が採用される。単語の符号は、静的コードおよび単語コードのことをいい、単語ＩＤと同義である。なお、単語を指定するポインタは、例えば、単語そのものを用いても良い。すなわち、２次元ビットマップ型インデックスＢＩ１は、単語を指定するポインタで示される単語ごとのビットマップを纏めたものである。図２に示すように、２次元ビットマップ型インデックスＢＩ１のＸ軸はファイルＩＤを表し、Ｙ軸は単語ＩＤを表す。つまり、２次元ビットマップ型インデックスＢＩ１は、単語ＩＤが示す単語の、複数のファイルＩＤが示すファイルごとの存否を表す。
【００２６】
ここでいう３次元ビットマップ型インデックスＢＩ２は、２次元ビットマップ型インデックスＢＩ１に対して、各対象ファイル内での単語の位置を追加したビットマップ型インデックスである。すなわち、３次元ビットマップ型インデックスＢＩ２とは、ファイルに含まれる単語について、ファイルごとの存する位置をインデックス化したビットマップのことをいう。図２に示すように、３次元ビットマップ型インデックスＢＩ２のＸ軸はＶａｌｕｅ（位置）を表し、Ｙ軸は単語ＩＤを表し、Ｚ軸はファイルＩＤを表す。つまり、３次元ビットマップ型インデックスＢＩ２は、単語ＩＤが示す単語の、複数のファイルＩＤが示すファイルごとの位置を表す。
【００２７】
ここで、インデックス生成装置がファイル３に対して、ビットマップ型インデックスを生成する場合の処理について説明する。ファイル３のテキストファイルには、「・・・Ｓｈｅｒｌｏｃｋ・・・ＬＯＮＤＯＮ・・・・・Ｂａｋｅｒ・・・」が記憶されている。なお、単語の文字列「Ｓｈｅｒｌｏｃｋ」、単語の文字列「ＬＯＮＤＯＮ」、単語の文字列「Ｂａｋｅｒ」は、静的辞書Ｓ０に登録されていないとする。
【００２８】
インデックス生成装置は、ファイル３に対して字句解析を行い、「Ｓｈｅｒｌｏｃｋ」、「ＬＯＮＤＯＮ」、「Ｂａｋｅｒ」を取得する。ここでは、取得された単語の文字列の中で、一例として、「Ｂａｋｅｒ」におけるインデックスを生成する処理を説明する。単語の文字列「Ｓｈｅｒｌｏｃｋ」、単語の文字列「ＬＯＮＤＯＮ」は、動的辞書Ｄ０に登録されているとする。
【００２９】
インデックス生成装置は、静的辞書Ｓ０に単語の文字列「Ｂａｋｅｒ」に対応する符号がないので、単語の文字列「Ｂａｋｅｒ」が動的辞書Ｄ０に登録されているか否かを判定する。インデックス生成装置は、単語の文字列「Ｂａｋｅｒ」が動的辞書Ｄ０に登録されていないので、単語の文字列「Ｂａｋｅｒ」を動的辞書Ｄ０に登録する。そして、インデックス生成装置は、動的辞書Ｄ０に基づいて、登録した単語の文字列「Ｂａｋｅｒ」を、当該単語の文字列に対応する動的コード「Ａ００２ｈ」に符号化する。
【００３０】
そして、インデックス生成装置は、符号化された単語コード「Ａ００２ｈ」を、符号化ファイルＦ２内のファイル３の符号化データのエリアに格納する。
【００３１】
そして、インデックス生成装置は、ファイル３に対し、符号化された単語コード「Ａ００２ｈ」および当該単語コードが示す単語「Ｂａｋｅｒ」の位置についての情報を生成する。ここでは、ファイル３に対する、単語「Ｂａｋｅｒ」の位置は、「２３」であるとする。
【００３２】
そして、インデックス生成装置は、生成された情報に基づき、ファイル３に対する、単語コード「Ａ００２ｈ」が示す単語の存否を２次元ビットマップ型インデックスＢＩ１に設定する。ここでは、２次元ビットマップ型インデックスＢＩ１には、「Ｂａｋｅｒ」の単語ＩＤ「Ａ００２ｈ」に対応するビットマップが示される。かかるビットマップには、ファイルＩＤ「３」のファイルに対する存否としてＯＮ、すなわち２進数の「１」が設定されている。なお、ファイルに単語が存在しない場合には、単語が示す単語ＩＤに対応するビットマップに、当該ファイルに対する存否としてＯＦＦが設定される。
【００３３】
そして、インデックス生成装置は、生成された情報に基づき、ファイル３に対する、単語コード「Ａ００２ｈ」および当該単語コードが示す単語の位置「２３」を３次元ビットマップ型インデックスＢＩ２に設定する。ここでは、３次元ビットマップ型インデックスＢＩ２には、「Ｂａｋｅｒ」の単語ＩＤ「Ａ００２ｈ」およびファイルＩＤ「３」に対応するビットマップが示される。かかるビットマップには、Ｖａｌｕｅ（位置）「２３」に対するビットにＯＮ、すなわち２進数の「１」が設定されている。なお、ファイルの所定の位置に単語が存在しない場合には、単語が示す単語ＩＤおよびファイルが示すファイルＩＤに対応するビットマップの、所定の位置に対するビットにＯＦＦが設定される。
【００３４】
このようにして、インデックス生成装置は、ファイル３に対して字句解析された単語を、順番に符号化し、符号化して得られた単語コードおよび単語の位置についての情報に基づいて、２次元および３次元のビットマップ型インデックスＢＩ１、ＢＩ２を生成する。
【００３５】
［ビットマップ型インデックスの一例］
次に、２次元のビットマップ型インデックスの一例を、図３を参照して説明する。図３は、実施例に係るビットマップ型インデックスの一例を示す図である。図３に示すように、２次元ビットマップ型インデックスＢＩ１は、超高頻度の単語、高頻度の単語および低頻度の単語に係る圧縮付号（単語ＩＤに対応）ごとにビットマップを対応付ける。ビットマップとは、超高頻度の単語、高頻度の単語および低頻度の単語がいずれの圧縮ファイルに含まれるかを表す符号ビット列である。ビットマップの各ビットが、各圧縮ファイルに超高頻度の単語、高頻度の単語および低頻度の単語が含まれているか否かを表す。
【００３６】
２次元ビットマップ型インデックスＢＩは、例えば、３２種類の超高頻度単語ごと、８Ｋ（８０００）種類の高頻度の単語および約１６Ｋ（１６０００）種類の低頻度単語ごとにビットマップを対応付ける。超高頻度単語とは、出現頻度集計用のファイル群において各単語の出現頻度を集計した場合に、出現頻度の高い単語を表す。例えば、超高頻度単語は、出現頻度集計用のファイル群での出現頻度が上位３２位までの単語である。高頻度単語は、出現頻度集計用のファイル群での出現頻度が上位８０００位までの単語である。また、低頻度単語は、出現頻度集計用のファイル群での出現頻度の順位が２４０００位未満であって、符号化するファイルから抽出された数値文字列または単語である。低頻度単語の一例として、専門単語、新語および未知語が挙げられる。ここでいう専門単語とは、ある特定の学問の分野や業界などの間で通用する単語であり、符号化するファイルの中で繰り返し出現する特長がある単語のことをいう。新語とは、流行語などの新しく作られた単語であり、符号化するファイルの中で繰り返し出現する特長がある単語のことをいう。未知語とは、専門単語でなく、新語でない単語であり、符号化するファイルの中で繰り返し出現する特長がある単語のことをいう。
【００３７】
例えば、２次元ビットマップ型インデックスＢＩ１の有効行１行目は、圧縮符号が示す単語「ｔｈｅ」のビットマップが「・・・１１０１」となっている。かかるビットマップは、「ｔｈｅ」の圧縮符号が含まれるファイルを表す。ビットマップ「・・・１１０１」は、１ビット目に「１」が格納されているのでファイル１に「ｔｈｅ」が含まれ、２ビット目に「０」が格納されているのでファイル２に「ｔｈｅ」が含まれず、３ビット目に「１」が格納されているのでファイル３に「ｔｈｅ」が含まれることを表す。また、ビットマップ「・・・１１０１」は、４ビット目に「１」が格納されているのでファイル４に「ｔｈｅ」が含まれていることを表す。なお、ビットマップ「・・・１１０１」は、ファイル５以降の他の各ファイルに「ｔｈｅ」が含まれるか否かについても表す。
【００３８】
なお、３次元ビットマップ型インデックスＢＩ２は、図示しないが、単語ＩＤおよびファイルＩＤごとにビットマップを対応付ける。ビットマップとは、単語が圧縮ファイルに含まれる場合には、単語が圧縮ファイルのいずれの位置に含まれるかを表す符号ビット列である。ビットマップの各ビットが、各位置に圧縮ファイルの単語が含まれているか否かを表す。
【００３９】
［動的辞書の一例］
図４は、実施例に係る動的辞書の一例を示す図である。図４に示される動的辞書Ｄ０は、バッファ部Ｄ１とアドレステーブルＤ２とを含む。バッファ部Ｄ１は、文字列を記憶する。アドレステーブルＤ２は、動的コードと、格納位置と、データ長とを対応付けて保持する。動的コードは、あらかじめ定められた固定長の符号であり、例えば圧縮符号である。そして、動的コードは、単語の文字列が登録された順に割り当てられる。ここでは、動的コードは、１６進数「Ａ」で始まる固定長２バイトのコードである。格納位置は、バッファ部Ｄ１に格納された文字列の位置を示す。データ長は、バッファ部Ｄ１に格納された文字列の長さ（バイト長）を示す。
【００４０】
例えば、文字列「Ｂａｋｅｒ」に動的コードが割り当てられる場合について説明する。インデックス生成装置は、文字列「Ｂａｋｅｒ」をバッファ部Ｄ１に格納する。インデックス生成装置は、文字列を格納した格納位置および格納したデータ長をアドレステーブルＤ２に登録する。ここでは、インデックス生成装置は、格納位置として「１６」、データ長として「６」をアドレステーブルＤ２に登録する。
【００４１】
インデックス生成装置は、文字列に対応付けられたアドレステーブルＤ２の動的コードを圧縮符号として割り当てる。ここでは、インデックス生成装置は、文字列「Ｂａｋｅｒ」に対応付けられた動的コード「Ａ００２ｈ」を割り当てる。
【００４２】
［実施例に係るハッシュ化インデックス生成処理の一例］
次に、２次元のビットマップ型インデックスをハッシュ化する処理の一例を、図５を参照して説明する。図５は、実施例に係るハッシュ化インデックス生成処理の一例を示す図である。
【００４３】
図５に示すように、インデックス生成装置は、単語ＩＤに対応するビットマップそれぞれについてハッシュ関数を適用した複数のハッシュ化ビットマップを生成する。ここでは、インデックス生成装置は、３２ビットレジスタを想定し、一例として２９と３１のハッシュ値（底）を基に、各ビットマップをハッシュ化する。具体的には、インデックス生成装置は、１つの底のハッシュ化ビットマップについて、単語ＩＤに対応するビットマップの各ビットの位置を底で割った余りの位置に、当該ビットマップの各ビットの値を設定する。ビットマップの各ビットの位置は、それぞれのファイルＩＤに対応する。一例として、インデックス生成装置は、底２９のハッシュ化ビットマップｈ１１について、ビットマップｂ１の各ビットの位置を底２９で割った余りの位置に、ビットマップｂ１の各ビットの値を設定する。ビットマップｂ１の３５ビット目の位置のビット値「１」は、ハッシュ化ビットマップｈ１１の６ビット目に設定される。ビットマップｂ１の４２ビット目の位置のビット値「１」は、ハッシュ化ビットマップｈ１１の１３ビット目に設定される。インデックス生成装置は、底３１のハッシュ化ビットマップｈ１２について、ビットマップｂ１の各ビットの位置を底３１で割った余りの位置に、ビットマップｂ１の各ビットの値を設定する。ビットマップｂ１の３５ビット目の位置のビット値「１」は、ハッシュ化ビットマップｈ１２の４ビット目に設定される。ビットマップｂ１の４２ビット目の位置のビット値「１」は、ハッシュ化ビットマップｈ１２の１１ビット目に設定される。すなわち、インデックス生成装置は、ビットマップの０ビット目からの各ビットを順番にハッシュ化ビットマップの０ビット目から設定し、（底−１）ビット目まで設定する。そして、インデックス生成装置は、再度折り返してハッシュ化ビットマップの０ビット目から既にハッシュ化ビットマップに設定された値とＯＲ演算した値を設定する。この結果、インデックス生成装置は、ビットマップｂ１について、ハッシュ化ビットマップｈ１１，ｈ１２を生成する。このようにして、インデックス生成装置は、複数の単語が示すそれぞれの単語ＩＤにおけるビットマップについて、それぞれハッシュ化ビットマップを生成する。この結果、インデックス生成装置は、それぞれ生成されたハッシュ化ビットマップを纏めた２次元ハッシュ化インデックスＨＩ１を生成する。
【００４４】
なお、インデックス生成装置は、３次元ビットマップ型インデックスＢＩ２のビットマップも、２次元ビットマップ型インデックスＢＩ１のビットマップの場合と同様に、ハッシュ関数を適用した複数のハッシュ化ビットマップを生成する。そして、インデックス生成装置は、それぞれ生成されたハッシュ化ビットマップを纏めた３次元ハッシュ化インデックスＨＩ２を生成すれば良い。以降、ハッシュ値（底）は、一例として、２９と３１であるとして説明する。
【００４５】
［符号化ファイルの構成例］
図６は、符号化ファイルの構成例を示す図である。図６に示すように、符号化ファイルＦ２は、ヘッダ部と、符号化データと、トレーラ部とを有する。符号化データは、複数のファイルそれぞれの符号化された単語コード群を記憶する。トレーラ部は、各ファイルのアドレス、動的辞書（共通／個別）の情報、ハッシュ化インデックス（２次元／３次元）などを記憶する。各ファイルのアドレスは、複数のファイルが符号化された各符号化データの格納先のアドレスを示す。各ファイルのアドレスは、一例として、符号化データの先頭からの相対アドレスである。個別の動的辞書Ｄ０の情報は、複数のファイルそれぞれに対する、図４に示した動的辞書の情報に対応する。共通の動的辞書Ｄ０の情報は、複数のファイル全体に対する、図４に示した動的辞書Ｄ０の情報に対応する。２次元ハッシュ化インデックスは、２次元ハッシュ化インデックスＨＩ１を示す。３次元ハッシュ化インデックスは、３次元ハッシュ化インデックスＨＩ２を示す。ヘッダ部には、トレーラ部に格納された各ファイルのアドレスへのポインタ、動的辞書Ｄ０へのポインタやハッシュ化インデックス（２次元／３次元）へのポインタが格納される。インデックス生成装置は、複数のファイルをそれぞれ符号化すると、符号化されたそれぞれの結果を示す符号化データを符号化ファイルＦ２に格納し、格納した各アドレスを各ファイルのアドレスに格納する。復号化処理では、ヘッダ部の各ファイルのアドレスへのポインタを利用して、トレーラ部の各ファイルのアドレスから復号化対象のファイルのアドレスを参照する。復号化処理は、ヘッダ部の動的辞書Ｄ０へのポインタを利用し、動的辞書Ｄ０を参照する。
【００４６】
［実施例に係る検索処理の一例］
図７は、実施例に係る検索処理の一例を示す図である。図７に示すように、検索処理を実行する検索装置は、入力された検索キーを構成する単語をもとに、２次元ハッシュ化インデックスＨＩ１を参照し、単語が存在するファイルＩＤを取得する。そして、検索装置は、３次元ハッシュ化インデックスＨＩ２に、単語が示す単語ＩＤとファイルＩＤを指定して、単語の位置情報を特定する。
【００４７】
検索処理の一例を、以下に説明する。例えば、検索処理を実行する検索装置は、検索キーを構成する単語の入力を受け付けると、２次元ハッシュ化インデックスＨＩ１を参照し、受け付けた単語が示す単語ＩＤに対するハッシュ化ビットマップを抽出する。ここでは、単語として「Ｓｈｅｒｌｏｃｋ」と「Ｂａｋｅｒ」が受け付けられたとする。すると、検索装置は、検索単語として受け付けられた「Ｓｈｅｒｌｏｃｋ」が示す単語ＩＤ「Ａ０００ｈ」に対するハッシュ化ビットマップｈ４を２次元ハッシュ化インデックスＨＩ１から抽出する。ハッシュ化ビットマップｈ４には、底２９のハッシュ化ビットマップｈ４１と底３１のハッシュ化ビットマップｈ４２とが含まれる。また、検索装置は、検索単語として受け付けられた「Ｂａｋｅｒ」が示す単語ＩＤ「Ａ０００２ｈ」に対するハッシュ化ビットマップｈ５をハッシュ化インデックスＨＩ１から抽出する。ハッシュ化ビットマップｈ５には、底２９のハッシュ化ビットマップｈ５１と底３１のハッシュ化ビットマップｈ５２とが含まれる。
【００４８】
検索装置は、抽出されたそれぞれの単語ＩＤに対するハッシュ化ビットマップを復元する。なお、ハッシュ化ビットマップの復元処理は、後述する。復元結果は、単語ＩＤに対応するビットマップで表わされる。ここでは、検索装置は、単語ＩＤ「Ａ０００ｈ」に対するハッシュ化ビットマップｈ４を復元し、ビットマップｂ４を復元結果として出力する。検索装置は、単語ＩＤ「Ａ００２ｈ」に対するハッシュ化ビットマップｈ５を復元し、ビットマップｂ５を復元結果として出力する。
【００４９】
また、検索装置は、単語ＩＤ「Ａ０００ｈ」のビットマップｂ４と、単語ＩＤ「Ａ００２ｈ」のビットマップｂ５と、のＡＮＤ演算を行う。検索装置は、ＡＮＤ結果のビットがＯＮ（「１」）であるファイルＩＤを出力する。すなわち、検索装置は、単語ＩＤ「Ａ０００ｈ」が示す「Ｓｈｅｒｌｏｃｋ」と単語ＩＤ「Ａ００２ｈ」が示す「Ｂａｋｅｒ」を含むファイルのファイルＩＤを絞り込む。ここでは、ファイルＩＤとして「３」が出力される。
【００５０】
また、検索装置は、ファイルＩＤを絞り込んだ後、３次元ハッシュ化インデックスＨＩ２を参照し、単語ＩＤおよびファイルＩＤに対するハッシュ化ビットマップを抽出する。ここでは、検索装置は、単語ＩＤ「Ａ０００ｈ」およびファイルＩＤ「３」に対するハッシュ化ビットマップｈ６を３次元ハッシュ化インデックスＨＩ２から抽出する。ハッシュ化ビットマップｈ６には、底２９のハッシュ化ビットマップｈ６１と底３１のハッシュ化ビットマップｈ６２とが含まれる。また、検索装置は、単語ＩＤ「Ａ００２ｈ」およびファイルＩＤ「３」に対するハッシュ化ビットマップｈ７を３次元ハッシュ化インデックスＨＩ２から抽出する。ハッシュ化ビットマップｈ７には、底２９のハッシュ化ビットマップｈ７１と底３１のハッシュ化ビットマップｈ７２とが含まれる。
【００５１】
また、検索装置は、抽出されたそれぞれのハッシュ化ビットマップを復元する。復元結果は、単語ＩＤおよびファイルＩＤに対応するビットマップで表わされる。ここでは、検索装置は、単語ＩＤ「Ａ０００ｈ」およびファイルＩＤ「３」に対するハッシュ化ビットマップｈ６を復元し、ビットマップｂ６を復元結果として出力する。検索装置は、単語ＩＤ「Ａ００２ｈ」およびファイルＩＤ「３」に対するハッシュ化ビットマップｈ７を復元し、ビットマップｂ７を復元結果として出力する。
【００５２】
また、検索装置は、復元結果として出力されたビットマップのビットがＯＮ（「１」）を示すＶａｌｕｅ（位置）を特定する。ここでは、検索装置は、ビットマップｂ６のビットが「１」を示す「１０」のＶａｌｕｅ（位置）を特定する。検索装置は、ビットマップｂ７のビットマップが「１」を示す「２３」のＶａｌｕｅ（位置）を特定する。
【００５３】
検索装置は、特定されたＶａｌｕｅ（位置）をファイルＩＤおよび単語ＩＤが示す単語とともにＶａｌｕｅリストに追加し、Ｖａｌｕｅリストを検索結果として出力する。ここでは、検索装置は、特定されたＶａｌｕｅ（位置）「１０」をファイルＩＤ「３」および単語ＩＤ「Ａ０００ｈ」が示す「Ｓｈｅｒｌｏｃｋ」とともにＶａｌｕｅリストに追加する。検索装置は、特定されたＶａｌｕｅ（位置）「２３」をファイルＩＤ「３」および単語ＩＤ「Ａ００２ｈ」が示す「Ｂａｋｅｒ」とともにＶａｌｕｅリストに追加する。そして、検索装置は、Ｖａｌｕｅリストを検索結果として出力する。なお、出力される検索結果のフォーマットは、これに限定されず、検索キーがどのファイルのどの位置に存在するのかがわかるフォーマットであれば良い。
【００５４】
これにより、検索装置は、検索キーが示す単語がどのファイルおよびどの位置に存在するかを、高速に絞り込むことができる。
【００５５】
［実施例に係るハッシュ化ビットマップ復元処理の一例］
次に、２次元のハッシュ化ビットマップを復元する処理の一例を、図８を参照して説明する。図８は、実施例に係るハッシュ化ビットマップ復元処理の一例を示す図である。図８に示すように、ハッシュ化ビットマップ復元処理は、単語ＩＤに対応するハッシュ化ビットマップから、ハッシュ化を展開したビットマップへ復元する。ハッシュ化ビットマップ復元処理は、例えば、検索キーを構成する単語がどのファイルおよびどの位置に存在するかを検索する際に実行される。
【００５６】
例えば、検索装置は、図７で示したハッシュ化ビットマップｈ４の複数のハッシュ化ビットマップｈ４１，ｈ４２をそれぞれビットマップに展開する（第１の復元処理）。ここでは、検索装置は、１つの底のハッシュ化ビットマップの復元先のビットマップについて、底に整数（０〜）を乗算して得られた値にハッシュ化ビットマップの各ビットの位置を加算した位置に、ハッシュ化ビットマップの各ビットの値を設定する。一例として、検索装置は、底２９のハッシュ化ビットマップｈ４１の復元先のビットマップｂ４１について、底２９に「０」を乗算した値にハッシュ化ビットマップｈ４１の各ビットの位置を加算した位置に、ハッシュ化ビットマップｈ４１の各ビットの値を設定する。検索装置は、底２９のハッシュ化ビットマップｈ４１の復元先のビットマップｂ４１について、底２９に「１」を乗算した値にハッシュ化ビットマップｈ４１の各ビットの位置を加算した位置に、ハッシュ化ビットマップｈ４１の各ビットの値を設定する。検索装置は、復元先の底２９のビットマップｂ４１の最大ビットの位置のビットの値が設定されるまで繰り返す。同様に、検索装置は、底３１のハッシュ化ビットマップｈ４２の復元先のビットマップｂ４２について、底３１に「０」を乗算した値にハッシュ化ビットマップｈ４２の各ビットの位置を加算した位置に、ハッシュ化ビットマップｈ４２の各ビットの値を設定する。検索装置は、底３１のハッシュ化ビットマップｈ４２の復元先のビットマップｂ４２について、底３１に「１」を乗算した値にハッシュ化ビットマップｈ４２の各ビットの位置を加算した位置に、ハッシュ化ビットマップｈ４２の各ビットの値を設定する。検索装置は、復元先のビットマップｂ４２の最大ビットの位置のビットの値が設定されるまで繰り返す。
【００５７】
検索装置は、第１の復元処理で復元されたそれぞれのビットマップの対応する位置のビットをＡＮＤ演算する（第２の復元処理）。ここでは、検索装置は、底２９のハッシュ化ビットマップｈ４１から復元されたビットマップｂ４１と、底３１のハッシュ化ビットマップｈ４２から復元されたビットマップｂ４２とをＡＮＤ演算する。検索装置は、ＡＮＤ結果のビットマップｂ４を復元結果として出力する。
【００５８】
なお、検索装置は、３次元ハッシュ化インデックスＨＩ２のハッシュ化ビットマップも、２次元ハッシュ化インデックスＨＩ１のハッシュ化ビットマップの場合と同様に、復元すれば良い。
【００５９】
［実施例に係るインデックス生成装置の構成］
次に、図９を参照して、実施例に係るインデックス生成装置１００の構成について説明する。図９は、実施例に係るインデックス生成装置の構成を示す機能ブロック図である。図９に示すように、インデックス生成装置１００は、制御部１１０と記憶部１２０とを有する。
【００６０】
制御部１１０は、図２に示したインデックス生成処理を実行する処理部である。制御部１１０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部１１０は、例えば、ＡＳＩＣやＦＰＧＡなどの集積回路の電子回路に対応する。または、制御部１１０は、ＣＰＵやＭＰＵなどの電子回路に対応する。また、制御部１１０は、ファイルリード部１１１、符号化部１１２、２次元インデックス生成部１１３および３次元インデックス生成部１１４を有する。
【００６１】
記憶部１２０は、例えばフラッシュメモリやＦＲＡＭ（登録商標）などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部１２０は、静的辞書１２１、動的辞書１２２、２次元ビットマップ型インデックス１２３、３次元ビットマップインデックス１２４、２次元ハッシュ化インデックス１２５および３次元ハッシュ化インデックス１２６を有する。なお、２次元ビットマップ型インデックス１２３および３次元ビットマップ型インデックス１２４のそれぞれの構成は、図２、図３と同様であるので、その説明を省略する。また、２次元ハッシュ化インデックス１２５の構成は、単語ＩＤに対応するハッシュ化ビットマップ（図５参照）を纏めた構成と同様であるので、その説明を省略する。３次元ハッシュ化インデックス１２６の構成は、単語ＩＤおよびファイルＩＤに対応するハッシュ化ビットマップ（図５参照）を纏めた構成と同様であるので、その説明を省略する。
【００６２】
静的辞書１２１は、一般的な英語辞典、国語辞典や教科書などを基にして、文書中に出現する単語の出現頻度を特定し、出現頻度のより高い単語に対して、より短い符号を割り当てた辞書である。なお、静的辞書１２１は、図２の静的辞書Ｓ０に対応する。
【００６３】
動的辞書１２２は、静的辞書１２１に登録されていない単語と動的に付された動的コード（単語コード）とを対応付けた辞書である。なお、動的辞書１２２は、図４の動的辞書Ｄ０に対応する。動的辞書１２２の説明は、図４と同様であるので、その説明を省略する。
【００６４】
ファイルリード部１１１は、符号化対象のファイルＦ１内の複数のファイルを記憶領域に読み出す。ファイルリード部１１１は、対象ファイルを記憶領域から読み出し、読み出した対象ファイルに対して字句解析を行う。ファイルリード部１１１は、字句解析した結果の各単語を順次符号化部１１２に出力する。
【００６５】
符号化部１１２は、静的辞書１２１および動的辞書１２２に基づいて、単語を符号化する。例えば、符号化部１１２は、ファイルリード部１１１から出力された単語の文字列が静的辞書１２１に登録されているか否かを判定する。一例として、符号化部１１２は、対象の単語の文字列が静的辞書１２１のビットフィルタにヒットするか否かを判定する。符号化部１１２は、対象の単語の文字列が静的辞書１２１に登録されている場合には、当該単語の文字列を静的辞書１２１に基づいて符号化する。一例として、符号化部１１２は、静的辞書１２１に基づいて、単語の文字列を、当該単語の文字列に対応する静的コード（単語コード）に符号化する。符号化部１１２は、符号化された単語コードを２次元インデックス生成部１１３に出力する。
【００６６】
そして、符号化部１１２は、対象の単語の文字列が静的辞書１２１に登録されていない場合には、当該単語の文字列を動的辞書１２２に基づいて符号化する。一例として、符号化部１１２は、単語の文字列が動的辞書１２２のバッファ部Ｄ１に格納されているか否かを判定する。符号化部１１２は、単語の文字列が動的辞書１２２のバッファ部Ｄ１に格納されていない場合には、当該単語の文字列をバッファ部Ｄ１に格納するとともに、当該単語の文字列を格納した格納位置および格納したデータ長をアドレステーブルＤ２に格納する。符号化部１１２は、単語の文字列を、当該単語の文字列に対応付けられた、アドレステーブルＤ２の動的コード（単語コード）に符号化する。また、符号化部１１２は、単語の文字列が、動的辞書１２２のバッファ部Ｄ１に格納されている場合には、当該単語の文字列を、当該単語の文字列に対応する動的コード（単語コード）に符号化する。符号化部１１２は、符号化された単語コードおよび当該単語コードが示す単語の位置を含む情報を２次元インデックス生成部１１３および３次元インデックス生成部１１４に出力する。
【００６７】
２次元インデックス生成部１１３は、対象ファイルのファイルＩＤおよび符号化された単語コードに基づいて、２次元ハッシュ化インデックス１２３を生成する。例えば、２次元インデックス生成部１１３は、符号化部１１２から出力された情報を受け取る。２次元インデックス生成部１１３は、受け取った情報に基づいて、単語コードに対応するビットマップの、対象ファイルのファイルＩＤに対応するビットについて、底α、底βをそれぞれ用いてハッシュ化し、「１」を設定する。すなわち、２次元インデックス生成部１１３は、対象ファイルに対する、単語コードが示す単語の存否を２次元ハッシュ化インデックス１２３に設定する。
【００６８】
一例として、２次元インデックス生成部１１３は、単語ＩＤ（単語コード）に対応するビットマップそれぞれについて、２つのハッシュ値（底）に基づいたハッシュ化ビットマップを生成する。すなわち、２次元インデックス生成部１１３は、ビットマップの０ビット目からの各ビットを順番にハッシュ化ビットマップの０ビット目から設定し、（底−１）ビット目まで設定する。そして、２次元インデックス生成部１１３は、再度折り返してハッシュ化ビットマップの０ビット目から既にハッシュ化ビットマップに設定された値とＯＲ演算した値を設定する。そして、２次元インデックス生成部１１３は、全ての単語ＩＤに対応するビットマップに対してハッシュ化ビットマップを生成すると、生成されたハッシュ化ビットマップを纏めた２次元ハッシュ化インデックス１２３を記憶部１２０に格納する。
【００６９】
３次元インデックス生成部１１４は、対象ファイルのファイルＩＤ、符号化された単語コードおよび当該単語コードが示す単語の位置に基づいて、３次元ハッシュ化インデックス１２４を生成する。例えば、３次元インデックス生成部１１４は、符号化部１１２から出力された情報を受け取る。３次元インデックス生成部１１４は、受け取った情報に基づいて、単語コードおよび対象ファイルのファイルＩＤに対応するビットマップの、当該単語コードが示す単語の位置に対応するビットについて、底α、底βをそれぞれ用いてハッシュ化し、「１」を設定する。すなわち、３次元インデックス生成部１１４は、対象ファイルに対する、単語コードおよび当該単語コードが示す単語の位置を３次元ハッシュ化インデックス１２４に設定する。
【００７０】
なお、ハッシュ化ビットマップの生成方法は、２次元インデックス生成部１１３の説明と同様であるので、その説明を省略する。
【００７１】
［実施例に係るインデックス生成処理の処理手順］
次に、実施例に係るインデックス生成処理の処理手順について、図１０を参照して説明する。図１０は、実施例に係るインデックス生成処理のフローチャートの一例を示す図である。
【００７２】
図１０に示すように、インデックス生成装置１１０は、前処理を実行する（ステップＳ１１）。例えば、インデックス生成装置１１０は、各種記憶領域を記憶部１２０に確保する。
【００７３】
インデックス生成装置１１０は、符号化対象のファイルＦ１内の複数の対象ファイルのうち、１つの対象ファイルを読み出し、読出用の記憶領域に格納する（ステップＳ１２）。インデックス生成装置１１０は、対象ファイルに対して、字句解析を行う（ステップＳ１２Ａ）。
【００７４】
インデックス生成装置１１０は、字句解析した結果の単語の文字列を先頭から読み出す（ステップＳ１３）。インデックス生成装置１１０は、読み出した単語を符号化する（ステップＳ１４）。なお、単語の符号化処理の説明は、後述する。そして、インデックス生成装置１１０は、単語の符号化処理から出力された単語コードを、対象ファイルに対応する符号化データ用の記憶領域に書き込む（ステップＳ１５）。
【００７５】
続いて、インデックス生成装置１１０は、単語コードに対するビットマップの、対象ファイルが示すファイルＩＤに対するビットについて、底α、底βをそれぞれ用いてハッシュ化し、「１」を書き込む（ステップＳ１６）。例えば、インデックス生成装置１１０は、底αのハッシュ化ビットマップについて、ビットマップの各ビットの位置を底αで割った余りの位置に、各ビットの値を設定する。インデックス生成装置１１０は、底βのハッシュ化ビットマップについて、ビットマップの各ビットの位置を底βで割った余りの位置に、各ビットの値を設定する。すなわち、インデックス生成装置１１０は、ビットマップの０ビット目からの各ビットを順番にハッシュ化ビットマップの０ビット目から設定し、（底−１）ビット目まで設定したら、再度折り返して０ビット目からＯＲ演算した結果を設定する。すなわち、インデックス生成装置１１０は、対象ファイルに対する、単語コードが示す単語の存否を２次元ビットマップ型インデックス１２３に設定する。
【００７６】
続いて、インデックス生成装置１１０は、単語コード、ファイルＩＤに関するビットマップの、単語コードが示す単語の位置に対するビットについて、底α、底βをそれぞれ用いてハッシュ化し、「１」を書き込む（ステップＳ１７）。すなわち、インデックス生成装置１１０は、対象ファイルに対する、単語コードおよび当該単語コードが示す単語の位置を３次元ビットマップ型インデックス１２４に設定する。
【００７７】
インデックス生成装置１１０は、対象ファイルの終点か否かを判定する（ステップＳ１８）。対象ファイルの終点でないと判定した場合には（ステップＳ１８；Ｎｏ）、インデックス生成装置１１０は、対象ファイルの次の単語を読み出すべく、ステップＳ１３に移行する。
【００７８】
一方、対象ファイルの終点であると判定した場合には（ステップＳ１８；Ｙｅｓ）、インデックス生成装置１１０は、符号化されていない対象ファイルがあるか否かを判定する（ステップＳ１９）。符号化されていない対象ファイルがあると判定した場合には（ステップＳ１９；Ｙｅｓ）、インデックス生成装置１１０は、次の対象ファイルを符号化すべく、ステップＳ１２に移行する。
【００７９】
符号化されていない対象ファイルがないと判定した場合には（ステップＳ１９；Ｎｏ）、インデックス生成装置１１０は、生成されたハッシュ化ビットマップを纏めた２次元ハッシュ化インデックス１２３を記憶部１２０に格納する。インデックス生成装置１１０は、生成されたハッシュ化ビットマップを纏めた３次元ハッシュ化インデックス１２４を記憶部１２０に格納する（ステップＳ２０）。そして、インデックス生成装置１１０は、インデックス生成処理を終了する。
【００８０】
［符号化処理の処理手順］
次に、実施例に係る符号化処理の処理手順について、図１１を参照して説明する。図１１は、実施例に係る符号化処理のフローチャートの一例を示す図である。なお、インデックス生成装置１１０は、単語の文字列を受け取ったものとする。
【００８１】
図１１に示すように、単語の文字列を受け取ったインデックス生成装置１１０は、静的辞書１２１に当該単語の文字列が登録済みであるか否かを判定する（ステップＳ３１）。静的辞書１２１に単語の文字列が登録済みであると判定した場合には（ステップＳ３１；Ｙｅｓ）、インデックス生成装置１１０は、静的辞書１２１に登録されている静的コード（単語コード）を出力する（ステップＳ３２）。そして、インデックス生成装置１１０は、符号化処理を終了する。
【００８２】
一方、静的辞書１２１に単語の文字列が登録済みでないと判定した場合には（ステップＳ３１；Ｎｏ）、インデックス生成装置１１０は、動的辞書１２２を参照する（ステップＳ３３）。インデックス生成装置１１０は、動的辞書１２２に単語の文字列が登録済みであるか否かを判定する（ステップＳ３４）。例えば、インデックス生成装置１１０は、単語の文字列が動的辞書１２２のバッファ部Ｄ１に格納されているか否かを判定する。
【００８３】
動的辞書１２２に単語の文字列が登録済みであると判定した場合には（ステップＳ３４；Ｙｅｓ）、インデックス生成装置１１０は、ステップＳ３６に移行する。
【００８４】
一方、動的辞書１２２に単語の文字列が登録済みでないと判定した場合には（ステップＳ３４；Ｎｏ）、インデックス生成装置１１０は、当該単語の文字列を動的辞書１２２に登録する（ステップＳ３５）。例えば、インデックス生成装置１１０は、単語の文字列を動的辞書１２２のバッファ部Ｄ１に格納するとともに、当該単語の文字列を格納した格納位置および格納したデータ長をアドレステーブルＤ２に格納する。そして、インデックス生成装置１１０は、ステップＳ３６に移行する。
【００８５】
ステップＳ３６において、インデックス生成装置１１０は、動的辞書１２２に登録されている単語コード（動的コード）を出力する（ステップＳ３６）。例えば、インデックス生成装置１１０は、単語の文字列を、当該単語の文字列に対応付けられた、アドレステーブルＤ２の動的コードに符号化する。インデックス生成装置１１０は、符号化した動的コードを単語コードとして出力する。そして、インデックス生成装置１１０は、符号化処理を終了する。
【００８６】
［実施例に係る検索装置の構成］
次に、図１２を参照して、実施例に係る検索処理を実行する検索装置２００の構成について説明する。図１２は、実施例に係る検索装置の構成を示す機能ブロック図である。図１２に示すように、検索装置２００は、制御部２１０と記憶部２２０とを有する。
【００８７】
制御部２１０は、図７に示した検索処理を実行する処理部である。制御部２１０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部２１０は、例えば、ＡＳＩＣやＦＰＧＡなどの集積回路の電子回路に対応する。または、制御部２１０は、ＣＰＵやＭＰＵなどの電子回路に対応する。また、制御部２１０は、検索キー受付部２１１、第１の復元部２１２、第２の復元部２１３、検索処理部２１４および検索結果出力部２１５を有する。
【００８８】
記憶部２２０は、例えばフラッシュメモリやＦＲＡＭ（登録商標）などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部２２０は、２次元ハッシュ化インデックス２２１、３次元ハッシュ化インデックス２２２、復元ビットマップ２２３および絞込みビットマップ２２４を有する。なお、２次元ハッシュ化インデックス２２１の構成は、単語ＩＤに対応するハッシュ化ビットマップ（図５参照）を纏めた構成と同様であるので、その説明を省略する。３次元ハッシュ化インデックス２２２の構成は、単語ＩＤおよびファイルＩＤに対応するハッシュ化ビットマップ（図５参照）を纏めた構成と同様であるので、その説明を省略する。復元ビットマップ２２３の構成は、ビットマップの構成（図８参照）と同様であるので、その説明を省略する。また、絞込みビットマップ２２４の構成は、各単語とＡＮＤ結果に対応するビットマップの構成（図８参照）と同様であるので、その説明を省略する。
【００８９】
検索キー受付部２１１は、検索キーを受け付ける。例えば、検索キー受付部２１１は、検索キーとして検索対象の単語を受け付ける。検索対象の単語は、単数であっても良いし、複数であっても良い。
【００９０】
第１の復元部２１２は、検索対象の単語が示す単語ＩＤに対応するハッシュ化ビットマップを復元する。例えば、第１の復元部２１２は、２次元ハッシュ化インデックスＨＩ１を参照し、検索キー受付部２１１によって受け付けられた単語の単語ＩＤに対応する複数のハッシュ化ビットマップを抽出する。第１の復元部２１２は、抽出した複数のハッシュ化ビットマップをそれぞれビットマップに展開する（第１の復元処理）。そして、第１の復元部２１２は、第１の復元処理で展開されたそれぞれのビットマップの対応する位置のビットをＡＮＤ演算する（第２の復元処理）。第１の復元部２１２は、ＡＮＤ結果のビットマップを復元結果として復元ビットマップ２２３に保持する。なお、検索対象の単語が複数ある場合には、第１の復元部２１２は、検索対象の単語ごとにハッシュ化ビットマップを復元し、復元結果であるビットマップを復元ビットマップ２２３に保持する。
【００９１】
また、第１の復元部２１２は、検索対象の単語が存在するファイルのファイルＩＤを第２の復元部２１３に出力する。例えば、第１の復元部２１２は、復元ビットマップ２２３に保持されたビットマップが複数ある場合には、複数のビットマップのＡＮＤ演算を行い、ＡＮＤ結果を絞込みビットマップ２２４に保持する。第１の復元部２１２は、復元ビットマップ２２３に保持されたビットマップが単数である場合には、当該ビットマップを絞込みビットマップ２２４にコピーする。そして、第１の復元部２１２は、絞込みビットマップ２２４のビットが「１」を示すファイルＩＤを第２の復元部２１３に出力する。
【００９２】
第２の復元部２１３は、ファイルＩＤおよび検索対象の単語が示す単語ＩＤに対応するハッシュ化ビットマップを復元する。例えば、第２の復元部２１３は、３次元ハッシュ化インデックスＨＩ２を参照し、第１の復元部２１２によって出力されたファイルＩＤおよび検索対象の単語の単語ＩＤに対応する複数のハッシュ化ビットマップを抽出する。第２の復元部２１３は、抽出した複数のハッシュ化ビットマップをそれぞれビットマップに展開する（第１の復元処理）。そして、第２の復元部２１３は、第１の復元処理で展開されたそれぞれのビットマップの対応する位置のビットをＡＮＤ演算する（第２の復元処理）。第２の復元部２１３は、ＡＮＤ結果のビットマップを復元結果として復元ビットマップ２２３に保持する。
【００９３】
検索処理部２１４は、検索対象の単語が存在するファイルの単語の位置を検索する。例えば、検索処理部２１４は、第２の復元部２１３によって復元ビットマップ２２３に保持されたビットマップのビットが「１」を示すＶａｌｕｅ（位置）を抽出する。抽出されたＶａｌｕｅ（位置）が、検索対象の単語が存在するファイルの単語の位置である。
【００９４】
検索結果出力部２１５は、検索処理部２１４によって検索されたＶａｌｕｅ（位置）をファイルＩＤおよび単語ＩＤが示す単語とともにＶａｌｕｅリストに追加する。そして、検索結果出力部２１５は、Ｖａｌｕｅリストを検索結果として出力する。
【００９５】
［検索処理のフローチャート］
図１３は、実施例に係る検索処理のフローチャートの一例を示す図である。
【００９６】
図１３に示すように、検索装置２００は、検索対象の単語を受け付けたか否かを判定する（ステップＳ４１）。検索対象の単語を受け付けていないと判定した場合には（ステップＳ４１；Ｎｏ）、検索装置２００は、検索対象の単語を受け付けるまで、判定処理を繰り返す。
【００９７】
一方、検索対象の単語を受け付けたと判定した場合には（ステップＳ４１；Ｙｅｓ）、検索装置２００は、２次元ハッシュ化インデックス２２１および３次元ハッシュ化インデックス２２２を記憶部２２０から読み出す（ステップＳ４２）。
【００９８】
検索装置２００は、読み出した２次元ハッシュ化インデックス２２１を参照し、検索対象の単語が示す単語ＩＤに対応するハッシュ化ビットマップを選択し、選択したハッシュ化ビットマップを復元する（ステップＳ４３）。検索装置２００は、未処理の単語があるか否かを判定する（ステップＳ４３Ａ）。未処理の単語があると判定した場合には（ステップＳ４３Ａ；Ｙｅｓ）、検索装置２００は、検索対象の次の単語を処理すべく、ステップＳ４３に移行する。
【００９９】
一方、未処理の単語がないと判定した場合には（ステップＳ４３Ａ；Ｎｏ）、検索装置２００は、復元されたビットマップが複数ある場合には、復元されたビットマップをＡＮＤ演算し、ＡＮＤ結果を絞込みビットマップ２２４に保持する。（ステップＳ４３Ｂ）。そして、検索装置２００は、絞込みビットマップ２２４のビットが「１」を示すファイルＩＤを取得する（ステップＳ４４）。
【０１００】
検索装置２００は、３次元ハッシュ化インデックス２２２を参照し、取得したファイルＩＤ毎に、単語ＩＤおよびファイルＩＤに対応するハッシュ化ビットマップを選択し、選択したハッシュ化ビットマップを復元する（ステップＳ４５）。そして、検索装置２００は、単語ＩＤおよびファイルＩＤ毎に、ビットが「１」を示すＶａｌｕｅ（位置）を取得する（ステップＳ４６）。
【０１０１】
検索装置２００は、単語ＩＤ、ファイルＩＤおよびＶａｌｕｅ（位置）をＶａｌｕｅリストに追加する（ステップＳ４７）。そして、検索装置２００は、Ｖａｌｕｅリストを出力し（ステップＳ４８）、検索処理を終了する。
【０１０２】
これにより、検索装置２００は、単語を有するファイルの、当該単語の位置の特定を、２次元ハッシュ化インデックス２２１および３次元ハッシュ化インデックス２２２により可能となる。
【０１０３】
［実施例の効果］
上記実施例によれば、インデックス生成装置１００は、入力された複数のファイルそれぞれに対し、複数のキーそれぞれの存否、および、キーが存在する場合のキーが存在する位置についての情報を、複数のファイルそれぞれに対する字句解析の際に生成する。そして、インデックス生成装置１００は、生成した情報に基づいて、複数のファイルそれぞれに対する、キーおよび位置のインデックス情報を生成する。かかる構成によれば、インデックス生成装置１００は、入力されたファイルに対して字句解析して、キーおよびその位置を含むインデックス情報を生成することで、当該インデックス情報を圧縮形式にて１パスで生成できる。すなわち、インデックス生成装置１００は、ファイルとキーとその位置とに対応付けられたインデックス情報を容易に生成できる。
【０１０４】
［実施例に関連する他の態様］
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
【０１０５】
また、実施例に係るインデックス生成装置１００は、３２ビットレジスタを想定し、２９と３１のハッシュ値（底）を基に、各ビットマップをハッシュ化するとして説明した。実施例では、１つのビットマップを４４ビットとして説明した。しかしながら、２９および３１のハッシュ値（底）は、一例であって、これに限定されない。ビットマップのビット数も、一例であって、これに限定されない。２つのハッシュ値（底）は、複数のファイル内のそれぞれの単語の種類の数に応じて決定されれば良い。例えば、単語の種類の数が１００００であるとすると、一方の底で割った余りと他方の底で割った余りとから表わされる２次元の行列が約１００００となるように、２つの底が選択される。２つの底は、隣接した素数であれば良い。選択される２つの素数は、行列の数が１００００の場合、一例として、９７と１０１である。つまり、最小公倍数が約１００００となる２次元のマトリックス空間の中で、ある単語について一方のハッシュおよび他方のハッシュで求められる余りの組は、他の単語について求められる余りの組と衝突しない（重複しない）であろうという推測に基づくものである。
【０１０６】
また、実施例では、インデックス生成装置１００が、単語ＩＤに対応するビットマップおよび単語ＩＤおよびファイルＩＤに対応するビットマップそれぞれについて、２つのハッシュ値（底）に基づいたそれぞれのハッシュ化ビットマップを生成すると説明した。インデックス生成装置１００は、ハッシュ化ビットマップを生成する際、ハッシュの衝突（ハッシュノイズ）を検知する場合がある。例えば、超高頻度の単語は、複数のファイルに存在するため、超高頻度の単語に対応するビットマップの複数位置のビット値が「１」に設定される。すると、ビットマップがハッシュ化されると、ハッシュ化ビットマップの同じ位置に「１」が重複して設定されることがある。超高頻度の単語の一例として、「ｔｈｅ」や「ｏｎ」が挙げられる。そこで、インデックス生成装置１００は、ハッシュノイズに対して、ハッシュの衝突監視を行い、０／１比率の測定やビットマップの分割により、ハッシュノイズの低減化を行えば良い。例えば、インデックス生成装置１００は、ハッシュ化ビットマップのいずれか１つで連続して衝突が発生した場合に、衝突が発生したハッシュ化ビットマップに対応するビットマップの存否情報を用いて存否（１／０）の比率を集計する。インデックス生成装置１００は、「１」の比率が閾値より大きい場合には、衝突が発生したハッシュ化ビットマップに対応するビットマップを分割する。一例として、インデックス生成装置１００は、衝突が発生したハッシュ化ビットマップに対応するビットマップの偶数番目の位置のビットを抽出し、新たにビットマップを生成する。加えて、インデックス生成装置１００は、衝突が発生したハッシュ化ビットマップに対応するビットマップの奇数番目の位置のビットを抽出し、新たにビットマップを生成する。そして、インデックス生成装置１００は、分割した新たなビットマップを、分割先として例えば低頻度単語の領域に格納する。インデックス生成装置１００は、２つのハッシュ化ビットマップのいずれか１つに対し分割先を設定する。そして、インデックス生成装置１００は、ビットマップを分割後に、分割先の各ビットマップに対して、２つのハッシュ値（底）に基づいたそれぞれのハッシュ化ビットマップを生成する。これにより、インデックス生成装置１００は、ハッシュ化ビットマップのデータが衝突する場合であっても、ハッシュ化前のビットマップの偶数番目のデータと奇数番目のデータとを分割してそれぞれハッシュ化することで、データの衝突を回避することが可能となる。
【０１０７】
また、検索装置２００は、検索対象として単語を受け付けると、当該単語が存在するファイルの当該単語の位置を検索する場合を説明した。すなわち、検索装置２００は、２次元ハッシュ化インデックス２２１を用いて、検索対象として受け付けられた単語が示す単語ＩＤに対応するハッシュ化ビットマップを復元し、ビットが「１」を示すファイルＩＤを取得する。検索装置２００は、３次元ハッシュ化インデックス２２２を用いて、単語ＩＤおよび取得したファイルＩＤに対応するハッシュ化ビットマップを復元し、ビットが「１」を示すＶａｌｕｅ（位置）を特定することで、検索対象の単語の位置を検索する。しかしながら、検索装置２００は、これに限定されず、検索対象として単語および当該単語の位置を受け付けると、当該単語および当該単語の位置に対応するファイルを検索しても良い。すなわち、検索装置２００は、３次元ハッシュ化インデックス２２２を用いて、検索対象として受け付けられた単語が示す単語ＩＤおよび当該単語の位置に対応するハッシュ化ビットマップを復元し、ビットが「１」を示すファイルＩＤを特定する。これにより、検索装置２００は、単語および当該単語の位置の双方を有する検索条件に対するファイルの特定を３次元ハッシュ化インデックス２２２のみにより可能とすることができる。
【０１０８】
また、実施例に係るインデックス生成装置１００は、隣接した複数のハッシュ値（底）を基に、２次元（単語の軸とファイルの軸）および３次元（単語の軸、ファイルの軸と位置の軸）にハッシュ化を適用したハッシュ化インデックスを生成すると説明した。しかしながら、インデックス生成装置１００は、ファイルの軸に代えてブロックの軸としても良い。すなわち、単語ＩＤの存否情報は、ブロック単位であるとしても良い。
【０１０９】
また、実施例に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１１０】
［ハードウェア構成］
下記に、上述の実施形態に用いられるハードウェア及びソフトウェアについて説明する。図１４は、コンピュータ１のハードウェア構成例を示す図である。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インターフェース（Ｉ／Ｆ）３１１およびバス３１２などを含む。それぞれのハードウェアはバス３１２を介して接続されている。
【０１１１】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）なども含む。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのフラッシュメモリ、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ１は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４及び記憶媒体３０５を設ける。
【０１１２】
入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する回路である。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる回路である。通信インターフェース３１０はネットワーク３を介した通信の制御を行なう回路である。通信インターフェース３１０は、例えばネットワークインターフェースカード（ＮＩＣ）などである。ＳＡＮインターフェース３１１は、ストレージエリアネットワークによりコンピュータ１と接続された記憶装置との通信の制御を行なう回路である。ＳＡＮインターフェース３１１は、例えばホストバスアダプタ（ＨＢＡ）などである。
【０１１３】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７及び出力デバイス３０９として用いられる。また、入力デバイス３０７及び出力デバイス３０９は、コンピュータ１と一体になっていても良いし、コンピュータ１に含まれず、例えば、コンピュータ１に外部から接続する装置であっても良い。
【０１１４】
例えば、プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って制御部１１０，２１０の処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１２０，２２０の機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムファイル（後述のアプリケーションプログラム２４、ミドルウェア２３およびＯＳ２２など）やデータファイル（例えば、静的辞書１２１、動的辞書１２２、２次元ビットマップ型インデックス１２３、３次元ビットマップ型インデックス１２４、２次元ハッシュ化インデックス１２５、３次元ハッシュ化インデックス１２６など）を記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図１５を用いて説明する。
【０１１５】
図１５は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ１において、図１５に示すハードウェア群ＨＷ２１（３０１〜３１２）の制御を行なうＯＳ（オペレーティング・システム）２２が動作する。ＯＳ２２に従った手順でプロセッサ３０１が動作して、ハードウェア群ＨＷ２１の制御・管理が行なわれることにより、アプリケーションプログラムＡＰ２４やミドルウェアＭＷ２３に従った処理がハードウェア群２１で実行される。さらに、コンピュータ１において、ミドルウェアＭＷ２３またはアプリケーションプログラムＡＰ２４が、ＲＡＭ３０２に読み出されてプロセッサ３０１により実行される。
【０１１６】
プロセッサ３０１が、インデックス生成機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）制御部１１０の機能が実現される。プロセッサ３０１が、検索機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）制御部２１０の機能が実現される。符号化機能および検索機能は、アプリケーションプログラム２４自体に含まれても良いし、アプリケーションプログラム２４に従って呼び出されることで実行されるミドルウェア２３の一部であっても良い。
【０１１７】
図１６は、実施形態のシステムにおける装置の構成例を示す図である。図１６のシステムは、コンピュータ１ａ、コンピュータ１ｂ、基地局２およびネットワーク３を含む。コンピュータ１ａは、無線または有線の少なくとも一方により、コンピュータ１ｂと接続されたネットワーク３に接続している。
【０１１８】
インデックス生成装置１００と検索装置２００とは、図１６に示すコンピュータ１ａとコンピュータ１ｂとのいずれに含まれても良い。コンピュータ１ｂがインデックス生成装置１００の機能を含み、コンピュータ１ａが検索装置２００の機能を含んでも良いし、コンピュータ１ａがインデックス生成装置１００の機能を含み、コンピュータ１ｂが検索装置２００の機能を含んでも良い。また、コンピュータ１ａとコンピュータ１ｂとの双方が、インデックス生成装置１００の機能および検索装置２００の機能を備えても良い。
【０１１９】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２０】
（付記１）コンピュータに、
入力された複数のファイルそれぞれに対し、複数のキーそれぞれの存否、および、前記キーが存在する場合の前記キーが存在する位置についての情報を、前記複数のファイルそれぞれに対する字句解析の際に生成し、
前記情報に基づいて、前記複数のファイルそれぞれに対する、前記キーおよび前記位置のインデックス情報を生成する
処理を実行させることを特徴とするインデックス生成プログラム。
【０１２１】
（付記２）前記インデックス情報を生成する処理は、前記情報より、複数の前記位置の軸に対し複数のハッシュ関数を適用した複数のハッシュ化軸を用いたハッシュ化インデック情報を生成する
処理を実行させることを特徴とする付記１に記載のインデックス生成プログラム。
【０１２２】
（付記３）入力された複数のファイルそれぞれに対し、複数のキーそれぞれの存否、および、前記キーが存在する場合の前記キーが存在する位置についての情報を、前記複数のファイルそれぞれに対する字句解析の際に生成する第１の生成部と、
前記情報に基づいて、前記複数のファイルそれぞれに対する、前記キーおよび前記位置のインデックス情報を生成する第２の生成部と、
を有することを特徴とするインデックス生成装置。
【０１２３】
（付記４）コンピュータが、
入力された複数のファイルそれぞれに対し、複数のキーそれぞれの存否、および、前記キーが存在する場合の前記キーが存在する位置についての情報を、前記複数のファイルそれぞれに対する字句解析の際に生成し、
前記情報に基づいて、前記複数のファイルそれぞれに対する、前記キーおよび前記位置のインデックス情報を生成する
処理を実行することを特徴とするインデックス生成方法。
【０１２４】
（付記５）コンピュータに、
ファイルに対する、キーおよび位置による探索条件を含む探索要求を受け付け、
前記複数のファイルそれぞれについての、複数のキーおよび位置に対する存否に関するインデックス情報を参照し、前記探索要求に対応するファイルを前記複数のファイルより特定する
処理を実行させることを特徴とする検索プログラム。
【０１２５】
（付記６）ファイルに対する、キーおよび位置による探索条件を含む探索要求を受け付ける受付部と、
前記複数のファイルそれぞれについての、複数のキーおよび位置に対する存否に関するインデックス情報を参照し、前記探索要求に対応するファイルを前記複数のファイルより特定する特定部と、
を有することを特徴とする検索装置。
【０１２６】
（付記７）コンピュータが、
ファイルに対する、キーおよび位置による探索条件を含む探索要求を受け付け、
前記複数のファイルそれぞれについての、複数のキーおよび位置に対する存否に関するインデックス情報を参照し、前記探索要求に対応するファイルを前記複数のファイルより特定する
処理を実行することを特徴とする検索方法。
【０１２７】
（付記８）コンピュータに、
キーによる探索条件を含む探索要求を受け付け、
複数のファイルそれぞれについての、複数のキーに対する存否を示す第１のインデックス情報を参照し、前記探索要求に含まれるキーが存在するファイルを特定し、
前記複数のファイルそれぞれについての、前記複数のキーおよび位置に対する存否を示す第２のインデックス情報を参照し、特定されたファイルについての、前記探索要求に含まれるキーが存在する位置を特定する
処理を実行させることを特徴とする検索プログラム。
【０１２８】
（付記９）キーによる探索条件を含む探索要求を受け付ける受付部と、
複数のファイルそれぞれについての、複数のキーに対する存否を示す第１のインデックス情報を参照し、前記探索要求に含まれるキーが存在するファイルを特定する第１の特定部と、
前記複数のファイルそれぞれについての、前記複数のキーおよび位置に対する存否を示す第２のインデックス情報を参照し、特定されたファイルについての、前記探索要求に含まれるキーが存在する位置を特定する第２の特定部と、
を有することを特徴とする検索装置。
【０１２９】
（付記１０）コンピュータが、
キーによる探索条件を含む探索要求を受け付け、
複数のファイルそれぞれについての、複数のキーに対する存否を示す第１のインデックス情報を参照し、前記探索要求に含まれるキーが存在するファイルを特定し、
前記複数のファイルそれぞれについての、前記複数のキーおよび位置に対する存否を示す第２のインデックス情報を参照し、特定されたファイルについての、前記探索要求に含まれるキーが存在する位置を特定する
処理を実行することを特徴とする検索方法。
【符号の説明】
【０１３０】
１００  インデックス生成装置
１１０  制御部
１１１  ファイルリード部
１１２  符号化部
１１３  ２次元インデックス生成部
１１４  ３次元インデックス生成部
１２０  記憶部
１２１  静的辞書
１２２  動的辞書
１２３  ２次元ハッシュ化インデックス
１２４  ３次元ハッシュ化インデックス
２００  検索装置
２１０  制御部
２１１  検索キー受付部
２１２  第１の復元部
２１３  第２の復元部
２１４  検索処理部
２１５  検索結果出力部
２２０  記憶部
２２１  ２次元ハッシュ化インデックス
２２２  ３次元ハッシュ化インデックス
２２３  復元ビットマップ
２２４  絞込みビットマップ
【図１】
0006720664.tif 000002
【図２】
0006720664.tif 000003
【図３】
0006720664.tif 000004
【図４】
0006720664.tif 000005
【図５】
0006720664.tif 000006
【図６】
0006720664.tif 000007
【図７】
0006720664.tif 000008
【図８】
0006720664.tif 000009
【図９】
0006720664.tif 000010
【図１０】
0006720664.tif 000011
【図１１】
0006720664.tif 000012
【図１２】
0006720664.tif 000013
【図１３】
0006720664.tif 000014
【図１４】
0006720664.tif 000015
【図１５】
0006720664.tif 000016
【図１６】
0006720664.tif 000017