以下に、本願の開示するインデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
[実施例に係るハッシュ化インデックス生成の一例]
図1Aおよび図1Bは、実施例に係るハッシュ化インデックス生成処理の一例を示す図である。図1Aおよび図1Bに示すように、ハッシュ化インデックス生成処理は、ビットマップ型インデックスのサイズ縮小を実現するために、ビットマップ型インデックスからハッシュ化インデックスを生成する。すなわち、ハッシュ化インデックス生成処理は、隣接した複数のハッシュ値(底)を基に、2次元(単語の軸とファイルの軸)にハッシュ化を適用したハッシュ化インデックスを生成する。
ここでいうビットマップ型インデックスとは、テキストデータに含まれる単語について、ファイルごとの存否をインデックス化したビットマップのことをいう。図1Aに示すように、ビットマップ型インデックスBIのX軸はファイルID(Identification)を表し、ビットマップ型インデックスB1のY軸は単語IDを表す。すなわち、ビットマップ型インデックスBIは、単語IDが示す単語の、複数のファイルIDが示すファイルごとの存否を表す。一例として、ある単語IDに対応するビットマップbi1が示されている。ある単語IDが示す単語がファイルに存在する場合には、当該単語のファイルの存否として2進数の「1」が設定され、当該単語がファイルに存在しない場合には、当該単語のファイルの存否として2進数の「0」が設定される。なお、ビットマップ型インデックスBIの詳細の説明は、後述する。
例えば、図1Aに示すように、インデックス生成装置は、単語IDに対応するビットマップそれぞれについてハッシュ関数を適用した複数のハッシュ化ビットマップを生成する。ここでは、インデックス生成装置は、32ビットレジスタを想定し、一例として29と31のハッシュ値(底)を基に、各ビットマップをハッシュ化する。具体的には、インデックス生成装置は、1つの底のハッシュ化ビットマップについて、単語IDに対応するビットマップの各ビットの位置を底で割った余りの位置に、当該ビットマップの各ビットの値を設定する。一例として、インデックス生成装置は、底29のハッシュ化ビットマップh11について、ビットマップbi1の各ビットの位置を底29で割った余りの位置に、ビットマップbi1の各ビットの値を設定する。ビットマップbi1の35ビット目の位置のビット値「1」は、ハッシュ化ビットマップh11の6ビット目に設定される。ビットマップbi1の42ビット目の位置のビット値「1」は、ハッシュ化ビットマップh11の13ビット目に設定される。インデックス生成装置は、底31のハッシュ化ビットマップh12について、ビットマップbi1の各ビットの位置を底31で割った余りの位置に、ビットマップbi1の各ビットの値を設定する。ビットマップbi1の35ビット目の位置のビット値「1」は、ハッシュ化ビットマップh12の4ビット目に設定される。ビットマップbi1の42ビット目の位置のビット値「1」は、ハッシュ化ビットマップh12の11ビット目に設定される。すなわち、インデックス生成装置は、ビットマップの0ビット目からの各ビットを順番にハッシュ化ビットマップの0ビット目から設定し、(底−1)ビット目まで設定する。そして、インデックス生成装置は、再度折り返してハッシュ化ビットマップの0ビット目から既にハッシュ化ビットマップに設定された値とOR演算した値を設定する。
ここで、インデックス生成装置は、ハッシュ化ビットマップを生成する際、ハッシュの衝突(ハッシュノイズ)を検知する場合がある。例えば、超高頻度の単語は、複数のファイルに存在するため、超高頻度の単語に対応するビットマップの複数位置のビット値が「1」に設定される。すると、ビットマップがハッシュ化されると、ハッシュ化ビットマップの同じ位置に「1」が重複して設定されることがある。超高頻度の単語の一例として、1グラムの場合には、「the」や「on」が挙げられる。2グラムの場合には、「in the」、「on the」や「of the」が挙げられる。
そこで、インデックス生成装置は、ハッシュノイズに対して、ハッシュの衝突監視を行い、0/1比率の測定やビットマップの分割により、ハッシュノイズの低減化を行う。例えば、図1Bに示すように、インデックス生成装置は、ハッシュの衝突を監視し、ハッシュの衝突を検知すると、ハッシュ化ビットマップのビット重複履歴フラグに重複していることを示す「1」を設定する。ここでは、ハッシュ化ビットマップの空いている31ビット目の位置をビット重複履歴フラグとする。
インデックス生成装置は、ハッシュ化ビットマップのいずれか1つで連続して衝突が発生した場合に、衝突が発生したハッシュ化ビットマップに対応する単語IDのビットマップの存否情報を用いて存否(1/0)の比率を集計する。ハッシュ化ビットマップで連続して衝突が発生したか否の判定は、このハッシュ化ビットマップのビット重複履歴フラグを用いれば良い。すなわち、インデックス生成装置は、ハッシュ化ビットマップで衝突が発生した場合に、このハッシュ化ビットマップのビット重複履歴フラグに既に重複していることを示す「1」が設定されていれば、連続して衝突が発生したと判定する。連続に衝突が発生する場合には、単語IDに対応するビットマップの「1」の比率が予め定められた閾値を超過していると推測されるからである。閾値の一例として、50%が挙げられる。なお、閾値は、これに限定されず、ハッシュノイズが急激に増加すると推測されるビットマップ内の「1」の最小比率であれば良い。
インデックス生成装置は、「1」の比率が閾値より大きい場合には、衝突が発生したハッシュ化ビットマップに対応する単語IDのビットマップを分割する。具体的には、インデックス生成装置は、衝突が発生したハッシュ化ビットマップに対応する単語IDのビットマップの偶数番目の位置のビットを抽出し、新たにビットマップを生成する。加えて、インデックス生成装置は、衝突が発生したハッシュ化ビットマップに対応する単語IDのビットマップの奇数番目の位置のビットを抽出し、新たにビットマップを生成する。一例として、衝突が発生したハッシュ化ビットマップに対応する単語IDの分割前のビットマップをbi1とする。すると、インデックス生成装置は、分割前のビットマップbi1の偶数番目の位置の各ビットを抜き出して、新たなビットマップbi10を生成する。インデックス生成装置は、分割前のビットマップbi1の奇数番目の位置の各ビットを抜き出して、新たなビットマップbi11を生成する。
インデックス生成装置は、分割した新たなビットマップbi10、bi11を、分割先として低頻度単語の領域に格納する。インデックス生成装置は、複数ハッシュ化ビットマップのいずれか1つに対し分割先を設定する。なお、ビットマップ型インデックスBIは、超高頻度単語の領域、高頻度単語の領域、低頻度単語の領域から形成される。低頻度単語の領域は、最下位の部分に形成される。
そして、インデックス生成装置は、ビットマップを分割後に、分割先の各ビットマップに対して、図1Aで示したように、複数のハッシュ化ビットマップを生成する。これにより、インデックス生成装置は、ハッシュ化ビットマップのデータが衝突する場合であっても、ハッシュ化前のビットマップの偶数番目のデータと奇数番目のデータとを分割してそれぞれハッシュ化することで、データの衝突を回避することが可能となる。
[ハッシュノイズの説明]
ここで、ハッシュノイズについて、図2を参照して説明する。図2は、ハッシュノイズの説明をする図である。図2に示すように、ハッシュノイズは、0/1比率が閾値を超過すると、急激に増加する傾向にある。すなわち、単語に対応するビットマップは、0/1比率が閾値を超過すると、ハッシュ化した場合に、ハッシュノイズが急激に増加する。具体的には、超高頻度の単語の場合、単語に対応する軸(ビットマップ)は、0/1比率が閾値を超過するので、ハッシュ化した場合に、ハッシュノイズが急激に増加する。この結果、ハッシュノイズが急激に増加すると、例えばハッシュ化を復元する際に正しく復元できないこととなり、他の単語へも悪影響が広がる。そこで、インデックス生成装置は、0/1比率が閾値より大きい単語に対応するビットマップを分割することにより、分割後のビットマップをハッシュ化しても、ハッシュノイズを軽減することができる。
[ビットマップ型インデックスの一例]
次に、実施例に係るビットマップ型インデックスの一例を、図3Aおよび図3Bを参照して説明する。図3Aは、実施例に係るビットマップ型インデックスの一例を示す図である。図3Aに示すように、ビットマップ型インデックスBIは、超高頻度の単語、高頻度の単語および低頻度の単語に係る圧縮付号(単語IDに対応)ごとにビットマップを対応づける。ビットマップとは、超高頻度の単語、高頻度の単語および低頻度の単語がいずれの圧縮ファイルに含まれるかを表す符号ビット列である。ビットマップの各ビットが、各圧縮ファイルに超高頻度の単語、高頻度の単語および低頻度の単語が含まれているか否かを表す。なお、かかる単語は、要素の一例である。
ビットマップ型インデックスBIは、例えば、32種類の超高頻度単語ごと、8K(8000)種類の高頻度の単語および16K(16000)種類の低頻度単語ごとにビットマップを対応づける。超高頻度単語とは、出現頻度集計用のテキストファイル群において各単語の出現頻度を集計した場合に、出現頻度の高い単語を表す。例えば、超高頻度単語は、頻度集計用のテキストファイル群での出現頻度が上位32位までの単語である。高頻度単語は、頻度集計用のテキストファイル群での出現頻度が上位8000位までの単語である。また、低頻度単語は、頻度集計用のテキストファイル群での出現頻度の順位が24000位未満であって、符号化するファイルから抽出された数値文字列または単語である。単語の一例として、未知語が挙げられる。なお、未知語とは、超高頻度単語および高頻度単語に含まれない単語であり、符号化するファイルの中で繰り返し出現する特長がある単語のことをいう。
例えば、ビットマップ型インデックスBIの有効行1行目は、圧縮符号が示す単語「the」のビットマップが「・・・1101」となっている。ビットマップ型インデックスBIの有効行1行目のビットマップは、「the」の圧縮符号が含まれるファイルを表す。ビットマップ「・・・1101」は、1ビット目に「1」が格納されているのでファイル1に「the」が含まれ、2ビット目に「0」が格納されているのでファイル2に「the」が含まれず、3ビット目に「1」が格納されているのでファイル3に「the」が含まれることを表す。また、ビットマップ「・・・1101」は、4ビット目に「1」が格納されているのでファイル4に「the」が含まれていることを表す。なお、ビットマップ「・・・1101」は、ファイル5以降の他の各ファイルに「the」が含まれるか否かについても表す。
ビットマップ型インデックスBIを用いることで、入力文字列を構成する単語が、どのファイルに存在するかを、高速に絞り込むことができる。例えば、入力文字列「in front of the」を構成する単語「in」、「front」、「of」および「the」が、「ファイル1」に存在することを、高速に絞り込むことができる。
なお、ビットマップ型インデックスBIは、単語に係る圧縮付号ごとにビットマップを対応づけると説明した。しかしながら、ビットマップ型インデックスBIは、これに限定されず、Nグラム(Nは2以上)の文字に係る圧縮符号ごとにビットマップを対応づけても良い。かかるNグラムの文字は、要素の別の例である。図3Bは、実施例に係るビットマップ型インデックスの別の例を示す図である。図3Bは、Nグラムを2グラムとした場合の例である。図3Bに示すように、ビットマップ型インデックスBIは、2グラム文字に係る圧縮符号ごとにビットマップを対応づける。ここでいうビットマップとは、2グラム文字がいずれの圧縮ファイルに含まれるかを表す符号ビット列である。ビットマップの各ビットが、各圧縮ファイルに2グラム文字が含まれているか否かを表す。
例えば、ビットマップ型インデックスBIの有効行1行目は、圧縮符号が示す2グラム文字「aa」のビットマップが「・・・1101」となっている。ビットマップ型インデックスBIの有効行1行目のビットマップは、「aa」の圧縮符号が含まれるファイルを表す。ビットマップ「・・・1101」は、1ビット目に「1」が格納されているのでファイル1に「aa」が含まれ、2ビット目に「0」が格納されているのでファイル2に「aa」が含まれず、3ビット目に「1」が格納されているのでファイル3に「aa」が含まれることを表す。また、ビットマップ「・・・1101」は、4ビット目に「1」が格納されているのでファイル4に「aa」が含まれていることを表す。なお、ビットマップ「・・・1101」は、ファイル5以降の他の各ファイルに「aa」が含まれるか否かについても表す。
[実施例に係るハッシュ化ビットマップ復元の一例]
図4Aおよび図4Bは、実施例に係るハッシュ化ビットマップ復元処理の一例を示す図である。図4Aおよび図4Bに示すように、ハッシュ化ビットマップ復元処理は、ハッシュ化ビットマップから、ハッシュ化を展開した単語IDに対応するビットマップへ復元する。図4Aは、ハッシュ化ビットマップに分割先が設定されていない場合であり、図4Bは、ハッシュ化ビットマップに分割先が設定されている場合である。ハッシュ化ビットマップ復元処理は、入力文字列を構成する単語がどのファイルに存在するかを検索する際に実行される。
例えば、図4Aに示すように、検索装置は、単語およびテキストデータのファイルIDの入力を受け付けると、受け付けた単語が示す単語IDに対応する複数のハッシュ化ビットマップをハッシュ化インデックスHIから抽出する。検索装置は、複数のハッシュ化ビットマップのいずれかに分割先が設定されているか否かを判定する。ここでは、検索装置は、複数のハッシュ化ビットマップのいずれにも分割先が設定されていない。
検索装置は、複数のハッシュ化ビットマップをそれぞれビットマップに展開する(第1の復元処理)。ここでは、検索装置は、1つの底のハッシュ化ビットマップの復元先のビットマップについて、底に整数(0〜)を乗算して得られた値にハッシュ化ビットマップの各ビットの位置を加算した位置に、ハッシュ化ビットマップの各ビットの値を設定する。一例として、検索装置は、底29のハッシュ化ビットマップh21の復元先のビットマップbi21について、底29に「0」を乗算した値にハッシュ化ビットマップh21の各ビットの位置を加算した位置に、ハッシュ化ビットマップh21の各ビットの値を設定する。検索装置は、底29のハッシュ化ビットマップh21の復元先のビットマップbi21について、底29に「1」を乗算した値にハッシュ化ビットマップh21の各ビットの位置を加算した位置に、ハッシュ化ビットマップh21の各ビットの値を設定する。検索装置は、復元先の底29のビットマップbi21の最大ビットの位置のビットの値が設定されるまで繰り返す。同様に、検索装置は、底31のハッシュ化ビットマップh22の復元先のビットマップbi22について、底31に「0」を乗算した値にハッシュ化ビットマップh22の各ビットの位置を加算した位置に、ハッシュ化ビットマップh22の各ビットの値を設定する。検索装置は、底31のハッシュ化ビットマップh22の復元先のビットマップbi22について、底31に「1」を乗算した値にハッシュ化ビットマップh22の各ビットの位置を加算した位置に、ハッシュ化ビットマップh22の各ビットの値を設定する。検索装置は、復元先のビットマップbi22の最大ビットの位置のビットの値が設定されるまで繰り返す。
検索装置は、第1の復元処理で復元されたそれぞれのビットマップの対応する位置のビットをAND演算する(第2の復元処理)。ここでは、検索装置は、底29のハッシュ化ビットマップh21から復元されたビットマップbi21と、底31のハッシュ化ビットマップh22から復元されたビットマップbi22とをAND演算する。検索装置は、AND結果のビットマップbi2を復元結果として出力する。
図4Bは、複数のハッシュ化ビットマップのいずれかに分割先が設定されている場合である。図4Aに示したように、検索装置は、分割先に格納された偶数のビットマップにおける底29のハッシュ化ビットマップについて、第1の復元処理を行う。検索装置は、分割先に格納された偶数のビットマップにおける底31のハッシュ化ビットマップについて、第1の復元処理を行う。そして、図4Bに示すように、検索装置は、第1の復元処理で復元されたそれぞれのビットマップを用いて、第2の復元処理を行う。第2の復元処理のAND結果は、ビットマップbi30である。
同様に、図4Aに示したように、検索装置は、分割先に格納された奇数のビットマップにおける底29のハッシュ化ビットマップについて、第1の復元処理を行う。検索装置は、分割先に格納された奇数のビットマップにおける底31のハッシュ化ビットマップについて、第1の復元処理を行う。そして、図4Bに示すように、検索装置は、第1の復元処理で復元されたそれぞれのビットマップを用いて、第2の復元処理を行う。第2の復元処理のAND結果は、ビットマップbi31である。
検索装置は、第2の復元処理で復元されたそれぞれのビットマップの対応する位置のビットをOR演算する(併合処理)。ここでは、検索装置は、ビットマップbi30と、ビットマップbi31とをOR演算する。検索装置は、OR結果のビットマップbi3を復元結果として出力する。
[実施例に係る検索処理の一例]
図5は、実施例に係る検索処理の一例を示す図である。図5に示すように、検索処理を実行する検索装置は、単語およびテキストデータのファイルIDの入力を受け付けると、受け付けた単語が示す単語IDに対する複数のハッシュ化ビットマップをハッシュ化インデックスHIから抽出する。ここでは、単語として「Mickey」、ファイルIDとして「ファイル33」が受け付けられたとする。すると、検索装置は、単語として受け付けられた「Mickey」が示す単語ID「A001h」に対する複数のハッシュ化ビットマップh41,h42をハッシュ化インデックスHIから抽出する。
検索装置は、抽出した単語IDに対する複数のハッシュ化ビットマップを復元する。複数のハッシュ化ビットマップの復元処理は、図4Aおよび図4Bに示した処理である。復元結果は、単語IDに対応するビットマップで表わされる。ここでは、検索装置は、単語ID「A001h」に対する複数のハッシュ化ビットマップhi4を復元し、ビットマップbi40を復元結果として出力する。複数のハッシュ化ビットマップhi4には、底29のハッシュ化ビットマップh41と底31のハッシュ化ビットマップh42とが含まれる。
検索装置は、復元結果である単語IDのビットマップの各ビットが示す、複数のファイルそれぞれにおける単語IDが示す単語の存否情報に基づいて、受け付けたファイルIDに対応する当該単語IDが示す単語の存否情報を検索する。一例として、検索装置は、ビットマップbi40の各ビットのうち、ファイルIDとして受け付けられた「ファイル33」に対するビットの値に基づいて、単語の存否情報を検索する。ここでは、検索装置は、ファイルIDとして受け付けられた「ファイル33」に対するビットの値が「1」であるので、「ファイル33」に単語「Mickey」が存在すると判断する。検索装置は、検索結果として存在する旨を出力する。これにより、検索装置は、ハッシュ化インデックスHIをビットマップ型インデックスBIに復元し、復元されたビットマップ型インデックスBIを用いることで、入力文字列を構成する単語が、どのファイルに存在するかを、高速に絞り込むことができる。
なお、入力として受け付けられる単語は、単語のみならず、複数の単語で構成される文字列であっても良い。入力として受け付けられる単語が、複数の単語で構成される文字列である場合には、検索装置は、以下のように処理すれば良い。すなわち、検索装置は、入力文字列およびファイルIDの入力を受け付けると、受け付けた入力文字列を字句解析する。ここでいう字句解析とは、入力文字列を単語に分割することをいう。そして、検索装置は、字句解析した結果である複数の単語の単語毎に、単語が示す単語IDに対する複数のハッシュ化ビットマップを復元する。そして、検索装置は、復元結果である複数の単語に対応するビットマップから、受け付けたファイルIDに対応する、単語IDが示す単語の存否情報を抽出する。そして、検索装置は、抽出した存否情報をAND演算し、AND結果に基づいて、受け付けたファイルIDに対応する、受け付けた入力文字列の存否情報を検索する。
例えば、複数の単語で構成される文字列を入力として受け付けた場合の検索処理について、図3を参照して説明する。入力文字列として「in front of the」、ファイルIDとして「ファイル1」が受け付けられたとする。すると、検索装置は、「in front of the」を字句解析し、入力文字列を「in」、「front」、「of」および「the」のそれぞれの単語に分割する。検索装置は、単語「in」、「front」、「of」および「the」に対応する各ビットマップから、「ファイル1」に対応する存否情報として「1」(存在)を抽出する。そして、検索装置は、抽出した存否情報をAND演算し、AND結果「1」に基づいて、「ファイル1」に対応する、受け付けた入力文字列の存否情報を検索する。ここでは、検索装置は、検索結果として存在する旨を出力する。これにより、検索装置は、入力文字列が複数の単語で構成される場合であっても、入力文字列がどのファイルに存在するのかを、高速に絞り込むことができる。
[実施例に係るインデックス生成装置の構成]
次に、図6を参照して、実施例に係るインデックス生成処理を実行するインデックス生成装置100の構成について説明する。図6は、実施例に係るインデックス生成装置の構成を示す機能ブロック図である。図6に示すように、インデックス生成装置100は、制御部110と記憶部120とを有する。
制御部110は、図1Aおよび図1Bに示したハッシュ化インデックス生成処理を実行する処理部である。制御部110は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部110は、例えば、ASICやFPGAなどの集積回路の電子回路に対応する。または、制御部110は、CPUやMPUなどの電子回路に対応する。また、制御部110は、ハッシュ化部111、重複判定部112、0/1比率集計部113およびビットマップ分割部114を有する。
記憶部120は、例えばフラッシュメモリやFRAM(登録商標)などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部120は、ビットマップ型インデックス121およびハッシュ化インデックス122を有する。なお、ビットマップ型インデックス121の構成は、図3と同様であるので、その説明を省略する。ハッシュ化インデックス122の構成は、各単語IDに対応するハッシュ化ビットマップの構成(図1Aおよび図1B参照)と同様であるので、その説明を省略する。
ハッシュ化部111は、複数のハッシュ値(底)を基に、ビットマップ型インデックス121の各軸(ビットマップ)をハッシュ化する。例えば、ハッシュ化部111は、ビットマップ型インデックス121を記憶部120から読み出す。ハッシュ化部111は、読み出したビットマップ型インデックス121に含まれる複数の単語IDに対応するビットマップそれぞれについて、複数のハッシュ化ビットマップを生成する。一例として、ハッシュ化部111は、複数の単語IDに対応するビットマップそれぞれについて、29と31のハッシュ値(底)に基づいたそれぞれのハッシュ化ビットマップを生成する。すなわち、ハッシュ化部111は、ビットマップの0ビット目からの各ビットを順番にハッシュ化ビットマップの0ビット目から設定し、(底−1)ビット目まで設定する。そして、ハッシュ化部111は、再度折り返してハッシュ化ビットマップの0ビット目から既にハッシュ化ビットマップに設定された値とOR演算した値を設定する。
また、ハッシュ化部111は、全ての単語IDに対応するビットマップに対してハッシュ化ビットマップを生成すると、生成されたハッシュ化ビットマップを纏めたハッシュ化インデックス122を記憶部120に格納する。
重複判定部112は、ハッシュ化部111によって単語IDに対するビットマップがハッシュ化される際に、ハッシュ化ビットマップに「1」が重複して設定されるか否かを判定する。すなわち、重複判定部112は、ハッシュの重複(衝突)を監視する。かかる判定処理は、複数のハッシュ化ビットマップのそれぞれに対して行われる。重複判定部112は、ハッシュ化ビットマップに「1」が重複して設定される場合には、ハッシュ化ビットマップのビット重複履歴フラグに重複していることを示す「1」を設定する。重複判定部112は、ハッシュ化ビットマップに「1」が重複して設定されない場合には、ハッシュ化ビットマップのビット重複履歴フラグに重複していないことを示す「0」を設定する。
0/1比率集計部113は、単語IDに対するビットマップの0/1比率を集計する。例えば、0/1比率集計部113は、重複判定部112によってハッシュ化ビットマップに「1」が連続して重複設定されるか否かを判定する。一例として、0/1比率集計部113は、ハッシュ化ビットマップのビット重複履歴フラグに既に重複していることを示す「1」が設定されているか否かを判定する。すなわち、0/1比率集計部113は、ハッシュ化ビットマップのビット重複履歴フラグに既に「1」が設定されている場合には、直前のハッシュ化および今回のハッシュ化で連続して「1」が重複して設定されたと判断する。そして、0/1比率集計部113は、ハッシュ化ビットマップに「1」が連続して重複設定された場合には、当該ハッシュ化ビットマップに対応する単語IDに対応するビットマップの0/1比率を集計する。0/1比率集計部113は、「1」の比率が閾値より大きいか否かを判定する。0/1比率集計部113は、「1」の比率が閾値より大きい場合には、ハッシュノイズが急激に増加していると判断し、後述するビットマップ分割部114にビットマップを分割させる。
ビットマップ分割部114は、単語IDに対応するビットマップを分割する。例えば、ビットマップ分割部114は、0/1比率集計部113によって単語IDに対応するビットマップの「1」の比率が閾値より大きいと判定された場合には、ハッシュ化ビットマップに対応する単語IDのビットマップを分割する。一例として、ビットマップ分割部114は、ハッシュ化ビットマップに対応する単語IDのビットマップの偶数番目の位置のビットを抽出する。ビットマップ分割部114は、新たなビットマップの全ビットを「0」に初期化し、初期化後に、抽出された偶数番目の位置のビットを設定する。ビットマップ分割部114は、ハッシュ化ビットマップに対応する単語IDのビットマップの奇数番目の位置のビットを抽出する。ビットマップ分割部114は、新たなビットマップの全ビットを「0」に初期化し、初期化後に、抽出された奇数番目の位置のビットを設定する。そして、ビットマップ分割部114は、複数のハッシュ化ビットマップのどちらか一方に対して、分割履歴フラグに分割したことを示す「1」を設定する。加えて、ビットマップ分割部114は、このハッシュ化ビットマップに対して、分割先を設定し、分割されたビットマップを分割先に格納する。分割されたビットマップの分割先は、例えば、低頻度単語の領域である。
[インデックス生成処理のフローチャート]
図7は、実施例に係るインデックス生成処理のフローチャートの一例を示す図である。
まず、インデックス生成装置100は、ビットマップ型インデックス121を受け取る(ステップS11)。すると、インデックス生成装置100は、受け取ったビットマップ型インデックス121から、次の単語IDに対応するビットマップを読み出す(ステップS12)。
インデックス生成装置100は、読み出したビットマップの各ビットについて、底α、底βをそれぞれ用いてハッシュ化する(ステップS13)。例えば、インデックス生成装置100は、底αのハッシュ化ビットマップについて、単語IDに対応するビットマップの各ビットの位置を底αで割った余りの位置に、各ビットの値を設定する。インデックス生成装置100は、底βのハッシュ化ビットマップについて、単語IDに対応するビットマップの各ビットの位置を底βで割った余りの位置に、各ビットの値を設定する。すなわち、インデックス生成装置100は、単語IDに対応するビットマップの0ビット目からの各ビットを順番にハッシュ化ビットマップの0ビット目から設定し、(底−1)ビット目まで設定したら、再度折り返して0ビット目からOR演算した結果を設定する。
インデックス生成装置100は、ハッシュ化ビットマップのハッシュ化の位置に既に「1」が設定されているか否かを判定する(ステップS14)。なお、かかる判定は、底α、底β毎に行われる。ハッシュ化ビットマップのハッシュ化の位置に「1」が設定されていないと判定した場合には(ステップS14;No)、インデックス生成装置100は、該当底のハッシュ化ビットマップのハッシュ化の位置に「1」を設定する(ステップS15)。そして、インデックス生成装置100は、該当底のハッシュ化ビットマップのビット重複履歴フラグに「0」(非重複)を設定する(ステップS16)。そして、インデックス生成装置100は、次の単語IDを選択すべく、ステップS12に移行する。
一方、ハッシュ化ビットマップのハッシュ化の位置に「1」が既に設定されていると判定した場合には(ステップS14;Yes)、インデックス生成装置100は、ビット重複履歴フラグに既に「1」(重複)が設定されているか否かを判定する(ステップS17)。なお、かかる判定は、底α、底β毎に行われる。ビット重複履歴フラグに「1」(重複)が設定されていないと判定した場合には(ステップS17;No)、インデックス生成装置100は、該当底のハッシュ化ビットマップのビット重複履歴フラグに「1」(重複)を設定する(ステップS18)。そして、インデックス生成装置100は、次の単語IDを選択すべく、ステップS12に移行する。
一方、ビット重複履歴フラグに「1」(重複)が既に設定されていると判定した場合には(ステップS17;Yes)、インデックス生成装置100は、該当底のハッシュ化ビットマップに対応するビットマップの0/1比率を集計する(ステップS19)。インデックス生成装置100は、「1」の比率が閾値より大きいか否かを判定する(ステップS20)。「1」の比率が閾値より大きくないと判定した場合には(ステップS20;No)、インデックス生成装置100は、該当底のハッシュ化ビットマップのビット重複履歴フラグに「0」(非重複)を設定する(ステップS21)。そして、インデックス生成装置100は、次の単語IDを選択すべく、ステップS12に移行する。
一方、「1」の比率が閾値より大きいと判定した場合には(ステップS20;Yes)、インデックス生成装置100は、どちらか一方のハッシュ化ビットマップに対して、以下の情報を設定する。すなわち、インデックス生成装置100は、分割履歴フラグに「1」(分割)を設定し、分割先に低頻度単語の領域を設定する(ステップS22)。
続いて、インデックス生成装置100は、現単語IDに対応するビットマップを分割し、分割したビットマップを分割先が示す領域に格納する(ステップS23)。例えば、インデックス生成装置100は、現単語IDに対応するビットマップの偶数番目の位置のビットを抽出する。インデックス生成装置100は、新たなビットマップの全ビットを「0」に初期化し、初期化後に、抽出された偶数番目の位置のビットを設定する。インデックス生成装置100は、現単語IDに対応するビットマップの奇数番目の位置のビットを抽出する。インデックス生成装置100は、新たなビットマップの全ビットを「0」に初期化し、初期化後に、抽出された奇数番目の位置のビットを設定する。インデックス生成装置100は、分割された新たなビットマップを分割先が示す低頻度単語の領域に格納する。
そして、インデックス生成装置100は、全ての単語IDを選択したか否かを判定する(ステップS24)。全ての単語IDを選択していないと判定した場合には(ステップS24;No)、インデックス生成装置100は、次の単語IDを選択すべく、ステップS12に移行する。
一方、全ての単語IDを選択したと判定した場合には(ステップS24;Yes)、インデックス生成装置100は、生成されたハッシュ化ビットマップを纏めたハッシュ化インデックス122を記憶部120に格納する(ステップS25)。そして、インデックス生成装置100は、インデックス生成処理を終了する。なお、テキストデータの圧縮処理において、インデックス生成が行われる場合は、字句解析により、単語IDとファイルIDが決定されるため、記憶部のビットマップ型インデックスへの出力を省略し、直接、ハッシュ化インデックスを生成することが可能である。
[実施例に係る検索装置の構成]
次に、図8を参照して、実施例に係る検索処理を実行する検索装置200の構成について説明する。図8は、実施例に係る検索装置の構成を示す機能ブロック図である。図8に示すように、検索装置200は、制御部210と記憶部220とを有する。
制御部210は、図5に示した検索処理を実行する処理部である。制御部210は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。そして、制御部210は、例えば、ASICやFPGAなどの集積回路の電子回路に対応する。または、制御部210は、CPUやMPUなどの電子回路に対応する。また、制御部210は、検索キー受付部211、分割先有無判定部212、分割無し復元部213、分割有り復元部214、検索処理部215および検索結果出力部216を有する。
記憶部220は、例えばフラッシュメモリやFRAMなどの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部220は、ハッシュ化インデックス221と復元ビットマップ222、および絞込みビットマップ223を有する。なお、ハッシュ化インデックス221と復元ビットマップの構成は、各単語IDに対応するハッシュ化ビットマップとビットマップの構成(図1Aおよび図1B参照)と同様であるので、その説明を省略する。また、絞込みビットマップ223の構成は、各単語とAND結果に対応するビットマップの構成(図3参照)と同様であるので、その説明を省略する。
検索キー受付部211は、検索キーを受け付ける。例えば、検索キー受付部211は、検索キーとして検索対象の単語および検索対象のファイルIDを受け付ける。
分割先有無判定部212は、検索対象の単語に対応するハッシュ化ビットマップを用いて、分割先の有無を判定する。例えば、分割先有無判定部212は、検索対象の単語が示す単語IDに対する複数のハッシュ化ビットマップをハッシュ化インデックス221から抽出する。分割先有無判定部212は、抽出した複数のハッシュ化ビットマップのうちいずれかのハッシュ化ビットマップに分割先が設定されているか否かを判定する。一例として、分割先有無判定部212は、いずれかのハッシュ化ビットマップの分割履歴フラグに分割したことを示す「1」が設定されているか否かを判定する。分割先有無判定部212は、「1」が設定されていれば、分割先が「有る」と判定する。分割先有無判定部212は、「0」が設定されていれば、分割先が「無い」と判定する。
分割無し復元部213は、分割先有無判定部212によって分割先が「無い」と判定された場合には、検索対象の単語に対応する複数のハッシュ化ビットマップを復元する。
例えば、分割無し復元部213は、複数のハッシュ化ビットマップをそれぞれビットマップに展開する(第1の復元処理)。一例として、分割無し復元部213は、底29のハッシュ化ビットマップの復元先のビットマップについて、底29に整数(0〜)を乗算した値にハッシュ化ビットマップの各ビットの位置を加算した位置に、ハッシュ化ビットマップの各ビットの値を設定する。分割無し復元部213は、底31のハッシュ化ビットマップの復元先のビットマップについて、底31に整数(0〜)を乗算した値にハッシュ化ビットマップの各ビットの位置を加算した位置に、ハッシュ化ビットマップの各ビットの値を設定する。すなわち、分割無し復元部213は、ハッシュ化ビットマップの0ビット目からの各ビットを順番に復元先のビットマップの0ビット目から設定し、(底−1)ビット目まで処理する。そして、分割無し復元部213は、再度折り返してハッシュ化ビットマップの0ビット目からハッシュ化ビットマップの値を設定する。
また、分割無し復元部213は、第1の復元処理で展開されたそれぞれのビットマップの対応する位置のビットをAND演算する(第2の復元処理)。一例として、分割無し復元部213は、底29のハッシュ化ビットマップを展開したビットマップと、底31にハッシュ化ビットマップを展開したビットマップとをAND演算する。そして、分割無し復元部213は、AND結果のビットマップを復元結果として検索処理部215に出力する。
分割有り復元部214は、分割先有無判定部212によって分割先が「有る」と判定された場合には、分割先のハッシュ化ビットマップを復元する。
例えば、分割有り復元部214は、「有る」と判定されたハッシュ化ビットマップの分割先に格納された偶数における複数のハッシュ化ビットマップをそれぞれビットマップに展開する(第1の復元処理)。分割有り復元部214は、第1の復元処理で展開されたそれぞれのビットマップの対応する位置のビットをAND演算し、偶数におけるビットマップを出力する(第2の復元処理)。また、分割有り復元部214は、「有る」と判定されたハッシュ化ビットマップの分割先に格納された奇数における複数のハッシュ化ビットマップをそれぞれビットマップに展開する(第1の復元処理)。分割有り復元部214は、第1の復元処理で展開されたそれぞれのビットマップの対応する位置のビットをAND演算し、奇数におけるビットマップを出力する(第2の復元処理)。なお、第1の復元処理および第2の復元処理は、分割無し復元部213の処理と同様であるので、その説明を省略する。
また、分割有り復元部214は、第2の復元処理で復元された偶数におけるビットマップと第2の復元処理で復元された奇数におけるビットマップとをOR演算する(併合処理)。そして、分割有り復元部214は、OR結果のビットマップを復元結果として検索処理部215に出力する。
検索処理部215は、検索対象の単語に対応するビットマップに基づいて、検索対象のファイルIDに対応する当該単語の存否情報を検索する。例えば、検索処理部215は、復元結果のビットマップの各ビットのうち、検索対象のファイルIDに対するビットの値に基づいて、検索対象の単語の存否情報を検索する。
検索結果出力部216は、検索処理部215によって検索された結果を出力する。例えば、検索結果出力部216は、存否情報が「1」であれば、検索結果として存在する旨を出力する。検索結果出力部216は、存否情報が「0」であれば、検索結果として存在しない旨を出力する。
[検索処理のフローチャート]
図9は、実施例に係る検索処理のフローチャートの一例を示す図である。
まず、検索装置200は、検索する単語およびファイルIDを受け付ける(ステップS31)。検索装置200は、ハッシュ化インデックス221を記憶部220から読み出す(ステップS32)。検索装置200は、読み出したハッシュ化インデックス221から、検索対象の単語が示す単語IDに対応する、底α、底βの各ハッシュ化ビットマップを選択する(ステップS33)。
検索装置200は、どちらか一方のハッシュ化ビットマップに分割先が設定されているか否かを判定する(ステップS34)。どちらか一方のハッシュ化ビットマップに分割先が設定されていないと判定した場合には(ステップS34;No)、検索装置200は、選択されたハッシュ化ビットマップを展開する(ステップS35)。なお、かかる復元処理は、底αおよび底βにおけるハッシュ化ビットマップ毎に行われる。すなわち、検索装置200は、底αのハッシュ化ビットマップについて、第1の復元処理を行う。検索装置200は、底βのハッシュ化ビットマップについて、第1の復元処理を行う。
そして、検索装置200は、底αのビットマップと底βのビットマップとをAND演算する(ステップS36)。すなわち、検索装置200は、第1の復元処理によって復元された底αのビットマップおよび底βのビットマップを用いて、第2の復元処理を行う。そして、検索装置200は、復元後のビットマップについて検索処理をすべく、ステップS42に移行する。
一方、どちらか一方のハッシュ化ビットマップに分割先が設定されていると判定した場合には(ステップS34;Yes)、検索装置200は、分割先に格納されたハッシュ化ビットマップ(偶数)を展開する(ステップS37)。なお、かかる復元処理は、底αおよび底βにおけるハッシュ化ビットマップ(偶数)毎に行われる。すなわち、検索装置200は、底αのハッシュ化ビットマップ(偶数)について、第1の復元処理を行う。検索装置200は、底βのハッシュ化ビットマップ(偶数)について、第1の復元処理を行う。
そして、検索装置200は、底αのビットマップ(偶数)と底βのビットマップ(偶数)とをAND演算する(ステップS38)。すなわち、検索装置200は、第1の復元処理によって復元された底αのビットマップ(偶数)および底βのビットマップ(偶数)を用いて、第2の復元処理を行う。
続いて、検索装置200は、分割先に格納されたハッシュ化ビットマップ(奇数)を展開する(ステップS39)。なお、かかる復元処理は、底αおよび底βにおけるハッシュ化ビットマップ(奇数)毎に行われる。すなわち、検索装置200は、底αのハッシュ化ビットマップ(奇数)について、第1の復元処理を行う。検索装置200は、底βのハッシュ化ビットマップ(奇数)について、第1の復元処理を行う。
そして、検索装置200は、底αのビットマップ(奇数)と底βのビットマップ(奇数)とをAND演算する(ステップS40)。すなわち、検索装置200は、第1の復元処理によって復元された底αのビットマップ(奇数)および底βのビットマップ(奇数)を用いて、第2の復元処理を行う。
そして、検索装置200は、AND演算後のビットマップ(偶数)とビットマップ(奇数)とをOR演算(併合)する(ステップS41)。すなわち、検索装置200は、第2の復元処理によって復元されたビットマップ(偶数)およびビットマップ(奇数)を用いて、併合処理を行う。そして、検索装置200は、復元後のビットマップについて検索処理をすべく、ステップS42に移行する。
ステップS42において、検索装置200は、復元後のビットマップに対して、検索対象のファイルIDに対するビットが「1」であるか否かを判定する(ステップS42)。ビットが「1」でないと判定した場合には(ステップS42;No)、検索装置200は、存在しない旨を示す「NG」を検索結果として出力する(ステップS43)。そして、検索装置200は、検索処理を終了する。
一方、ビットが「1」であると判定した場合には(ステップS42;Yes)、検索装置200は、存在する旨を示す「OK」を検索結果として出力する(ステップS44)。そして、検索装置200は、検索処理を終了する。
[実施例の効果]
上記実施例によれば、インデックス生成装置100は、複数のファイルの少なくともいずれかに含まれる複数の要素それぞれについて、複数のファイルそれぞれに対する存否情報を生成する。そして、インデックス生成装置100は、存否情報より、複数のファイルの軸に対し複数のハッシュ関数を適用した複数ハッシュ化軸を用いたハッシュ化インデックス情報を生成する際に、存否情報では独立であるがハッシュ化インデックス情報では重複する衝突データの検知を行う。インデックス生成装置100は、検知された衝突が特定の条件を満たす場合、衝突データそれぞれに対し複数ハッシュ化軸のいずれか1つに対し追加の値を設定して対応づける。かかる構成によれば、インデックス生成装置100は、ハッシュ化インデックス情報が特定の条件により衝突する場合に、複数ハッシュ化軸のうち1つの軸を拡張することで、衝突を回避できる。
また、上記実施例によれば、インデックス生成装置100は、複数ハッシュ化軸のいずれか1つで連続して衝突が発生した場合に、衝突が発生したハッシュ化軸に対応する要素に対するに対する存否情報を用いて存否の比率を集計する。インデックス生成装置100は、集計した存否の比率のうち存在する率が閾値より大きい場合に、要素に対する存否情報を分割する。インデックス生成装置100は、複数ハッシュ化軸のいずれか1つに対し分割先を設定して対応づける。かかる構成によれば、インデックス生成装置100は、要素に対する存否情報を分割することで、存否情報の軸を拡張することで、ハッシュノイズを軽減することができる。
また、上記実施例によれば、インデックス生成装置100は、ハッシュ化軸の大きさは、レジスタの大きさに合わせたビット数である。かかる構成によれば、インデックス生成装置100は、ハッシュ化軸の大きさをレジスタの大きさに合わせることで、複数ハッシュ化軸の論理演算を高速に行うことができ、ビットマップのハッシュ化を高速に行うことができるとともに、ハッシュ化の復元を高速に行うことができる。
[実施例に関連する他の態様]
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
また、実施例に係るインデックス生成装置100は、32ビットレジスタを想定し、29と31のハッシュ値(底)を基に、各ビットマップをハッシュ化するとして説明した。実施例では、1つのビットマップを44ビットとして説明した。しかしながら、29および31のハッシュ値(底)は、一例であって、これに限定されない。ビットマップのビット数も、一例であって、これに限定されない。2つのハッシュ値(底)は、複数のファイル内のそれぞれの単語の種類の数に応じて決定されれば良い。例えば、単語の種類数が10000であるとすると、一方の底で割った余りと他方の底で割った余りとから表わされる2次元の行列が約10000となるように、2つの底が選択される。2つの底は、隣接した素数であれば良い。選択される2つの素数は、行列の数が10000の場合、一例として、97と101である。つまり、最小公倍数が約10000となる2次元のマトリックス空間の中で、ある単語について一方のハッシュおよび他方のハッシュで求められる余りの組は、他の単語について求められる余りの組と衝突しない(重複しない)であろうという推測に基づくものである。
また、実施例に係るインデックス生成装置100は、隣接した複数のハッシュ値(底)を基に、2次元(単語の軸とファイルの軸)にハッシュ化を適用したハッシュ化インデックスを生成すると説明した。しかしながら、インデックス生成装置100は、ファイルの軸に代えてブロックの軸としても良い。すなわち、単語IDの存否情報は、ブロック単位であるとしても良い。
また、実施例に係るビットマップ型インデックスBIは、2次元で表わされるものとして説明した。すなわち、X軸はファイルIDを表し、Y軸は単語IDを表す。しかしながら、ビットマップ型インデックスBIは、3次元で表わせるものとしても良い。例えば、X軸は1グラム目の単語IDを表し、Y軸は2グラム目の単語IDを表し、Z軸はファイルIDを表す。かかる場合には、インデックス生成装置100は、X軸とZ軸とで表わされる2次元空間に関して、2つのハッシュ値(底)を基に、各ビットマップをハッシュ化すれば良い。加えて、インデックス生成装置100は、Y軸とZ軸とで表わされる2次元空間に関して、2つのハッシュ値(底)を基に、各ビットマップをハッシュ化すれば良い。そして、検索装置200は、2グラムの文字列およびファイルIDの入力を受け付けると、以下のように検索処理を行えば良い。まず、検索装置200は、1グラム目の単語が示す単語IDに対する複数のハッシュ化ビットマップを復元する。検索装置200は、復元結果である1グラム目の単語の単語IDのビットマップの各ビットが示す、複数のファイルそれぞれにおける単語IDが示す単語の存否情報に基づいて、受け付けたファイルIDに対応する当該単語IDが示す単語の存否情報を検索する。次に、検索装置200は、2グラム目の単語が示す単語IDに対する複数のハッシュ化ビットマップを復元する。検索装置200は、復元結果である2グラム目の単語の単語IDのビットマップの各ビットが示す、複数のファイルそれぞれにおける単語IDが示す単語の存否情報に基づいて、受け付けたファイルIDに対応する当該単語IDが示す単語の存否情報を検索する。そして、検索装置200は、検索された、1グラム目の単語の存否情報と2グラム目の単語の存否情報とをAND演算して、2グラムの文字列の存否情報を検索する。
また、実施例に係る情報処理装置100は、圧縮辞書に対応するツリー構造としてケヤキ木を生成すると説明した。しかしながら、情報処理装置100は、これに限定されず、圧縮辞書に対応するツリー構造としてハフマン木を生成するものとしても良い。すなわち、情報処理装置100は、属性毎の単語を、それぞれ圧縮辞書に対応するハフマン木を構成する葉に割り当て、それぞれの葉に、対応する単語の圧縮符号、属性および単語へのポインタを設定すれば良い。そして、情報処理装置100は、生成されたハフマン木を用いて、圧縮状態のソースコードの内部コード化を行ない、内部コードを用いて、構文解析およびインタープリタの実行を行えば良い。
また、実施例に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
[情報処理装置のハードウェア構成]
実施例のインデックス生成装置100および検索装置200を含む情報処理装置のハードウェア構成を、図10を参照して説明する。図10は、実施例に係る情報処理装置のハードウェア構成を示す図である。図10の例が示すように、コンピュータ400は、各種演算処理を実行するCPU401と、ユーザからのデータ入力を受け付ける入力装置402と、モニタ403とを有する。また、コンピュータ400は、記憶媒体からプログラム等を読み取る媒体読取装置404と、他の装置と接続するためのインターフェース装置405と、他の装置と無線により接続するための無線通信装置406とを有する。また、コンピュータ400は、各種情報を一時記憶するRAM407と、ハードディスク装置408とを有する。また、各装置401〜408は、バス409に接続される。
ハードディスク装置408には、例えば図6に示したハッシュ化部111、重複判定部112、0/1比率集計部113およびビットマップ分割部114の各処理部と同様の機能を有するインデックス生成プログラムが記憶される。また、ハードディスク装置408には、インデックス生成プログラムを実現するための各種データが記憶される。ハードディスク装置408には、例えば図8に示した分割先有無判定部212、分割無し復元部213、分割有り復元部214および検索処理部215の各処理部と同様の機能を有する検索プログラムが記憶される。また、ハードディスク装置408には、検索プログラムを実現するための各種データが記憶される。
CPU401は、ハードディスク装置408に記憶された各プログラムを読み出して、RAM407に展開して実行することで各種の処理を行う。これらのプログラムは、コンピュータ400を、例えば図6に示したハッシュ化部111、重複判定部112、0/1比率集計部113およびビットマップ分割部114として機能させることができる。これらのプログラムは、コンピュータ400を、例えば図8に示した分割先有無判定部212、分割無し復元部213、分割有り復元部214および検索処理部215として機能させることができる。
なお、上記のインデックス生成プログラムおよび検索プログラムは、必ずしもハードディスク装置408に記憶されている必要はない。例えば、コンピュータ400が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ400が読み出して実行するようにしてもよい。コンピュータ400が読み取り可能な記憶媒体は、例えば、CD−ROMやDVDディスク、USB(Universal Serial Bus)メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、LAN(Local Area Network)等に接続された装置にプログラムを記憶させておき、コンピュータ400がこれらからプログラムを読み出して実行するようにしてもよい。
図11は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ400において、図11に示すハードウェア群26(401〜409)の制御を行なうOS(オペレーティング・システム)27が動作する。OS27に従った手順でCPU401が動作して、ハードウェア群26の制御・管理が行なわれることにより、アプリケーションプログラム29やミドルウェア28に従った処理がハードウェア群26で実行される。さらに、コンピュータ400において、ミドルウェア28またはアプリケーションプログラム29が、RAM407に読み出されてCPU401により実行される。
例えば、CPU401によりインデックス生成命令を受け付けた場合、ミドルウェア28またはアプリケーションプログラム29の少なくとも一部に基づく処理を行なうことで、(それらの処理をOS27に基づいてハードウェア群26を制御して)制御部110のインデックス生成機能が実現される。インデックス生成機能は、それぞれアプリケーションプログラム29自体に含まれてもよいし、アプリケーションプログラム29に従って呼び出されることで実行されるミドルウェア28の一部であってもよい。CPU401により検索キーを受け付けた場合、ミドルウェア28またはアプリケーションプログラム29の少なくとも一部に基づく処理を行なうことで、(それらの処理をOS27に基づいてハードウェア群26を制御して)制御部210の検索機能が実現される。検索機能は、それぞれアプリケーションプログラム29自体に含まれてもよいし、アプリケーションプログラム29に従って呼び出されることで実行されるミドルウェア28の一部であってもよい。