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