以下に、本願の開示するインデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
[実施例1に係るビットマップ型インデックス生成処理の一例]
図1は、実施例1に係るビットマップ型インデックスの生成処理の流れの一例を示す図である。図1に示すように、テキストデータF1は、10進数の数値を含む文書である。ビットマップ型インデックス生成処理は、数値が持つ有効桁数、位の数字などの複数の属性について、それぞれの値域を一纏めにして、テキストデータF1に出現する数値の出現位置に対応付けたビットマップ型インデックスBIを生成する。なお、以降では、ビットマップ型インデックス生成処理を「インデックス生成処理」というものとする。
このビットマップ型インデックスBIは、数値の有効桁数および数値の位などの複数の属性について、それぞれの値域を一纏めにしたビットマップ群である。すなわち、ビットマップ型インデックスBIは、対象のテキストデータF1に出現する数値がいずれかに割り当てられる複数の値域それぞれについて、数値が出現する出現位置に対応付けたビットマップのインデックス情報のことをいう。そして、出現位置に出現する数値は、出現位置に対応する複数の値域それぞれのビットを纏めたビットマップで表すことができる。
例えば、インデックス生成装置は、テキストデータF1を記憶領域から読み出し、読み出したテキストデータF1に対して字句解析を行う。ここでいう字句解析とは、テキストデータF1を単語、文字および数値に分割することをいう。
インデックス生成装置は、字句解析された数値を順次取得する。
インデックス生成装置は、取得した数値について、有効桁数および位ごとの数字を取得する。インデックス生成装置は、有効桁数の値域を一纏めにしたビットマップ群のうち、数値の有効桁数に対応するビットマップを選択する。インデックス生成装置は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに出現ビットを設定する。出現ビットは、例えば、2進数の「1」で表わされる。インデックス生成装置は、n位の値域を一纏めにしたビットマップ群のうち、数値の第n位の数字に対応するビットマップを選択する。インデックス生成装置は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに出現ビットを設定する。
図1に示すように、数値が「d1d2」であるとする。なお、d1d2は、有効桁数が2である10進数である。インデックス生成装置は、数値の有桁桁数として「2」を取得する。インデックス生成装置は、第1位の数字として「d1」、第2位の数字として「d2」を取得する。
インデックス生成装置は、有効桁数の値域を一纏めにしたビットマップ群のうち数値の有効桁数「2」に対応するビットマップを選択する。そして、インデックス生成装置は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに「1」を設定する。また、インデックス生成装置は、第1位の値域を一纏めにしたビットマップ群のうち数値の第1位の数字「d1」に対応するビットマップを選択する。そして、インデックス生成装置は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに「1」を設定する。また、インデックス生成装置は、第2位の値域を一纏めにしたビットマップ群のうち数値の第2位の数字「d2」に対応するビットマップを選択する。そして、インデックス生成装置は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに「1」を設定する。
[ビットマップ型インデックスの一例]
次に、実施例1に係るビットマップ型インデックスBIの一例を、図2を参照して説明する。図2は、実施例1に係るビットマップ型インデックスの一例を示す図である。図2に示すように、ビットマップ型インデックスBIは、X軸をオフセット(出現位置)として、Y軸を数値とする。ビットマップ型インデックスBIは、数値の有効桁数の値域、数値の第n位の値域ごとにビットマップ群を対応付ける。nは、有効桁数の最大値と同じ数値である。ここでは、nは、一例として、5以上の自然数である。
X軸のオフセット(出現位置)は、テキストデータF1内の出現位置を示す。テキストデータF1は、単一のファイルのデータであっても良いし、複数のファイルのデータであっても良い。テキストデータF1は、単一のブロックのデータであっても良いし、複数のブロックのデータであっても良い。そして、オフセットごとにビットマップが割り当てられる。
Y軸の数値は、有効桁数と第n位の数字とから表わすことができる。有効桁数とは、数値に対応する有効桁数を示す。有効桁数の値域は、1〜nである。第1位とは、数値の最上位の値域を示す。第1位の値域は、0〜9である。第2位とは、数値の2番目の値域を示す。第2位の値域は、0〜9である。第3位とは、数値の3番目の値域を示す。第3位の値域は、0〜9である。第4位とは、数値の4番目の値域を示す。第4位の値域は、0〜9である。第n位とは、数値のn番目の値域を示す。第n位の値域は、0〜9である。
そして、有効桁数の値域に含まれる値ごとにビットマップが割り当てられる。第1位の値域に含まれる値(数字)ごとにビットマップが割り当てられる。第2位の値域に含まれる値(数字)ごとにビットマップが割り当てられる。第3位の値域に含まれる値(数字)ごとにビットマップが割り当てられる。第4位の値域に含まれる値(数字)ごとにビットマップが割り当てられる。第n位の値域に含まれる値(数字)ごとにビットマップが割り当てられる。
例えば、ビットマップ型インデックスBIの6列目は、数値「83」のオフセット「6」のビットマップである。有効桁数として「2」のビット位置に「1」が設定されている。第1位の数字として「8」のビット位置に「1」が設定されている。第2位の数字として「3」のビット位置に「1」が設定されている。
また、ビットマップ型インデックスBIの90列目は、数値「2167」のオフセット「90」のビットマップである。有効桁数として「4」のビット位置に「1」が設定されている。第1位の数字として「2」のビット位置に「1」が設定されている。第2位の数字として「1」のビット位置に「1」が設定されている。第3位の数字として「6」のビット位置に「1」が設定されている。第4位の数字として「7」のビット位置に「1」が設定されている。
このようにして、インデックス生成装置は、有効桁数および複数の値域それぞれについて、数値が出現する出現位置に対応付けたビットマップのインデックス情報であるビットマップ型インデックスBIを生成する。
[数値検索処理の一例]
図3は、実施例1に係る数値検索処理の流れの一例を示す図である。図3に示すように、数値検索処理は、数値検索や数値の範囲検索の検索クエリである条件に応じて数値の属性に対応した値域を分割し、それぞれの属性のビットマップを組合せて絞り込みを行う。すなわち、数値検索処理は、数値検索の条件を受け付け、受け付けた数値検索の条件を、数値が持つ複数の属性に対応付けた複数の値域を用いた条件に変換する。そして、数値検索処理は、変換した条件を、ビットマップ型インデックスBIの複数の値域それぞれを用いて検索する。
例えば、検索装置は、数値検索の条件を受け付ける。検索装置は、受け付けた条件の数値について、有効桁数および位ごとの数字を取得する。そして、検索装置は、受け付けた数値検索の条件を、取得した有効桁数および取得した位ごとの数字を用いた条件に変換する。
検索装置は、変換した条件に含まれる有効桁数に対応するビットマップにより、検索する数値の出現位置を絞り込む。一例として、検索装置は、有効桁数の値域から、変換した条件に含まれる有効桁数を特定する。検索装置は、ビットマップ型インデックスBIから、特定した有効桁数に対応するビットマップを取得する。この結果、検索装置は、有効桁数に合致する出現位置を絞り込むことができる。
次に、検索装置は、さらに、変換した条件に含まれる第1位の数字に対応するビットマップにより、検索する数値の出現位置を絞り込む。一例として、検索装置は、第1位の値域から、変換した条件に含まれる第1位の数字を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第1位の数字に対応するビットマップを取得する。そして、検索装置は、直前の有効桁数の絞り込み結果と今回の第1位の数字の絞り込み結果とをAND演算する。この結果、検索装置は、有効桁数と第1位の数字とに合致する出現位置を絞り込むことができる。
次に、検索装置は、さらに、変換した条件に未処理の位が存在する場合には、未処理の位が存在しなくなるまで、未処理の位の数字に対応するビットマップにより、検索する数値の出現位置を絞り込む。一例として、検索装置は、変換した条件から未処理の位を選択する。検索装置は、選択した位の値域から、選択した位の数字を特定する。検索装置は、ビットマップ型インデックスBIから、特定した位の数字に対応するビットマップを取得する。そして、検索装置は、直前の位の数字の絞り込み結果と今回の位の数字の絞り込み結果とをAND演算する。この結果、検索装置は、有効桁数と複数の位の数字とに合致する出現位置を絞り込むことができる。
図3に示すように、数値検索の条件が示す検索対象が「2167」であるとする。なお、「2167」は、有効桁数が4である10進数である。検索装置は、検索対象の数値について、有効桁数として「4」を取得する。検索装置は、検索対象の数値について、第1位の数字として「2」、第2位の数字として「1」、第3位の数字として「6」、第4位の数字として「7」を取得する。そして、検索装置は、検索対象の条件を、有効桁数「4」、第1位の数字「2」、第2位の数字「1」、第3位の数字「6」および第4位の数字「7」を用いた条件に変換する。
検索装置は、有効桁数の値域から、変換した条件に含まれる有効桁数「4」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した有効桁数「4」に対応するビットマップを取得する。この結果、検索装置は、有効桁数「4」に合致する出現位置を絞り込むことができる。
検索装置は、第1位の値域から、変換した条件に含まれる第1位の数字「2」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第1位の数字「2」に対応するビットマップを取得する。そして、検索装置は、直前の有効桁数「4」の絞り込み結果と今回の第1位の数字「2」の絞り込み結果とをAND演算する。この結果、検索装置は、有効桁数「4」と第1位の数字「2」とに合致する出現位置を絞り込むことができる。
検索装置は、第2位の値域から、変換した条件に含まれる第2位の数字「1」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第2位の数字「1」に対応するビットマップを取得する。そして、検索装置は、直前の第1位の数字「2」の絞り込み結果と今回の第2位の数字「1」の絞り込み結果とをAND演算する。この結果、検索装置は、有効桁数「4」と第1位の数字「2」と第2位の数字「1」とに合致する出現位置を絞り込むことができる。
検索装置は、第3位の値域から、変換した条件に含まれる第3位の数字「6」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第3位の数字「6」に対応するビットマップを取得する。そして、検索装置は、直前の第2位の数字「1」の絞り込み結果と今回の第3位の数字「6」の絞り込み結果とをAND演算する。この結果、検索装置は、有効桁数「4」と第1位の数字「2」と第2位の数字「1」と第3位の数字「6」とに合致する出現位置を絞り込むことができる。
検索装置は、第4位の値域から、変換した条件に含まれる第4位の数字「7」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第4位の数字「7」に対応するビットマップを取得する。そして、検索装置は、直前の第3位の数字「6」の絞り込み結果と今回の第4位の数字「7」の絞り込み結果とをAND演算する。この結果、検索装置は、有効桁数「4」と第1位の数字「2」と第2位の数字「1」と第3位の数字「6」と第4位の数字「7」とに合致する出現位置を絞り込むことができる。
この結果、検索装置は、有効桁数「4」と第1位の数字「2」と第2位の数字「1」と第3位の数字「6」と第4位の数字「7」とに合致する出現位置xを絞り込むことができる。すなわち、検索装置は、数値検索の条件が示す検索対象が「2167」の出現位置を「x」として検索する。
このようにして、検索装置は、検索対象の数値の各位の数字に対応するビットマップを用いて、検索対象の数値の出現位置を検索する。この結果、数値検索処理は、実データであるテキストデータF1を参照しないで、数値を検索することで、数値検索を高速化することができる。
[範囲検索処理の一例]
図4は、実施例1に係る範囲検索処理の一例を示す図である。図4に示すように、範囲検索処理は、数値の範囲検索の条件を受け付け、受け付けた範囲検索の条件を有効桁数ごとの条件に分割する。
例えば、数値の範囲検索の条件が示す検索対象が「83〜2167」であるとする。なお、下限の「83」は、有効桁数が2である10進数である。上限の「2167」は、有効桁数が4である10進数である。範囲検索処理は、検索対象の条件を、有効桁数が2である場合の検索範囲の条件「83〜99」と、有効桁数が3である場合の検索範囲の条件「100〜999」と、有効桁数が4である場合の検索範囲の条件「1000〜2167」とに分割する。
図5A〜図5Eは、実施例1に係る範囲検索処理の流れの一例を示す図である。図5A〜図5Eでは、数値の範囲検索の条件が示す検索対象が「83〜2167」であるとする。図5Aでは、有効桁数が2である場合の条件「83〜99」の範囲検索処理を説明する図である。図5Bでは、有効桁数が3である場合の条件「100〜999」の範囲検索処理を説明する図である。図5C〜図5Eでは、有効桁数が4である場合の条件「1000〜2167」の範囲検索処理を説明する図である。図5A〜図5Eに示すように、範囲検索処理は、下限の数値の有効桁数における検索範囲の条件を、検索範囲内の数値を用いて、数値が持つ複数の属性それぞれの値域に対応した条件に変換する。そして、数値検索処理は、変換した条件を、ビットマップ型インデックスBIの複数の値域それぞれを用いて検索する。加えて、範囲検索処理は、範囲検索の条件に含まれる上限の数値と下限の数値とを用いて、下限の数値の有効桁数と上限の数値の有効桁数との間の中間の有効桁数があれば、有効桁数の値域に対応した条件を追加する。そして、数値検索処理は、追加した条件を、ビットマップ型インデックスBIの有効桁数の値域を用いて検索する。加えて、範囲検索処理は、上限の数値の有効桁数における検索範囲の条件を、検索範囲内の数値を用いて、数値が持つ複数の属性それぞれの複数の値域に対応した条件に変換する。そして、数値検索処理は、変換した条件を、ビットマップ型インデックスBIの複数の値域それぞれを用いて検索する。
図5Aに示すように、有効桁数が2である場合の条件「83〜99」の範囲検索処理は、「83〜89」および「90〜99」により行われる。
有効桁数が2である場合の検索範囲「83〜89」の範囲検索処理は、以下のように行われる。範囲検索処理を行う検索装置は、検索範囲の下限の数値「83」について、有効桁数として「2」を取得する。検索装置は、検索範囲の数値について、第1位の数字として「8」を取得する。検索装置は、検索範囲の数値について、第2位の数字として、「3〜9」を取得する。
検索装置は、有効桁数の値域から、有効桁数「2」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した有効桁数「2」に対応するビットマップを取得する。この結果、検索装置は、有効桁数「2」に合致する出現位置を絞り込むことができる。
検索装置は、第1位の値域から、第1位の数字「8」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第1位の数字「8」に対応するビットマップを取得する。そして、検索装置は、直前の有効桁数「2」の絞り込み結果と今回の第1位の数字「8」の絞り込み結果とをAND演算する。この結果、検索装置は、有効桁数「2」と第1位の数字「8」とに合致する出現位置を絞り込むことができる。
検索装置は、第2位の値域から、第2位の数字「3」〜「9」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第2位の数字「3」〜「9」に対応するビットマップを取得する。そして、検索装置は、取得した数字「3」〜「9」に対応するそれぞれのビットマップをOR演算する。そして、検索装置は、直前の第1位の数字「8」の絞り込み結果と今回の第2位の数字「3」〜「9」の演算結果とをAND演算する。この結果、検索装置は、有効桁数「2」と第1位の数字「8」と第2位の数字「3」〜「9」とに合致する出現位置を絞り込むことができる。この絞り込み結果が検索範囲「83〜89」の絞り込み結果であり、ここでは、A1とする。
次に、有効桁数が2である場合の検索範囲「90〜99」の範囲検索処理は、以下のように行われる。検索装置は、検索範囲の数値について、第1位の数字として「9」を取得する。
検索装置は、第1位の値域から、第1位の数字「9」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第1位の数字「9」に対応するビットマップを取得する。そして、検索装置は、既に取得された有効桁数「2」のビットマップと今回取得された第1位の数字「9」のビットマップとをAND演算する。この結果、検索装置は、有効桁数「2」と第1位の数字「9」とに合致する出現位置を絞り込むことができる。この絞り込み結果が検索範囲「90〜99」の絞り込み結果であり、ここでは、A2とする。
図5Bに示すように、有効桁数が3である場合の条件「100〜999」の範囲検索処理は、以下のように行われる。検索装置は、検索範囲の数値について、有効桁数として「3」を取得する。検索装置は、有効桁数の値域から、有効桁数「3」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した有効桁数「3」に対応するビットマップを取得する。この結果、検索装置は、有効桁数「3」に合致する出現位置を絞り込むことができる。この絞り込み結果が検索範囲「100〜999」の絞り込み結果であり、ここでは、A3とする。
図5C〜図5Eに示すように、有効桁数が4である場合の条件「1000〜2167」の範囲検索処理は、「1000〜1999」、「2000〜2099」、「2100〜2159」および「2160〜2167」により行われる。
図5Cに示すように、有効桁数が4である場合の検索範囲「1000〜1999」の範囲検索処理は、以下のように行われる。検索装置は、検索範囲の数値について、有効桁数として「4」を取得する。検索装置は、検索範囲の数値について、第1位の数字として「1」を取得する。
検索装置は、有効桁数の値域から、有効桁数「4」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した有効桁数「4」に対応するビットマップを取得する。この結果、検索装置は、有効桁数「4」に合致する出現位置を絞り込むことができる。
検索装置は、第1位の値域から、第1位の数字「1」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第1位の数字「1」に対応するビットマップを取得する。そして、検索装置は、直前の有効桁数「4」の絞り込み結果と今回の第1位の数字「1」の絞り込み結果とをAND演算する。この結果、検索装置は、有効桁数「4」と第1位の数字「1」とに合致する出現位置を絞り込むことができる。この絞り込み結果が検索範囲「1000〜1999」の絞り込み結果であり、ここでは、A4とする。
次に、有効桁数が4である場合の検索範囲「2000〜2099」の範囲検索処理は、以下のように行われる。検索装置は、検索範囲の数値について、第1の数字として「2」を取得する。検索装置は、検索範囲の数値について、第2位の数字として「0」を取得する。
検索装置は、第1位の値域から、第1位の数字「2」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第1位の数字「2」に対応するビットマップを取得する。そして、検索装置は、既に取得された有効桁数「4」のビットマップと今回取得された第1位の数字「2」のビットマップとをAND演算する。この結果、検索装置は、有効桁数「4」と第1位の数字「2」とに合致する出現位置を絞り込むことができる。
検索装置は、第2位の値域から、第2位の数字「0」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第2位の数字「0」に対応するビットマップを取得する。そして、検索装置は、直前の第1位の数字「2」の絞り込み結果と今回の第2位の数字「0」の絞り込み結果とをAND演算する。この結果、検索装置は、有効桁数「4」と第1位の数字「2」と第2位の数字「0」とに合致する出現位置を絞り込むことができる。この絞り込み結果が検索範囲「2000〜2099」の絞り込み結果であり、ここでは、A5とする。
図5Dに示すように、有効桁数が4である場合の検索範囲「2100〜2159」の範囲検索処理は、以下のように行われる。検索装置は、検索範囲の数値について、第2位の数字として「1」を取得する。検索装置は、検索範囲の数値について、第3位の数字として、「0〜5」を取得する。
検索装置は、第2位の値域から、第2位の数字「1」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第2位の数字「1」に対応するビットマップを取得する。そして、検索装置は、既に絞り込まれた有効桁数「4」と第1位の数字「2」との絞り込み結果と今回取得された第2位の数字「1」のビットマップとをAND演算する。この結果、検索装置は、有効桁数「4」と第1位の数字「2」と第2位の数字「1」とに合致する出現位置を絞り込むことができる。
検索装置は、第3位の値域から、第3位の数字「0」〜「5」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第3位の数字「0」〜「5」に対応するビットマップを取得する。そして、検索装置は、取得した数字「0」〜「5」に対応するそれぞれのビットマップをOR演算する。そして、検索装置は、直前の第2位の数字「1」の絞り込み結果と今回の第3位の数字「0」〜「5」の演算結果とをAND演算する。この結果、検索装置は、有効桁数「4」と第1位の数字「2」と第2位の数字「1」と第3位の数字「0」〜「5」とに合致する出現位置を絞り込むことができる。この絞り込み結果が検索範囲「2100〜2159」の絞り込み結果であり、ここでは、A6とする。
図5Eに示すように、有効桁数が4である場合の検索範囲「2160〜2167」の範囲検索処理は、以下のように行われる。検索装置は、検索範囲の数値について、第3位の数字として「6」を取得する。検索装置は、検索範囲の数値について、第4位の数字として、「0〜7」を取得する。
検索装置は、第3位の値域から、第3位の数字「6」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第3位の数字「6」に対応するビットマップを取得する。そして、検索装置は、既に絞り込まれた有効桁数「4」と第1位の数字「2」と第2位の数字「1」との絞り込み結果と今回取得された第3位の数字「6」のビットマップとをAND演算する。この結果、検索装置は、有効桁数「4」と第1位の数字「2」と第2位の数字「1」と第3位の数字「6」とに合致する出現位置を絞り込むことができる。
検索装置は、第4位の値域から、第4位の数字「0」〜「7」を特定する。検索装置は、ビットマップ型インデックスBIから、特定した第4位の数字「0」〜「7」に対応するビットマップを取得する。そして、検索装置は、取得した数字「0」〜「7」に対応するそれぞれのビットマップをOR演算する。そして、検索装置は、直前の第3位の数字「6」の絞り込み結果と今回の第4位の数字「0」〜「7」の演算結果とをAND演算する。この結果、検索装置は、有効桁数「4」と第1位の数字「2」と第2位の数字「1」と第3位の数字「6」と第4位の数字「0」〜「7」とに合致する出現位置を絞り込むことができる。この絞り込み結果が検索範囲「2160〜2167」の絞り込み結果であり、ここでは、A7とする。
そして、検索装置は、全ての絞り込み結果の論理和を演算する。すなわち、検索装置は、A1〜A7のそれぞれの絞り込み結果をOR演算する。この演算結果が、検索対象が「83〜2167」である場合の検索結果である。
このようにして、検索装置は、検索対象の数値の各位の数字に対応するビットマップを用いて、範囲検索における数値の出現位置を検索する。この結果、検索装置は、実データであるテキストデータF1を参照しないで、数値の範囲検索をすることで、数値の範囲検索を高速化することができる。
[インデックス生成装置の構成]
図6は、実施例1に係るインデックス生成装置の構成の一例を示す機能ブロック図である。図6に示すように、インデックス生成装置100は、制御部110および記憶部120を有する。
制御部110は、図1に示したビットマップ型インデックスBIの生成処理を実行する処理部である。制御部110は、ファイルリード部111、数値取得部112、有効桁数/位数字取得部113およびインデックス生成部114を有する。
記憶部120は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部120は、ビットマップ型インデックス121を有する。
ビットマップ型インデックス121は、対象のテキストデータF1に出現する数値がいずれかに割り当てられる複数の値域それぞれについて、数値が出現する出現位置に対応付けたビットマップの集合である。なお、ビットマップ型インデックス121は、ビットマップ型インデックスBIに対応する。ビットマップ型インデックス121は、図2と同様であるので、その説明を省略する。
ファイルリード部111は、対象のファイルを記憶領域に読み出す。
数値取得部112は、記憶領域からテキストデータF1を読み出し、読み出したテキストデータF1に対して字句解析を行う。数値取得部112は、字句解析した結果の数値をテキストデータF1の先頭から順番に取得する。数値取得部112は、取得した数値と、テキストデータF1内の出現位置とを対応付けて有効桁数/位数字取得部113に出力する。
有効桁数/位数字取得部113は、数値取得部112によって出力された数値について、有効桁数および位ごとの数字を取得する。有効桁数/位数字取得部113は、数値、出現位置、有効桁数および位ごとの数字を対応付けてインデックス生成部114に出力する。
インデックス生成部114は、ビットマップ型インデックス121を生成する。例えば、インデックス生成部114は、有効桁数/位数字取得部113から数値、出現位置、有効桁数および位ごとの数字に対応付けられた情報を入力する。インデックス生成部114は、有効桁数の値域を一纏めにしたビットマップ群のうち、入力された情報に含まれる数値の有効桁数に対応するビットマップを選択する。インデックス生成部114は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに出現ビットを書き込む。インデックス生成部114は、第n位の値域を一纏めにしたビットマップ群のうち、入力された情報に含まれる数値の第n位の数字に対応するビットマップを選択する。インデックス生成部114は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに出現ビットを書き込む。ここでいう「n」は、入力された情報の位に対応するものとする。入力された情報の位が複数存在する場合には、存在する複数の位ごと、選択処理、書き込み処理が行われる。
[インデックス生成処理のフローチャート]
図7は、実施例1に係るインデックス生成処理のフローチャートの一例を示す図である。
図7に示すように、制御部110は、前処理を実行する(ステップS11)。例えば、制御部110は、各種記憶領域を記憶部120に確保する。そして、制御部110は、対象のファイルを読出し、読出用の記憶領域にテキストデータF1を格納する(ステップS12)。
そして、制御部110は、読出用の記憶領域の先頭から順番に数値を読み出す(ステップS13)。例えば、制御部110は、読出用の記憶領域に記憶されたテキストデータF1に対して字句解析を行って、先頭から順番に数値を読み出す。
そして、制御部110は、読み出した数値の有効桁数を取得する(ステップS14)。制御部110は、読み出した数値の位ごとの数字を取得する(ステップS15)。
そして、制御部110は、取得した有効桁数に対するビットマップの、数値の出現位置に対するビットに「1」を書き込む(ステップS16)。例えば、制御部110は、有効桁数の値域を一纏めにしたビットマップ群のうち、取得した有効桁数に対応するビットマップを選択する。制御部110は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに出現ビットを示す「1」を書き込む。
そして、制御部110は、取得した位ごとの数字に対するビットマップの、数値の出現位置に対するビットに「1」を書き込む(ステップS17)。例えば、数字が2桁の場合には、制御部110は、第1位の値域を一纏めにしたビットマップ群のうち、第1位の数字に対応するビットマップを選択する。インデックス生成部114は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに出現ビットを示す「1」を書き込む。制御部110は、第2位の値域を一纏めにしたビットマップ群のうち、第2位の数字に対応するビットマップを選択する。インデックス生成部114は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに出現ビットを示す「1」を書き込む。
そして、制御部110は、ファイルの終点か否かを判定する(ステップS18)。ファイルの終点でないと判定した場合には(ステップS18;No)、制御部110は、次の数値を読み出すべく、ステップS13に移行する。
一方、ファイルの終点であると判定した場合には(ステップS18;Yes)、制御部110は、ビットマップ型インデックス121を記憶部120に格納する(ステップS19)。そして、制御部110は、インデックス生成処理を終了する。
[検索装置の構成]
図8は、実施例1に係る検索装置の構成の一例を示す機能ブロック図である。図8に示すように、検索装置200は、制御部210および記憶部220を有する。
制御部210は、図3〜図5Eに示した検索処理を実行する処理部である。制御部210は、検索条件受付部211、数値検索部212、範囲検索部213および検索結果出力部214を有する。
記憶部220は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部220は、ビットマップ型インデックス221を有する。
ビットマップ型インデックス221は、図2と同様であるので、その説明を省略する。
検索条件受付部211は、検索条件を受け付ける。例えば、検索条件受付部211は、検索条件として数値を受け付け、受け付けた数値を数値検索部212に出力する。また、検索条件受付部211は、検索条件として数値範囲を受け付け、受け付けた数値範囲を範囲検索部213に出力する。検索条件が数値範囲の場合には、下限の数値と上限の数値とが含まれる。
数値検索部212は、検索条件が数値である場合には、ビットマップ型インデックス221を用いて、数値を検索する。
例えば、数値検索部212は、検索条件受付部211によって出力された検索条件を、検索条件が示す数値の有効桁数および位ごとの数字それぞれの値域に対応した条件に変換する。一例として、数値検索部212は、検索条件受付部211によって出力された数値について、有効桁数および位ごとの数字を取得する。そして、数値検索部212は、検索条件を、取得した有効桁数および位ごとの数字それぞれの値域に対応した条件に変換する。
そして、数値検索部212は、変換した条件を、ビットマップ型インデックス221の複数の値域それぞれを用いて検索する。例えば、数値検索部212は、有効桁数の値域から、取得した有効桁数を特定する。数値検索部212は、ビットマップ型インデックス221から、特定した有効桁数に対応するビットマップを取得する。そして、数値検索部212は、位ごとの値域から、取得した位の数字を特定し、特定した位の数字に対応するビットマップをビットマップ型インデックス221から取得する。そして、数値検索部212は、取得した有効桁数に対応するビットマップと、数値に該当する位の数字に対応するそれぞれのビットマップとをAND演算する。数値検索部212は、演算結果のビットマップ(絞り込み結果)を検索結果出力部214に出力する。すなわち、数値検索部212は、検索条件が示す数値の出現位置を検索する。
範囲検索部213は、検索条件が数値範囲である場合には、ビットマップ型インデックス221を用いて、数値範囲を検索する。
例えば、範囲検索部213は、検索条件受付部211によって出力された検索条件を、有効桁数ごとの検索範囲の条件に場合分けする。すなわち、範囲検索部213は、下限の数値の有効桁数における検索範囲の条件、上限の数値の有効桁数における検索範囲の条件と、下限の数値の有効桁数と上限の数値の有効桁数との間の中間の有効桁数における検索範囲の条件に場合分けする。
そして、範囲検索部213は、下限の数値の有効桁数における検索範囲の条件を、検索範囲内の数値を用いて、数値の有効桁数および位ごとの数字それぞれの値域に対応した条件に変換する。そして、範囲検索部213は、変換した条件を、ビットマップ型インデックス221の複数の値域それぞれを用いて検索する。
そして、範囲検索部213は、上限の数値の有効桁数における検索範囲の条件を、検索範囲内の数値を用いて、数値の有効桁数および位ごとの数字それぞれの値域に対応した条件に変換する。そして、範囲検索部213は、変換した条件を、ビットマップ型インデックス221の複数の値域それぞれを用いて検索する。
そして、範囲検索部213は、中間の有効桁数があれば、中間の有効桁数における検索範囲の条件を、有効桁数の値域に対応した条件に変換する。そして、範囲検索部213は、変換した条件を、ビットマップ型インデックス221の有効桁数の値域を用いて検索する。
そして、範囲検索部213は、有効桁数ごとに検索された結果の論理和(OR)を演算する。範囲検索部213は、演算結果のビットマップ(絞り込み結果)を検索結果出力部214に出力する。すなわち、範囲検索部213は、検索条件が示す数値範囲の出現位置を検索する。
検索結果出力部214は、検索結果を出力する。例えば、検索結果出力部214は、数値検索部212によって出力された検索結果のビットマップに出現ビットを示す「1」が存在するか否かを判定する。検索結果出力部214は、出現ビットを示す「1」が存在している場合には、「1」が存在している出現位置を検索結果として出力する。検索結果出力部214は、出現ビットを示す「1」が存在しない場合には、検索対象が存在しない旨を検索結果として出力する。
[検索処理のフローチャート]
図9は、実施例1に係る検索処理のフローチャートの一例を示す図である。
図9に示すように、制御部210は、検索条件を受け付けたか否かを判定する(ステップS21)。検索条件を受け付けていないと判定した場合には(ステップS21;No)、制御部210は、検索条件を受け付けるまで、判定処理を繰り返す。
一方、検索条件を受け付けたと判定した場合には(ステップS21;Yes)、制御部210は、検索条件が数値であるか否かを判定する(ステップS22)。検索条件が数値であると判定した場合には(ステップS22;Yes)、制御部210は、数値検索処理を実行する(ステップS23)。そして、制御部210は、ステップS25に移行する。なお、数値検索処理のフローチャートは、後述する。
一方、検索条件が数値でないと判定した場合には(ステップS22;No)、制御部210は、範囲検索処理を実行する(ステップS24)。そして、制御部210は、ステップS25に移行する。なお、範囲検索処理のフローチャートは、後述する。
ステップS25において、制御部210は、戻りのビットマップに「1」が存在するか否かを判定する(ステップS25)。戻りのビットマップに「1」が存在すると判定した場合には(ステップS25;Yes)、制御部210は、「1」が存在する出現位置を検索結果として出力する(ステップS26)。そして、制御部210は、検索処理を終了する。
一方、戻りのビットマップに「1」が存在しないと判定した場合には(ステップS25;No)、制御部210は、検索対象が存在しない旨を検索結果として出力する(ステップS27)。そして、制御部210は、検索処理を終了する。
[数値検索処理のフローチャート]
図10は、実施例1に係る数値検索処理のフローチャートの一例を示す図である。
図10に示すように、制御部210は、検索対象の数値について、有効桁数および位ごとの数字を取得する(ステップS31)。制御部210は、取得した有効桁数に対応するビットマップで絞り込む(ステップS32)。例えば、制御部210は、有効桁数の値域から、取得した有効桁数を特定する。制御部210は、ビットマップ型インデックス221から、特定した有効桁数に対応するビットマップを取得する。すなわち、制御部210は、有効桁数に合致する出現位置を絞り込む。
そして、制御部210は、1つの位を選択する(ステップS33)。制御部210は、選択した位の数字に対応するビットマップで絞り込む(ステップS34)。例えば、制御部210は、選択した位の値域から、選択した位の数字に対応するビットマップを取得する。すなわち、制御部210は、選択した位の数字に合致する出現位置を絞り込む。そして、制御部210は、直前の属性の絞り込み結果と選択した位の絞り込み結果とをAND演算する。すなわち、制御部210は、直前の属性と選択した属性とに合致する出現位置を絞り込む。
そして、制御部210は、未選択の位があるか否かを判定する(ステップS35)。未選択の位があると判定した場合には(ステップS35;Yes)、制御部210は、次の位を選択すべく、ステップS33に移行する。
一方、未選択の位がないと判定した場合には(ステップS35;No)、制御部210は、絞り込んだ結果のビットマップを検索処理に戻す(ステップS36)。そして、制御部210は、数値検索処理を終了する。
[範囲検索処理のフローチャート]
図11は、実施例1に係る範囲検索処理のフローチャートの一例を示す図である。
図11に示すように、制御部210は、検索対象の下限の数値について、有効桁数および位ごとの数字を取得する(ステップS41)。制御部210は、検索対象の上限の数値について、有効桁数および位ごとの数字を取得する(ステップS42)。
そして、制御部210は、有効桁数により検索範囲を分割する(ステップS43)。すなわち、制御部210は、検索対象を、下限の数値の有効桁数における検索範囲、上限の数値の有効桁数における検索範囲と、下限の数値の有効桁数と上限の数値の有効桁数との間の中間の有効桁数における検索範囲とに分割する。
そして、制御部210は、下限の数値の有効桁数における検索範囲について、有効桁数および位ごとの数字に対応するビットマップで絞り込む(ステップS44)。
そして、制御部210は、下限の有効桁数と上限の有効桁数との間の中間の有効桁数に対応するビットマップで絞り込む(ステップS45)。
そして、制御部210は、上限の数値の有効桁数における検索範囲について、有効桁数および位ごとの数字に対応するビットマップで絞り込む(ステップS46)。
そして、制御部210は、有効桁数ごとに得られたビットマップの論理和(OR)を演算する(ステップS47)。制御部210は、演算結果のビットマップ(絞り込み結果)を検索処理に戻す(ステップS48)。そして、制御部210は、範囲検索処理を終了する。
[実施例1の効果]
上記実施例1によれば、インデックス生成装置100は、対象のテキストデータF1に出現する数値から、数値が持つ複数の属性に対応するそれぞれの値を取得する。インデックス生成装置100は、複数の属性に対応するそれぞれの値を複数の属性それぞれの値域に対応付ける。そして、インデックス生成装置100は、対応付けたそれぞれの値域を含む複数の値域それぞれについて、数値の出現する出現位置に対応付けたビットマップのビットマップ型インデックス121を生成する。かかる構成によれば、インデックス生成装置100は、サイズ肥大を抑えながら、実体参照することなく、数値検索が可能なビットマップ型インデックス121を生成することができる。
また、上記実施例1によれば、それぞれの値域の範囲は、テキストデータF1に対する過去の数値検索の条件に利用された数値検索履歴の有効桁数や各位の数字に基づき設定される。かかる構成によれば、インデックス生成装置100は、インデックスを生成する際に、さらにサイズ肥大を抑えながら、数値検索が可能なビットマップ型インデックス121を生成することができる。
また、上記実施例1によれば、検索装置200は、所定の数値検索の条件を受け付け、受け付けた数値検索の条件を、数値が持つ複数の属性それぞれの値域に対応した条件に変換する。検索装置200は、変換した条件を、ビットマップ型インデックス121を用いて検索する。かかる構成によれば、検索装置200は、ビットマップ型インデックス121を用いて数値を検索することで、実体参照することなく、数値検索を高速化できる。
また、上記実施例1によれば、検索装置200は、所定の数値検索の条件が数値の範囲を示す条件である場合には、数値の範囲を示す条件を、有効桁数ごとの条件に分割する。そして、検索装置200は、変換する処理および検索する処理について、該分割したそれぞれの条件に対して実行する。かかる構成によれば、検索装置200は、複数の属性に含まれる属性である有効桁数を用いて条件を分割することで、ビットマップ型インデックス121を用いた数値の範囲検索を高速化できる。
また、上記実施例1によれば、検索装置200は、ビットマップ型インデックス121のみを参照して、数値検索の結果を返答する。かかる構成によれば、検索装置200は、実体参照することなく、数値を検索することができ、数値検索を高速化できる。
ところで、実施例1では、インデックス生成装置100は、10進数の数値を対象として、ビットマップ型インデックスBIを生成する場合を説明した。検索装置200は、10進数の数値を対象として、ビットマップ型インデックスBIを参照して数値を検索する場合を説明した。しかしながら、インデックス生成装置100は、これに限定されず、2進数の数値を対象として、ビットマップ型インデックスBI2を生成しても良い。検索装置200は、これに限定されず、2進数の数値を対象として、ビットマップ型インデックスBI2を参照して数値を検索しても良い。
そこで、実施例2では、インデックス生成装置100は、2進数の数値を対象として、ビットマップ型インデックスBI2を生成する場合を説明する。検索装置200は、2進数の数値を対象として、ビットマップ型インデックスBI2を参照して数値を検索する場合を説明する。
[実施例2に係るビットマップ型インデックス生成処理の一例]
図12は、実施例2に係るビットマップ型インデックスの生成処理の流れの一例を示す図である。図12に示すように、テキストデータF2は、2進数の数値を含む文書である。インデックス生成装置100は、数値が持つ有効桁数、位の数字などの複数の属性について、それぞれの値域を一纏めにして、テキストデータF2に出現する数値の出現位置に対応付けたビットマップ型インデックスBI2を生成する。
このビットマップ型インデックスBI2は、数値の有効桁数および数値の位などの複数の属性について、それぞれの値域を一纏めにしたビットマップ群である。すなわち、ビットマップ型インデックスBI2は、対象のテキストデータF2に出現する数値がいずれかに割り当てられる複数の値域それぞれについて、数値が出現する出現位置に対応付けたビットマップのインデックス情報のことをいう。数値の位の値域は、0と1のみである。そして、出現位置に存在する数値は、出現位置に対応する複数の値域それぞれのビットを纏めたビットマップで表すことができる。
図12に示すように、数値が「b1b2b3b4b5b6b7」であるとする。なお、b1b2b3b4b5b6b7は、有効桁数が7である2進数である。インデックス生成装置100は、数値の有桁桁数として「7」を取得する。インデックス生成装置100は、第1位の数字として「b1」、第2位の数字として「b2」、第3位の数字として「b3」、第4位の数字として「b4」、第5位の数字として「b5」、第6位の数字として「b6」、第7位の数字として「b7」を取得する。
インデックス生成装置100は、有効桁数の値域を一纏めにしたビットマップ群のうち数値の有効桁数「7」に対応するビットマップを選択する。そして、インデックス生成装置100は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに「1」を設定する。また、インデックス生成装置100は、第1位の値域を一纏めにしたビットマップ群のうち数値の第1位の数字「b1」に対応するビットマップを選択する。そして、インデックス生成装置100は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに「1」を設定する。また、インデックス生成装置100は、第2位の値域を一纏めにしたビットマップ群のうち数値の第2位の数字「b2」に対応するビットマップを選択する。そして、インデックス生成装置100は、選択したビットマップが数値の出現位置に対応するビットマップと重なるビットに「1」を設定する。同様に、インデックス生成装置100は、第3位の数字「b3」、第4位の数字「b4」、第5位の数字「b5」、第6位の数字「b6」、第7位の数字「b7」についても、同様に、ビットマップ型インデックスBI2に設定する。
[ビットマップ型インデックスの一例]
次に、実施例2に係るビットマップ型インデックスBI2の一例を、図13を参照して説明する。図13は、実施例2に係るビットマップ型インデックスの一例を示す図である。図13に示すように、ビットマップ型インデックスBI2は、X軸をオフセット(出現位置)として、Y軸を数値とする。ビットマップ型インデックスBI2は、数値の有効桁数の値域、数値の第n位の値域ごとにビットマップ群を対応付ける。nは、有効桁数の最大値と同じ数値である。ここでは、nは、一例として、12以上の自然数である。
X軸のオフセット(出現位置)は、テキストデータF2内の出現位置を示す。テキストデータF2は、単一のファイルのデータであっても良いし、複数のファイルのデータであっても良い。テキストデータF2は、単一のブロックのデータであっても良いし、複数のブロックのデータであっても良い。そして、オフセットごとにビットマップが割り当てられる。
Y軸の数値は、有効桁数と第n位の数字とから表わすことができる。有効桁数とは、数値に対応する有効桁数を示す。有効桁数の値域は、1〜nである。第1位とは、数値の最上位の値域を示す。第1位の値域は、0,1である。第2位とは、数値の2番目の値域を示す。第2位の値域は、0,1である。第3位とは、数値の3番目の値域を示す。第3位の値域は、0,1である。第4位とは、数値の4番目の値域を示す。第4位の値域は、0,1である。第n位とは、数値のn番目の値域を示す。第n位の値域は、0,1である。
そして、有効桁数の値域に含まれる値ごとにビットマップが割り当てられる。第1位の値域に含まれる値(数字)ごとにビットマップが割り当てられる。第2位の値域に含まれる値(数字)ごとにビットマップが割り当てられる。第3位の値域に含まれる値(数字)ごとにビットマップが割り当てられる。第4位の値域に含まれる値(数字)ごとにビットマップが割り当てられる。第n位の値域に含まれる値(数字)ごとにビットマップが割り当てられる。
例えば、ビットマップ型インデックスBI2の5列目は、数値「1010011」(10進数の83)のオフセット「5」のビットマップである。有効桁数として「7」のビット位置に「1」が設定されている。第1位の数字として「1」のビット位置に「1」が設定されている。第2位の数字として「0」のビット位置に「1」が設定されている。第3位の数字として「1」のビット位置に「1」が設定されている。第4位の数字として「0」のビット位置に「1」が設定されている。
また、ビットマップ型インデックスBI2の20列目は、数値「100001110111」(10進数の2167)のオフセット「20」のビットマップである。有効桁数として「12」のビット位置に「1」が設定されている。第1位の数字として「1」のビット位置に「1」が設定されている。第2位の数字として「0」のビット位置に「1」が設定されている。第3位の数字として「0」のビット位置に「1」が設定されている。第4位の数字として「0」のビット位置に「1」が設定されている。
このようにして、インデックス生成装置100は、有効桁数および複数の値域それぞれについて、数値が出現する出現位置に対応付けたビットマップのインデックス情報であるビットマップ型インデックスBI2を生成する。
[数値検索処理の一例]
図14は、実施例2に係る数値検索処理の流れの一例を示す図である。図14に示すように、検索装置200は、数値検索や数値の範囲検索の検索クエリである条件に応じて数値の属性に対応した値域を分割し、それぞれの属性のビットマップを組合せて絞り込みを行う。すなわち、検索装置200は、数値検索の条件を受け付け、受け付けた数値検索の条件を、数値が持つ複数の属性に対応付けた複数の値域を用いた条件に変換する。そして、検索装置200は、変換した条件を、ビットマップ型インデックスBI2の複数の値域それぞれを用いて検索する。
図14に示すように、数値検索の条件が示す検索対象が「100001110111」であるとする。なお、「100001110111」(2167)は、有効桁数が12である2進数である。検索装置200は、検索対象の数値について、有効桁数として「12」を取得する。検索装置200は、検索対象の数値について、第1位の数字として「1」、第2位〜第5位の数字として「0」、第6位〜第8位の数字として「1」、第9位の数字として「0」、第10位〜第12位の数字として「1」を取得する。そして、検索装置200は、検索対象の条件を、取得した有効桁数、取得した第1位〜第12位の数字を用いた条件に変換する。
検索装置200は、有効桁数の値域から、変換した条件に含まれる有効桁数「12」を特定する。検索装置200は、ビットマップ型インデックスBI2から、特定した有効桁数「12」に対応するビットマップを取得する。この結果、検索装置200は、有効桁数「12」に合致する出現位置を絞り込むことができる。
検索装置200は、第1位の値域から、変換した条件に含まれる第1位の数字「1」を特定する。検索装置200は、ビットマップ型インデックスBI2から、特定した第1位の数字「1」に対応するビットマップを取得する。そして、検索装置200は、直前の有効桁数「12」の絞り込み結果と今回の第1位の数字「1」の絞り込み結果とをAND演算する。この結果、検索装置200は、有効桁数「12」と第1位の数字「1」とに合致する出現位置を絞り込むことができる。
検索装置200は、第2位の値域から、変換した条件に含まれる第2位の数字「0」を特定する。検索装置200は、ビットマップ型インデックスBI2から、特定した第2位の数字「0」に対応するビットマップを取得する。そして、検索装置200は、直前の第1位の数字「1」の絞り込み結果と今回の第2位の数字「0」の絞り込み結果とをAND演算する。この結果、検索装置200は、有効桁数「12」と第1位の数字「1」と第2位の数字「0」とに合致する出現位置を絞り込むことができる。
検索装置200は、同様に、第3位〜第11位のそれぞれの値域を用いて、直前の位の数字の絞り込み結果と今回の位の数字の絞り込み結果とをAND演算する。
そして、検索装置200は、第12位の値域から、変換した条件に含まれる第12位の数字「1」を特定する。検索装置200は、ビットマップ型インデックスBI2から、特定した第12位の数字「1」に対応するビットマップを取得する。そして、検索装置200は、直前の第11位の数字「1」の絞り込み結果と今回の第12位の数字「1」の絞り込み結果とをAND演算する。この結果、検索装置200は、検索対象の数値の有効桁数と第1位〜第12位のそれぞれの数字とに合致する出現位置を絞り込むことができる。
この結果、検索装置200は、有効桁数「4」と第1位の数字「2」と第2位の数字「1」と第3位の数字「6」と第4の数字「7」とに合致する出現位置xを絞り込むことができる。すなわち、検索装置200は、数値検索の条件が示す検索対象が「100001110111」の出現位置を「y」として検索する。
このようにして、検索装置200は、検索対象の数値の各位の数字に対応するビットマップを用いて、検索対象の数値の出現位置を検索する。この結果、検索装置200は、実データであるテキストデータF2を参照しないで、数値を検索することで、数値検索を高速化することができる。
[範囲検索処理の一例]
図15は、実施例2に係る範囲検索処理の一例を示す図である。図15に示すように、検索装置200は、数値の範囲検索の条件を受け付け、受け付けた範囲検索の条件を有効桁数ごとの条件に分割する。
例えば、数値の範囲検索の条件が示す検索対象が「1010011〜100001110111」であるとする。なお、下限の「1010011」は、有効桁数が7である2進数である。上限の「100001110111」は、有効桁数が12である2進数である。検索装置200は、検索対象の条件を、有効桁数が7である場合の検索範囲の条件と、有効桁数が8〜11である場合の検索範囲の条件と、有効桁数が12である場合の検索範囲の条件とに分割する。
図16A〜図16Cは、実施例2に係る範囲検索処理の流れの一例を示す図である。図16A〜図16Cでは、数値の範囲検索の条件が示す検索対象が「1010011〜100001110111」であるとする。図16Aでは、有効桁数が7である場合の条件のうち「10*****」の条件の範囲検索処理を説明する図である。図16Bでは、有効桁数が8〜11である場合の範囲検索処理を説明する図である。図16Cでは、有効桁数が12である場合の条件のうち「1***********」の条件の範囲検索処理を説明する図である。
図16Aに示すように、有効桁数が7である場合の条件「10*****」の範囲検索処理は、例えば、以下のように行われる。検索装置200は、条件の有効桁数として「7」を取得する。検索装置200は、下限の数値について、第1位の数字として「1」、第2位の数字として「0」、第3位の数字として「1」、第4位および第5位の数字として「0」を取得する。検索装置200は、下限の数値について、第6位および第7位の数字として「1」を取得する。
検索装置200は、有効桁数の値域から、有効桁数「7」を特定する。検索装置200は、ビットマップ型インデックスBI2から、特定した有効桁数「7」に対応するビットマップを取得する。この結果、検索装置200は、有効桁数「7」に合致する出現位置を絞り込むことができる。
検索装置200は、第1位の値域から、第1位の数字「1」を特定する。検索装置200は、ビットマップ型インデックスBI2から、特定した第1位の数字「1」に対応するビットマップを取得する。そして、検索装置は、直前の有効桁数「7」の絞り込み結果と今回の第1位の数字「1」の絞り込み結果とをAND演算する。この結果、検索装置200は、有効桁数「7」と第1位の数字「1」とに合致する出現位置を絞り込むことができる。
検索装置200は、第2位の値域から、第2位の数字「0」を特定する。検索装置200は、ビットマップ型インデックスBI2から、特定した第2位の数字「0」に対応するビットマップを取得する。そして、検索装置200は、直前の第1位の数字「1」の絞り込み結果と今回の第2位の数字「0」の絞り込み結果とをAND演算する。この結果、検索装置200は、有効桁数「7」と第1位の数字「1」と第2位の数字「0」とに合致する出現位置を絞り込むことができる。
検索装置200は、第3位の値域から、第3位の数字「1」を特定する。検索装置200は、特定した数字が「1」であるので、ビットマップ型インデックスBI2から、第3位の数字「0」に対応するビットマップを取得する。そして、検索装置200は、直前の第2位の絞り込み結果から、第3位の数字「0」に対応するビットマップの出現ビットの出現位置を除外する。これは、範囲検索の下限の数値のうち「1」の数字を持つ第3位について、「1」より小さい数字「0」を除外するためである。
検索装置200は、第6位の値域から、第6位の数字「1」を特定する。検索装置200は、特定した数字が「1」であるので、ビットマップ型インデックスBI2から、第6位の数字「0」に対応するビットマップを取得する。そして、検索装置200は、直前の絞り込み結果から、第6位の数字「0」に対応するビットマップの出現ビットの出現位置を除外する。これは、範囲検索の下限の数値のうち「1」の数字を持つ第6位について、「1」より小さい数字「0」を除外するためである。
検索装置200は、第7位の値域から、第7位の数字「1」を特定する。検索装置200は、特定した数字が「1」であるので、ビットマップ型インデックスBI2から、第7位の数字「0」に対応するビットマップを取得する。そして、検索装置200は、直前の絞り込み結果から、第7位の数字「0」に対応するビットマップの出現ビットの出現位置を除外する。これは、範囲検索の下限の数値のうち「1」の数字を持つ第7位について、「1」より小さい数字「0」を除外するためである。この結果、検索装置200は、有効桁数が7である場合の条件「10*****」に合致する出現位置を絞り込むことができる。ここでは、絞り込み結果をB1とする。
図16Bに示すように、有効桁数が8〜11である場合の条件の範囲検索処理は、例えば、以下のように行われる。検索装置200は、検索範囲の数値について、有効桁数として「8」〜「11」を取得する。検索装置200は、有効桁数の値域から、有効桁数「8」〜「11」を特定する。検索装置200は、ビットマップ型インデックスBI2から、特定した有効桁数「8」〜「11」に対応するビットマップを取得する。検索装置200は、取得した有効桁数「8」〜「11」に対応するそれぞれのビットマップをOR演算する。この結果、検索装置200は、有効桁数「8」〜「11」に合致する出現位置を絞り込むことができる。ここでは、絞り込み結果をB2とする。
図16Cに示すように、有効桁数が12である場合の条件「1***********」の範囲検索処理は、例えば、以下のように行われる。検索装置200は、条件の有効桁数として「12」を取得する。検索装置200は、上限の数値について、第1位の数字として「1」、第2位〜第5位の数字として「0」、第6位〜第8位の数字として「1」、第9位の数字として「0」を取得する。検索装置200は、上限の数値について、第10位〜第12位の数字として「1」を取得する。
検索装置200は、有効桁数の値域から、有効桁数「12」を特定する。検索装置200は、ビットマップ型インデックスBI2から、特定した有効桁数「12」に対応するビットマップを取得する。この結果、検索装置200は、有効桁数「12」に合致する出現位置を絞り込むことができる。
検索装置200は、第1位の値域から、第1位の数字「1」を特定する。検索装置200は、ビットマップ型インデックスBI2から、特定した第1位の数字「1」に対応するビットマップを取得する。そして、検索装置は、直前の有効桁数「12」の絞り込み結果と今回の第1位の数字「1」の絞り込み結果とをAND演算する。この結果、検索装置200は、有効桁数「12」と第1位の数字「1」とに合致する出現位置を絞り込むことができる。
検索装置200は、第2位の値域から、第2位の数字「0」を特定する。検索装置200は、特定した数字が「0」であるので、ビットマップ型インデックスBI2から、特定した第2位の数字「1」に対応するビットマップを取得する。そして、検索装置200は、直前の第1位の絞り込み結果から、第2位の数字「1」に対応するビットマップの出現ビットの出現位置を除外する。これは、範囲検索の上限の数値のうち「0」の数字を持つ第2位について、「0」より大きい数字「1」を除外するためである。
検索装置200は、第3位の値域から、第3位の数字「0」を特定する。検索装置200は、特定した数字が「0」であるので、ビットマップ型インデックスBI2から、特定した第3位の数字「1」に対応するビットマップを取得する。そして、検索装置200は、直前の絞り込み結果から、第3位の数字「1」に対応するビットマップの出現ビットの出現位置を除外する。これは、範囲検索の上限の数値のうち「0」の数字を持つ第3位について、「0」より大きい数字「1」を除外するためである。
検索装置200は、第4位の値域から、第4位の数字「0」を特定する。検索装置200は、特定した数字が「0」であるので、ビットマップ型インデックスBI2から、特定した第4位の数字「1」に対応するビットマップを取得する。そして、検索装置200は、直前の絞り込み結果から、第4位の数字「1」に対応するビットマップの出現ビットの出現位置を除外する。これは、範囲検索の上限の数値のうち「0」の数字を持つ第4位について、「0」より大きい数字「1」を除外するためである。
検索装置200は、第5位の値域から、第5位の数字「0」を特定する。検索装置200は、特定した数字が「0」であるので、ビットマップ型インデックスBI2から、特定した第5位の数字「1」に対応するビットマップを取得する。そして、検索装置200は、直前の絞り込み結果から、第5位の数字「1」に対応するビットマップの出現ビットの出現位置を除外する。これは、範囲検索の上限の数値のうち「0」の数字を持つ第5位について、「0」より大きい数字「1」を除外するためである。
検索装置200は、第9位の値域から、第9位の数字「0」を特定する。検索装置200は、特定した数字が「0」であるので、ビットマップ型インデックスBI2から、特定した第9位の数字「1」に対応するビットマップを取得する。そして、検索装置200は、直前の絞り込み結果から、第9位の数字「1」に対応するビットマップの出現ビットの出現位置を除外する。これは、範囲検索の上限の数値のうち「0」の数字を持つ第9位について、「0」より大きい数字「1」を除外するためである。この結果、検索装置200は、有効桁数が12である場合の条件「1***********」に合致する出現位置を絞り込むことができる。ここでは、絞り込み結果をB3とする。
そして、検索装置200は、全ての絞り込み結果の論理和を演算する。すなわち、検索装置200は、有効桁数が7である場合の条件の絞り込み結果、有効桁数が8〜11である場合の条件の絞り込み結果および有効桁数が12である場合の条件の絞り込み結果をOR演算する。この演算結果が、検索対象が「1010011〜100001110111」である場合の検索結果となる。
このようにして、検索装置200は、検索対象の数値の各位の数字に対応するビットマップを用いて、範囲検索における数値の出現位置を検索する。この結果、検索装置200は、実データであるテキストデータF2を参照しないで、数値の範囲検索をすることで、数値の範囲検索を高速化することができる。
[実施例2の効果]
上記実施例2によれば、インデックス生成装置100は、対象のテキストデータF1に出現する数値から、数値が持つ複数の属性に対応するそれぞれの値を取得する。インデックス生成装置100は、複数の属性に対応するそれぞれの値を複数の属性それぞれの値域に対応付ける。そして、インデックス生成装置100は、対応付けたそれぞれの値域を含む複数の値域それぞれについて、数値の出現する出現位置に対応付けたビットマップのビットマップ型インデックス121を生成する。かかる構成によれば、インデックス生成装置100は、数値が2進数であっても、サイズ肥大を抑えながら、実体参照することなく、数値検索が可能なビットマップ型インデックス121を生成することができる。
また、上記実施例2によれば、検索装置200は、所定の数値検索の条件を受け付け、受け付けた数値検索の条件を、数値が持つ複数の属性それぞれの値域に対応した条件に変換する。検索装置200は、変換した条件を、ビットマップ型インデックス221を用いて検索する。かかる構成によれば、検索装置200は、数値が2進数であっても、ビットマップ型インデックス221を用いて数値を検索することで、実体参照することなく、数値検索を高速化できる。
[実施例に関連する他の態様]
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
また、実施例1,2では、インデックス生成装置100は、数値が持つ複数の属性について、それぞれの値域を一纏めにして、テキストデータF1,F2に出現する数値の出現位置に対応付けたビットマップ型インデックスBI,BI2を生成すると説明した。ここでいう数値が持つ複数の属性は、例えば、有効桁数、位の数字であるとして説明した。しかしながら、数値が持つ複数の属性は、これに限定されず、さらに、−や+を示す符号を追加しても良い。また、数値が小数点数である場合には、数値が持つ複数の属性は、小数点数を表す複数の属性であっても良い。例えば、数値が浮動小数点数である場合には、数値が持つ複数の属性は、符号、仮数、基数、指数とすれば良い。
また、実施例では、ビットマップ型インデックスBI,BI2では、複数の属性それぞれの値域は、均一であるとして説明した。しかしながら、複数の属性それぞれの値域は、均一に限定されず、不均一であっても良い。例えば、複数の属性それぞれの値域は、テキストデータF1,F2に対する過去の数値検索の条件に利用された数値検索履歴の、複数の属性に対応するそれぞれの値に基づき設定されれば良い。一例として、数値が10進数である場合には、各位それぞれの値域は、0,1,2,m(3〜7),8,9であっても良いし、0,m(1〜8),9であっても良い。
また、実施例に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
[ハードウェア構成]
下記に、上述の実施形態に用いられるハードウェア及びソフトウェアについて説明する。図17は、コンピュータ1のハードウェア構成例を示す図である。コンピュータ1は、例えば、プロセッサ301、RAM(Random Access Memory)302、ROM(Read Only Memory)303、ドライブ装置304、記憶媒体305、入力インターフェース(I/F)306、入力デバイス307、出力インターフェース(I/F)308、出力デバイス309、通信インターフェース(I/F)310、SAN(Storage Area Network)インターフェース(I/F)311およびバス312などを含む。それぞれのハードウェアはバス312を介して接続されている。
RAM302は読み書き可能なメモリ装置であって、例えば、SRAM(Static RAM)やDRAM(Dynamic RAM)などの半導体メモリ、またはRAMでなくてもフラッシュメモリなどが用いられる。ROM303は、PROM(Programmable ROM)なども含む。ドライブ装置304は、記憶媒体305に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体305は、ドライブ装置304によって書き込まれた情報を記憶する。記憶媒体305は、例えば、ハードディスク、SSD(Solid State Drive)などのフラッシュメモリ、CD(Compact Disk)、DVD(Digital Versatile Disc)、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ1は、複数種類の記憶媒体それぞれについて、ドライブ装置304及び記憶媒体305を設ける。
入力インターフェース306は、入力デバイス307と接続されており、入力デバイス307から受信した入力信号をプロセッサ301に伝達する回路である。出力インターフェース308は、出力デバイス309と接続されており、出力デバイス309に、プロセッサ301の指示に応じた出力を実行させる回路である。通信インターフェース310はネットワーク3を介した通信の制御を行なう回路である。通信インターフェース310は、例えばネットワークインターフェースカード(NIC)などである。SANインターフェース311は、ストレージエリアネットワークによりコンピュータ1と接続された記憶装置との通信の制御を行なう回路である。SANインターフェース311は、例えばホストバスアダプタ(HBA)などである。
入力デバイス307は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ1の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス309は、コンピュータ1の制御に応じて情報を出力する装置である。出力デバイス309は、例えば、ディスプレイなどの画像出力装置(表示デバイス)や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス307及び出力デバイス309として用いられる。また、入力デバイス307及び出力デバイス309は、コンピュータ1と一体になっていても良いし、コンピュータ1に含まれず、例えば、コンピュータ1に外部から接続する装置であっても良い。
例えば、プロセッサ301は、ROM303や記憶媒体305に記憶されたプログラムをRAM302に読み出し、読み出されたプログラムの手順に従って制御部110,210の処理を行なう。その際にRAM302はプロセッサ301のワークエリアとして用いられる。記憶部120,220の機能は、ROM303および記憶媒体305がプログラムファイル(後述のアプリケーションプログラム24、ミドルウェア23およびOS22など)やデータファイル(例えば、ビットマップ型インデックス121,221など)を記憶し、RAM302がプロセッサ301のワークエリアとして用いられることによって実現される。プロセッサ301が読み出すプログラムについては、図18を用いて説明する。
図18は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ1において、図18に示すハードウェア群(HW)21(301〜311)の制御を行なうOS(オペレーティング・システム)22が動作する。OS22に従った手順でプロセッサ301が動作して、HW21の制御・管理が行なわれることにより、アプリケーションプログラム(AP)24やミドルウェア(MW)23に従った処理がHW21で実行される。さらに、コンピュータ1において、MW23またはAP24が、RAM302に読み出されてプロセッサ301により実行される。
プロセッサ301hq、インデックス生成機能が呼び出された場合に、MW23またはAP24の少なくとも一部に基づく処理を行なうことにより、(それらの処理をOS22に基づいてHW21を制御して)制御部110の機能が実現される。プロセッサ301は、検索機能が呼び出された場合に、MW23またはAP24の少なくとも一部に基づく処理を行なうことにより、(それらの処理をOS22に基づいてHW21を制御して)制御部210の機能が実現される。インデックス生成機能および検索機能は、AP24自体に含まれても良いし、AP24に従って呼び出されることで実行されるMW23の一部であっても良い。
図19は、実施形態のシステムにおける装置の構成例を示す図である。図19のシステムは、コンピュータ1a、コンピュータ1b、基地局2およびネットワーク3を含む。コンピュータ1aは、無線または有線の少なくとも一方により、コンピュータ1bと接続されたネットワーク3に接続している。
インデックス生成装置100と検索装置200とは、図19に示すコンピュータ1aとコンピュータ1bとのいずれに含まれても良い。コンピュータ1bがインデックス生成装置100の機能を含み、コンピュータ1aが検索装置200の機能を含んでも良いし、コンピュータ1aがインデックス生成装置100の機能を含み、コンピュータ1bが検索装置200の機能を含んでも良い。また、コンピュータ1aとコンピュータ1bとの双方が、インデックス生成装置100の機能および検索装置200の機能を備えても良い。