JP6551131B2 - インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法 - Google Patents

インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法 Download PDF

Info

Publication number
JP6551131B2
JP6551131B2 JP2015201547A JP2015201547A JP6551131B2 JP 6551131 B2 JP6551131 B2 JP 6551131B2 JP 2015201547 A JP2015201547 A JP 2015201547A JP 2015201547 A JP2015201547 A JP 2015201547A JP 6551131 B2 JP6551131 B2 JP 6551131B2
Authority
JP
Japan
Prior art keywords
hashed
bitmap
index
bit
word
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015201547A
Other languages
English (en)
Other versions
JP2017073093A (ja
Inventor
片岡 正弘
正弘 片岡
孝宏 村田
孝宏 村田
貴文 大田
貴文 大田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015201547A priority Critical patent/JP6551131B2/ja
Priority to US15/287,257 priority patent/US10324963B2/en
Publication of JP2017073093A publication Critical patent/JP2017073093A/ja
Application granted granted Critical
Publication of JP6551131B2 publication Critical patent/JP6551131B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/325Hash tables

Description

本発明は、インデックス生成プログラムなどに関する。
テキストデータの検索を高速化するために、テキストデータに含まれる文字ごとの、ファイルごとの存否をインデックス化した、ビットマップ型インデックスが知られている(例えば、特許文献1−3参照)。
日本語のテキストデータについて、ビットマップ型インデックスを生成する場合、テキストデータに使用されている文字や単語の種類が非常に多いため、インデックスのサイズが大きくなる。加えて、インデックスの密度が低くなるため、ハッシュ関数を用いたサイズ縮小が行われる。
従来の技術の一例では、複数の底によるハッシュ関数を適用し、ハッシュ化ビットマップを作成した結果、衝突(コンフリクト)が最小となるハッシュ関数を決定することが開示されている。また、決定したハッシュ関数および当該ハッシュ関数に基づくハッシュ化ビットマップを用いて、当該ハッシュ関数の評価値によって番地付けされたハッシュ化ビットマップ上の番地の内容が既にセットされているか否かをチェックすることが開示されている(例えば、特許文献1参照)。
特許第2753228号公報 特許第3263963号公報 特開2012−216088号公報
しかしながら、テキストデータのビットマップ型インデックスにおいて、ほとんどのファイルに対応したビットが「1」となる行が存在することがあるため、ハッシュ関数を適用した場合に、衝突が起こり得るという問題がある。例えば、英文の「the」や「on」のような高頻度の単語では、ほとんどのファイルについて、ビットマップ型インデックスのビットが「1」になる行が存在するため、ハッシュ関数を適用した場合に、衝突が起こり得る。
従来の技術では、ハッシュ関数の出力値が衝突するか否か、予測できない場合については、対処がなされていない。一方、衝突が予測できる場合は、衝突が生じないようにハッシュ関数の対象から外す等の対処が行われており、不統一であった。従来の技術の一例でも、衝突が最小となるハッシュ関数を選択することで、衝突が生じた場合の対処を減らしているに過ぎない。実際に衝突が生じた場合には、正しいビットマップを復元することができず、インデックスの精度が低下し、検索速度が遅くなる。
1つの側面では、ビットマップ型インデックスをハッシュ化する際に、ビットの衝突を回避することを目的とする。
第1の案では、インデックス生成プログラムは、コンピュータに、複数のテキストデータの少なくともいずれかに含まれる複数の要素それぞれについて、前記複数のテキストデータそれぞれに対する存否情報を生成し、前記存否情報より、前記複数のテキストデータの軸に対し複数のハッシュ関数を適用した複数ハッシュ化軸を用いたハッシュ化インデックス情報を生成する際に、前記存否情報では独立であるが前記ハッシュ化インデックス情報では重複する衝突データの検知を行い、前記検知された衝突が特定の条件を満たす場合、衝突データそれぞれに対し前記複数ハッシュ化軸のいずれか1つに対し追加の値を設定して対応づける処理を実行させる。
1つの態様によれば、ビットマップ型インデックスをハッシュ化する際に、衝突による精度の低下を回避することができる。
図1Aは、実施例に係るハッシュ化インデックス生成処理の一例を示す図(1)である。 図1Bは、実施例に係るハッシュ化インデックス生成処理の一例を示す図(2)である。 図2は、ハッシュノイズの説明をする図である。 図3Aは、実施例に係るビットマップ型インデックスの一例を示す図である。 図3Bは、実施例に係るビットマップ型インデックスの別の例を示す図である。 図4Aは、実施例に係るハッシュ化ビットマップ復元処理の一例を示す図(1)である。 図4Bは、実施例に係るハッシュ化ビットマップ復元処理の一例を示す図(2)である。 図5は、実施例に係る検索処理の一例を示す図である。 図6は、実施例に係るインデックス生成装置の構成を示す機能ブロック図である。 図7は、実施例に係るインデックス生成処理のフローチャートの一例を示す図である。 図8は、実施例に係る検索装置の構成を示す機能ブロック図である。 図9は、実施例に係る検索処理のフローチャートの一例を示す図である。 図10は、実施例に係る情報処理装置のハードウェア構成を示す図である。 図11は、コンピュータで動作するプログラムの構成例を示す図である。
以下に、本願の開示するインデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
[実施例に係るハッシュ化インデックス生成の一例]
図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「A001」に対する複数のハッシュ化ビットマップh41,h42をハッシュ化インデックスHIから抽出する。
検索装置は、抽出した単語IDに対する複数のハッシュ化ビットマップを復元する。複数のハッシュ化ビットマップの復元処理は、図4Aおよび図4Bに示した処理である。復元結果は、単語IDに対応するビットマップで表わされる。ここでは、検索装置は、単語ID「A001」に対する複数のハッシュ化ビットマップ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の一部であってもよい。
100 インデックス生成装置
110 制御部
111 ハッシュ化部
112 重複判定部
113 0/1比率集計部
114 ビットマップ分割部
120 記憶部
121 ビットマップ型インデックス
122 ハッシュ化インデックス
200 検索装置
210 制御部
211 検索キー受付部
212 分割先有無判定部
213 分割無し復元部
214 分割有り復元部
215 検索処理部
216 検索結果出力部
220 記憶部
221 ハッシュ化インデックス

Claims (11)

  1. コンピュータに、
    複数のテキストデータの少なくともいずれかに含まれる複数の要素それぞれについて、前記複数のテキストデータそれぞれに対する存否情報を生成し、
    前記存否情報より、前記複数のテキストデータの軸に対し複数のハッシュ関数を適用した複数ハッシュ化軸を用いたハッシュ化インデックス情報を生成する際に、前記存否情報では独立であるが前記ハッシュ化インデックス情報では重複する衝突データの検知を行い、
    前記検知された衝突が特定の条件を満たす場合、衝突データそれぞれに対し前記複数ハッシュ化軸のいずれか1つに対し追加の値を設定して対応づける
    処理を実行させることを特徴とするインデックス生成プログラム。
  2. 前記対応づける処理は、前記複数ハッシュ化軸のいずれか1つで連続して衝突が発生した場合に、前記衝突が発生したハッシュ化軸に対応する前記要素に対する存否情報を用いて存否の比率を集計し、集計した存否の比率のうち存在する率が閾値より大きい場合に、前記要素に対する存否情報を分割し、前記複数ハッシュ化軸のいずれか1つに対し分割先を設定して対応づける
    処理を実行させることを特徴とする請求項1に記載のインデックス生成プログラム。
  3. 前記要素に対する存否情報が分割された場合の前記分割先を、前記要素の低頻度単語の領域とする
    ことを特徴とする請求項2に記載のインデックス生成プログラム。
  4. 前記ハッシュ化軸の大きさは、レジスタの大きさに合わせたビット数である
    ことを特徴とする請求項1または請求項2に記載のインデックス生成プログラム。
  5. 前記複数の要素の単位は、単語単位である
    ことを特徴とする請求項1に記載のインデックス生成プログラム。
  6. 前記複数の要素の単位は、Nグラム(Nは2以上)の文字単位である
    ことを特徴とする請求項1に記載のインデックス生成プログラム。
  7. コンピュータが、
    複数のテキストデータの少なくともいずれかに含まれる複数の要素それぞれについて、前記複数のテキストデータそれぞれに対する存否情報を生成し、
    前記存否情報より、前記複数のテキストデータの軸に対し複数のハッシュ関数を適用した複数ハッシュ化軸を用いたハッシュ化インデックス情報を生成する際に、前記存否情報では独立であるが前記ハッシュ化インデックス情報では重複する衝突データの検知を行い、
    前記検知された衝突が特定の条件を満たす場合、衝突データそれぞれに対し前記複数ハッシュ化軸のいずれか1つに対し追加の値を設定して対応づける
    各処理を実行することを特徴とするインデックス生成方法。
  8. 複数のテキストデータの少なくともいずれかに含まれる複数の要素それぞれについて、前記複数のテキストデータそれぞれに対する存否情報を生成する生成部と、
    前記生成部によって生成された存否情報より、前記複数のテキストデータの軸に対し複数のハッシュ関数を適用した複数ハッシュ化軸を用いたハッシュ化インデックス情報を生成する際に、前記存否情報では独立であるが前記ハッシュ化インデックス情報では重複する衝突データの検知を行う検知部と、
    前記検知部によって検知された衝突が特定の条件を満たす場合、衝突データそれぞれに対し前記複数ハッシュ化軸のいずれか1つに対し追加の値を設定して対応づける設定部と、
    を有することを特徴とするインデックス生成装置。
  9. コンピュータに、
    2以上の文字より構成される要素およびテキストデータの識別情報を受け付けると、受け付けた要素に対する複数ハッシュ化軸をそれぞれ復元し、
    前記それぞれ復元されたビット列の各ビットが示す、複数のテキストデータそれぞれにおける前記要素の存否情報に基づいて、前記受け付けたテキストデータの識別情報に対応する前記要素の存否情報を検索する
    処理を実行させることを特徴とする検索プログラム。
  10. コンピュータが、
    2以上の文字より構成される要素およびテキストデータの識別情報を受け付けると、受け付けた要素に対する複数ハッシュ化軸をそれぞれ復元し、
    前記それぞれ復元されたビット列の各ビットが示す、複数のテキストデータそれぞれにおける前記要素の存否情報に基づいて、前記受け付けたテキストデータの識別情報に対応する前記要素の存否情報を検索する
    各処理を実行することを特徴とする検索方法。
  11. 2以上の文字より構成される要素およびテキストデータの識別情報を受け付けると、受け付けた要素に対する複数ハッシュ化軸をそれぞれ復元する復元部と、
    前記復元部によってそれぞれ復元されたビット列の各ビットが示す、複数のテキストデータそれぞれにおける前記要素の存否情報に基づいて、前記受け付けたテキストデータの識別情報に対応する前記要素の存否情報を検索する検索部と、
    を有することを特徴とする検索装置。
JP2015201547A 2015-10-09 2015-10-09 インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法 Active JP6551131B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015201547A JP6551131B2 (ja) 2015-10-09 2015-10-09 インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法
US15/287,257 US10324963B2 (en) 2015-10-09 2016-10-06 Index creating device, index creating method, search device, search method, and computer-readable recording medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015201547A JP6551131B2 (ja) 2015-10-09 2015-10-09 インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法

Publications (2)

Publication Number Publication Date
JP2017073093A JP2017073093A (ja) 2017-04-13
JP6551131B2 true JP6551131B2 (ja) 2019-07-31

Family

ID=58499579

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015201547A Active JP6551131B2 (ja) 2015-10-09 2015-10-09 インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法

Country Status (2)

Country Link
US (1) US10324963B2 (ja)
JP (1) JP6551131B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10263638B2 (en) * 2016-05-31 2019-04-16 Texas Instruments Incorporated Lossless compression method for graph traversal
JP6805720B2 (ja) 2016-10-21 2020-12-23 富士通株式会社 データ検索プログラム、データ検索装置およびデータ検索方法
JP7059516B2 (ja) * 2017-03-29 2022-04-26 富士通株式会社 符号化プログラム、符号化装置および符号化方法
JP6972653B2 (ja) * 2017-05-16 2021-11-24 富士通株式会社 解析プログラム、解析方法および解析装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2753228B2 (ja) 1987-04-30 1998-05-18 株式会社日立製作所 データ処理装置
JP3263963B2 (ja) 1991-12-25 2002-03-11 株式会社日立製作所 文書検索方法及び装置
US5748953A (en) 1989-06-14 1998-05-05 Hitachi, Ltd. Document search method wherein stored documents and search queries comprise segmented text data of spaced, nonconsecutive text elements and words segmented by predetermined symbols
JPH08278894A (ja) * 1995-04-06 1996-10-22 Hitachi Ltd ハッシュ法による情報処理方法および情報処理装置
JP3303881B2 (ja) * 2001-03-08 2002-07-22 株式会社日立製作所 文書検索方法および装置
JP5605288B2 (ja) 2011-03-31 2014-10-15 富士通株式会社 出現マップ生成方法、ファイル抽出方法、出現マップ生成プログラム、ファイル抽出プログラム、出現マップ生成装置、およびファイル抽出装置
US10007615B1 (en) * 2015-05-01 2018-06-26 Marvell International Ltd. Methods and apparatus for performing fast caching

Also Published As

Publication number Publication date
US20170103123A1 (en) 2017-04-13
US10324963B2 (en) 2019-06-18
JP2017073093A (ja) 2017-04-13

Similar Documents

Publication Publication Date Title
CN107305586B (zh) 索引生成方法、索引生成装置及搜索方法
US9075842B2 (en) Scalable deduplication system with small blocks
JP6551131B2 (ja) インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法
US9882582B2 (en) Non-transitory computer-readable recording medium, encoding method, encoding device, decoding method, and decoding device
JP6662169B2 (ja) 符号化プログラム、符号化方法、符号化装置、検索プログラム、検索方法および検索装置
US11080398B2 (en) Identifying signatures for data sets
US11182341B2 (en) Recording medium recording indexed data generation program, indexed data generation method and retrieval method
KR101842420B1 (ko) 정보 처리 장치 및 데이터 관리 방법
JP2013149061A (ja) 文書類似性評価システム、文書類似性評価方法およびコンピュータ・プログラム
US10997139B2 (en) Search apparatus and search method
KR102110523B1 (ko) 문서 분석 기반 주요 요소 추출 시스템 및 방법
US20190294637A1 (en) Similar data search device, similar data search method, and recording medium
JP2016143988A (ja) 符号化プログラム、符号化方法および符号化装置
US20220245097A1 (en) Hashing with differing hash size and compression size
US10747725B2 (en) Compressing method, compressing apparatus, and computer-readable recording medium
US20190109605A1 (en) Data processing device, data processing method, and computer readable medium
US20240086438A1 (en) Non-transitory computer-readable recording medium storing information processing program, information processing method, and information processing apparatus
US20220245112A1 (en) Hashing a data set with multiple hash engines
US20170206202A1 (en) Proximity of data terms based on walsh-hadamard transforms
JP2015018497A (ja) 多次元範囲検索装置及び多次元範囲検索方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180608

TRDD Decision of grant or rejection written
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190529

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20190604

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190617

R150 Certificate of patent or registration of utility model

Ref document number: 6551131

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150