(57)【特許請求の範囲】
【請求項１】
検索キーからハッシュ値を計算し、検索キーのハッシュ値と同一の範囲の値が割り当てられた複数の記憶部のうち、前記検索キーのハッシュ値に対応する値を持つ記憶部に、前記検索キーと検索キーに対応する情報とを格納し、格納された検索キーを情報検索に利用する情報格納検索装置であって、
前記検索キーの前方のみを用いて該検索キーのハッシュ値を計算し、複数の記憶部の中から、前記検索キーのハッシュ値に対して直近の値が割り当てられた記憶部を、前記検索キーと検索キーに対応する情報とを格納する記憶部として選択する記憶部選択部を設け、前記選択された記憶部に、前記検索キーと検索キーに対応する情報とを木表現で格納し、
前記記憶部選択部は、
検索キーの先頭側の文字の値ほど重み付けを大きくしてハッシュ値の計算を行うことを特徴とする情報格納検索装置。
【請求項２】
前記記憶部選択部は、
ハッシュ値の計算に用いられる検索キー中の各文字の値に、−１以上０未満のｄの値を先頭からの文字順ｉで累乗した値を乗算することにより、重み付けを行うことを特徴とする請求項１記載の情報格納検索装置。
【請求項３】
検索キーからハッシュ値を計算し、検索キーのハッシュ値と同一の範囲の値が割り当てられた複数の記憶部のうち、前記検索キーのハッシュ値に対応する値を持つ記憶部に、前記検索キーと検索キーに対応する情報とを格納し、格納された検索キーを情報検索に利用する情報格納検索装置の情報格納方法であって、
記憶部選択部が、前記検索キーの前方のみを用いて検索キーのハッシュ値を計算し、複数の記憶部の中から、前記検索キーのハッシュ値に対して直近の値が割り当てられた記憶部を選択する記憶部選択ステップと、
前記選択された記憶部に、前記検索キーと検索キーに対応する情報とを、木表現によって格納する記憶ステップと、を有し、
前記記憶部選択部は、
検索キーの先頭側の文字の値ほど重み付けを大きくしてハッシュ値の計算を行うことを特徴とする情報格納検索装置の情報格納方法。
【請求項４】
前記記憶部選択部は、
ハッシュ値の計算に用いられる検索キー中の各文字の値に、−１以上０未満のｄの値を先頭からの文字順ｉで累乗した値を乗算することにより、重み付けを行うことを特徴とする請求項３記載の情報格納検索装置の情報格納方法。
【請求項５】
請求項１または２に記載の情報格納検索装置を構成する各手段として、コンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列を検索キーとし、その検索キーに対応する情報（例えば、値）を格納，検索する情報格納検索装置に関する。
【背景技術】
【０００２】
従来から、文字列を検索キーとし、検索キーとその検索キーに対応する情報（例えば、値）とを格納する連想配列の技術として、ハッシュや木構造による方法が知られている。
【０００３】
しかしながら、多数の検索キーを格納する場合、単一の記憶部には収まりきらないため、複数の記憶部を用いて格納することになる。このように、複数の記憶部を用いた場合には、各検索キーをどの記憶部に格納するかの選択が行われる。この選択方法としては、検索キーとなる文字列を数値化し、その数値を記憶部の総数で除した際の剰余（以下、剰余演算と称する）により決定する方法が一般的である。
【０００４】
しかし、格納すべき検索キーの総数が増え、記憶容量が足りなくなった場合には記憶部を増やす必要がある。この場合、前記剰余演算によって検索キーを格納する記憶部を選択する方法では、概ねすべての検索キーの格納箇所が変更になってしまい、効率が非常に悪いという問題点があった。
【０００５】
この問題を解決する方法として、コンシステントハッシュ（例えば、非特許文献１参照）が知られている。このコンシステントハッシュは、検索キーに対応する数値（ハッシュ値）と同じ範囲に、各記憶部に対応する数値を割り当て、検索キーに対応する数値（ハッシュ値）の直近の値を持つ記憶部に検索キーを格納する方法である。これにより、記憶部の追加や削減があった場合においても、検索キーの格納箇所の変更を最小限に留めることが可能となる。
【０００６】
一方、文字列の検索においては、前方一致検索の需要が多い。この前方一致検索は、通常、二分木やパトリシア（例えば、非特許文献２参照）といったような木表現によって文字列の集合を格納することにより実現可能である。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Ｄａｖｉｄ  Ｋａｒｇｅｒ，Ｅｒｉｃ  Ｌｅｈｍａｎ，Ｔｏｍ  Ｌｅｉｇｈｔｏｎ，ｍａｔｈｈｅｗ  Ｌｅｖｉｎｅ，Ｄａｎｉｅｌ  Ｌｅｗｉｎ  ａｎｄ  Ｒｉｎａ  Ｐａｎｉｇｒａｈｙ“Ｃｏｎｓｉｓｔｅｎｔ  Ｈａｓｈｉｎｇ  ａｎｄ  Ｒａｎｄｏｍ  Ｔｒｅｅ：Ｄｉｓｔｒｉｂｕｔｅｄ  Ｃａｃｈｉｎｇ  Ｐｒｏｔｏｃｏｌｓ  ｆｏｒ  Ｒｅｌｉｅｖｉｎｇ  Ｈｏｔ  Ｓｐｏｔｓ  ｏｎ  ｔｈｅ  Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ”．Ｉｎ  ＡＣＭ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｔｈｅｏｒｙ  ｏｆ  Ｃｏｍｐｕｔｉｎｇ，１９９７，ｐｐ．６５４−６６３．
【非特許文献２】Ｒ．セジウィック著（野下浩平，星守，佐藤創，田口東  共訳），「アルゴリズム」，第２巻，近代科学社，１９９６，ｐｐ．６８−７２。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、前記コンシステントハッシュによる情報格納方法は、以下に示すような問題点があった。
【０００９】
前記コンシステントハッシュによる情報格納方法は、各記憶部（格納ノード）が木構造の場合、木構造のメリットである前方一致検索を行うことができなかった。
【００１０】
すなわち、検索キーのハッシュ値に応じて、検索キーを格納する記憶部を決定することにより、少しでも違う検索キー（文字列）に対しても異なる記憶部が選択されることになる。そのため、例えば、接頭辞を共有するような検索キー（文字列）同士も異なる記憶部に格納されてしまい、前方一致検索を行うことができなかった。
【００１１】
本発明は、上記の課題を解決するためのものであり、記憶部の追加や削減があった場合においても情報の格納箇所の変更を最小限に抑制すると共に、個々の記憶部において前方一致検索が可能な情報格納検索装置を提供することが主な課題となる。
【課題を解決するための手段】
【００１２】
本発明の一態様は、検索キーからハッシュ値を計算し、検索キーのハッシュ値と同一の範囲の値が割り当てられた複数の記憶部のうち、前記検索キーのハッシュ値に対応する値を持つ記憶部に、前記検索キーと検索キーに対応する情報とを格納し、格納された検索キーを情報検索に利用する情報格納検索装置であって、前記検索キーの前方のみを用いて該検索キーのハッシュ値を計算し、複数の記憶部の中から、前記検索キーのハッシュ値に対して直近の値が割り当てられた記憶部を、前記検索キーと検索キーに対応する情報とを格納する記憶部として選択する記憶部選択部を設け、前記選択された記憶部に、前記検索キーと検索キーに対応する情報とを木表現で格納することを特徴とする。
【００１３】
また、本発明の別の態様は、検索キーからハッシュ値を計算し、検索キーのハッシュ値と同一の範囲の値が割り当てられた複数の記憶部のうち、前記検索キーのハッシュ値に対応する値を持つ記憶部に、前記検索キーと検索キーに対応する情報とを格納し、格納された検索キーを情報検索に利用する情報格納検索装置の情報格納方法であって、記憶部選択部が、前記文字列の前方のみを用いて検索キーのハッシュ値を計算し、複数の記憶部の中から、前記検索キーのハッシュ値に対して直近の値が割り当てられた記憶部を選択する記憶部選択ステップと、前記選択された記憶部に、前記検索キーと検索キーに対応する情報とを、木表現によって格納する記憶ステップと、を有することを特徴とする。
【００１４】
なお、本発明は、前記情報格納検索装置を構成する各手段としてコンピュータを機能させるためのプログラムとしても構成することができる。このプログラムはネットワークを通じた態様で提供してもよく、記録媒体に格納した状態でもよい。
【発明の効果】
【００１５】
本発明によれば、記憶部の追加や削減があった場合においても、情報の格納箇所の変更を最小限に抑制すると共に、個々の記憶部において前方一致検索が可能な情報格納検索装置を提供することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】実施形態の情報格納検索装置における情報格納時の処理内容の一例を示すフローチャートである。
【図２】実施形態における情報格納検索装置の構成の一例を示すブロック図である。
【図３】実施形態における情報格納検索装置の一例を示すハードウェア構成図である。
【図４】実施形態で算出されたハッシュ値Ｈを数直線上の動きとして見た場合の説明図である。
【図５】実施形態で算出されたハッシュ値Ｈを円上の動きとして見た場合の説明図である。
【発明を実施するための形態】
【００１７】
本実施形態は、複数の記憶部の中から情報を格納すべき記憶部を選択する際に、検索キー（文字列）すべてを用いてハッシュ値Ｈを計算するのではなく、検索キーの前方のみを用いてハッシュ値Ｈを計算するものである。そして、情報検索時には、ハッシュ値Ｈの計算に用いられなかった範囲（検索キーの後方）を用いて、前方一致検索を行う。
【００１８】
すなわち、検索キーの前方のみを用いてハッシュ値Ｈの計算を行い、情報を格納すべき記憶部を選択する。これにより、前方部分（例えば、接頭辞）を共有する検索キーは同一の記憶部に格納されることとなる。そこで、情報検索時には、検索キーの前方を用いてハッシュ値Ｈを計算して記憶部を特定し、その記憶部内で、情報格納時にハッシュ値Ｈの計算に用いなかった検索キーの後方部分を用いて前方一致検索を行うものである。
【００１９】
しかしながら、情報格納時におけるハッシュ値Ｈの計算に、検索キーの前方の短い部分のみを用いた場合は、記憶部に格納すべき情報が増加した際に、データが複数の記憶部に分散されず偏ってしまう恐れがある。
【００２０】
一方、情報格納時におけるハッシュ値Ｈの計算に、検索キーの前方の長い部分を用いた場合は、前方一致検索が可能な範囲（ハッシュ値Ｈの計算に用いられなかった検索キーの後方部分）が限定されてしまうという問題がある。
【００２１】
また、格納する情報の増減に伴う記憶部の追加，削減に合わせて、単純に、前記ハッシュ値Ｈの計算に用いる文字数の長さを調整した場合には、算出されたハッシュ値Ｈが大幅に変わってしまい、多数の情報の格納場所を変更することになってしまう。
【００２２】
そこで、本実施形態では、検索キーの先頭側の文字ほど重み付けを大きくしてハッシュ値Ｈの計算を行い、ハッシュ値Ｈの計算に用いる検索キーの範囲（前方からの長さ）を柔軟に変更できるようにしたものである。
【００２３】
［実施形態］
≪構成例≫
図１〜図５に基づき本発明の実施形態に係る情報格納検索装置１を説明する。
【００２４】
この情報格納検索装置１は、検索キーと、その検索キーに対応する情報（例えば、値）と、の対を格納するものである。そして、検索時には、検索キーからハッシュ値Ｈを計算して、そのハッシュ値Ｈに対応する記憶部内において、検索キーに対応する情報を取り出すものである。例えば、頻繁に問い合わせられる検索キーに対する検索結果を応答性の高い場所に格納しておくキャッシュ等に用いられる。
【００２５】
この情報格納検索装置１は、図３に示すように、コンピュータにより構成され、通常のコンピュータのハードウェアリソース、即ち、ＲＯＭ１１，ＲＡＭ１２，ＣＰＵ１３，通信インターフェイス（Ｉ／Ｆ）１４，ハードディスクドライブ装置１５，記憶媒体読取装置１６，記憶媒体１７などを備えている。
【００２６】
このハードウェアリソースとソフトウェアリソースとの協同の結果、前記情報格納検索装置１は、図２に示すように、情報を格納する複数の記憶部ａ，ｂ，ｃ，…，ｓと、入力された検索キーに基づいて、情報を格納すべき記憶部を選択する記憶部選択部２と、を備える。
【００２７】
前記記憶部ａ，ｂ，ｃ，…，ｓは検索キーのハッシュ値Ｈと同一の範囲の値が割り当てられている。また、個々の記憶部での格納方法は、木表現である。複数の記憶部ａ，ｂ，ｃ，…，ｓそれぞれは、例えば、１台のコンピュータ等のメモリやハードディスクが想定される。
【００２８】
前記記憶部選択部２は、検索キー（文字列）の前方のみを用いてハッシュ値Ｈを計算する。そして、複数の記憶部ａ，ｂ，ｃ，…，ｓの中から、検索キーに対応するハッシュ値Ｈの直近の値を持つ記憶部を選択する。
【００２９】
≪情報格納処理≫
図１のフローチャートに基づき、本実施形態の情報格納検索装置１における情報格納処理の処理ステップ（Ｓ１〜Ｓ６）を説明する。
【００３０】
前処理：情報格納処理のＳ１〜Ｓ６を行う前に、ユーザは記憶部選択部２に、情報格納時にハッシュ値Ｈの計算に用いる文字数ｋの設定を行う。この文字数ｋは記憶部に格納される情報の数、および記憶部ａ，ｂ，ｃ，…，ｓの数によって設定される。例えば、記憶部に格納される情報の数，記憶部ａ，ｂ，ｃ，…，ｓの数が多い場合は前記文字数ｋに大きな値が設定され、一方、記憶部に格納される情報の数，記憶部ａ，ｂ，ｃ，…，ｓの数が少ない場合は文字数ｋに小さな値が設定される。
【００３１】
なお、記憶部選択部２が文字数ｋを自動設定するようにしても良い。また、格納される情報の増減に伴い、記憶部ａ，ｂ，ｃ，…，ｓを追加，削減した場合には、前記文字数ｋを変更しても良い。
【００３２】
次に、Ｓ１〜Ｓ５の処理によって、記憶部選択部２が、複数の記憶部ａ，ｂ，ｃ，…，ｓの中から、ユーザから与えられた検索キーおよび検索キーに対応する情報を格納すべき記憶部を選択する。
【００３３】
まず、Ｓ１〜Ｓ４の処理によって、検索キーのハッシュ値Ｈを計算する。Ｓ１〜Ｓ４の処理では文字列の先頭から１文字ずつハッシュ値Ｈを計算して、順次算出されたハッシュ値Ｈを加算していく。ハッシュ値Ｈの計算には検索キーの文字列のうち、前処理で設定された前方ｋ文字目までを用いる（ただし、検索キーの文字数がｋ文字未満の場合は、ｋは検索キーの文字数となる）。
【００３４】
Ｓ１；ハッシュ値Ｈ＝０，カウンタＩ＝０に設定する。ここで、カウンタＩの値は、検索キー中における文字の位置（例えば、カウンタＩ＝２の時は、検索キー中の先頭から２番目の文字）を示す。
【００３５】
Ｓ２；カウンタＩの値を１増加させる。
【００３６】
Ｓ３；カウンタＩ（先頭からＩ番目の文字）におけるハッシュ値Ｈを、下記（１）式により算出する。
【００３７】
【数１】
0005416659.tif 000002
【００３８】
Ｓ４；カウンタＩ＝ｋか否か判定する。すなわち、ｋ文字目まで、ハッシュ値Ｈの計算が終了しているか否かを判定する。カウンタＩ＝ｋでない場合はｋ文字目までハッシュ値Ｈの計算が終了していないと判断し、Ｓ２の処理に戻り、Ｓ２〜Ｓ４の処理を繰り返す。カウンタＩ＝ｋの場合は、ｋ文字目まで、ハッシュ値Ｈの計算が終了していると判断し、Ｓ５の処理へ移行する。
【００３９】
なお、カウンタＩ＝ｋの時の前記（１）式は、下記（２）式に置換することができる。そのため、Ｓ１〜Ｓ４の処理の代わりに、下記（２）式を用いて検索キーのハッシュ値Ｈを算出することも可能である。
【００４０】
【数２】
0005416659.tif 000003
【００４１】
この（１），（２）式は、検索キー中の文字が後方に進むに連れてハッシュ値Ｈへの影響が単調に減少するような関数である。すなわち、検索キー（文字列）の先頭側ほど、重み付けを大きくしてハッシュ値Ｈの計算が行われる。
【００４２】
なお、前記（１）式，（２）式中の低減項ｄは、−１＜ｄ＜０を満たすような負の数とする。また、ｉは検索キー中における文字の位置（例えば、ｉ＝２の時は、検索キー中において先頭から２番目の文字）を示す。ｄiとはｄのｉ乗（ｄを先頭からの文字順ｉで累乗した値）を示す。
【００４３】
また、ｒｖはハッシュ値Ｈの最大値を示す。なお、ハッシュ値Ｈの最小値は０である。例えば、語長が３２ビットの計算機においてはｒｖ＝２32−１などが想定される。
【００４４】
ｒｃは検索キーに用いられる各文字に対応する値の最大値である。なお、検索キーに用いられる各文字に対応する値の最小値は０である。例えば、アスキー文字コードに対応する値を用いる場合は、ｒｃ＝２５５が想定される。
【００４５】
ｖｃiは、検索キーのｉ文字目の文字に対応する値（０≦ｖｃi≦ｒｃ）である。
【００４６】
ここで、検索キーの先頭の文字から１文字ずつハッシュ値を計算し、順次算出されたハッシュ値を加算した時のハッシュ値Ｈの変動について説明する。図４は、ハッシュ値Ｈの変動を数直線状の動きとしてみた場合の説明図である。前記（１）式，（２）式で算出されるハッシュ値Ｈは、−１以上０以下の値であるｄの累乗を含む。そのため、検索キーの先頭から１文字ずつハッシュ値を計算し、順次算出されたハッシュ値を加算していくことにより、ハッシュ値Ｈは図４に示すように変動していく。
【００４７】
ただし、前記（１）式，（２）式は剰余演算を含むため、ハッシュ値Ｈの範囲は一周する。そのため、（１）式，（２）式で算出されるハッシュ値Ｈの値は図５に示すように円上の動きとしてみることもできる。
【００４８】
このように、前記（１）式，（２）式では、検索キー中の先頭側の文字ほど重み付けが大きく計算されるため、後方の文字ほどハッシュ値Ｈへの影響は小さくなる。
【００４９】
Ｓ５；次に、記憶部選択部２において、複数の記憶部ａ，ｂ，ｃ，…，ｓの中から、上記のように算出された検索キーのハッシュ値Ｈと、最も近い値を持つ記憶部を特定する。
【００５０】
Ｓ６；記憶部選択部２で選択された記憶部が、検索キーと、その検索キーに対応する情報を格納する。なお、本実施形態では、個々の記憶部では、木表現によって検索キーとその検索キーに対応する情報とを格納することとする。
【００５１】
≪情報検索処理≫
情報検索時における情報格納検索装置１の処理内容を以下に示す。
【００５２】
情報検索時には、まず、記憶部選択部２において、前記Ｓ１〜Ｓ４の処理または前記（２）式により、入力された検索キーのハッシュ値Ｈを計算する。本実施形態では、検索キーのハッシュ値Ｈを計算する際、前処理で設定されたｋ文字目まで用いるが、検索キーの文字列すべてを用いても良い。次に、記憶部選択部２において、複数の記憶部ａ，ｂ，ｃ，…，ｓの中から、計算されたハッシュ値Ｈと最も近いハッシュ値を持つ記憶部を選択する。そして、特定された記憶部において、情報格納時にハッシュ値Ｈの計算に用いなかった文字列の後方部分を用いて、前方一致検索により、検索キーを検索する。前記特定された記憶部内から入力された検索キーと同一の検索キーが見つかったら、記憶部選択部２に入力された検索キーに対応する情報を出力し、記憶部選択部２からユーザにその情報が提示される。
【００５３】
以下、本実施形態おける情報格納検索装置１の効果を説明する。
【００５４】
本実施形態では、格納すべき記憶部を選択する際に、検索キーとなる文字列すべてによってハッシュ値Ｈを計算するのではなく、文字列の前方のみを用いてハッシュ値Ｈを計算することにより、コンシステントハッシュの良い点を保ちつつ、前方一致検索が可能となる。
【００５５】
すなわち、格納する検索キーの数の増減によって記憶部の追加や削減があった場合においても、複数の記憶部ａ，ｂ，ｃ，…，ｓは検索キーに対応するハッシュ値Ｈと同一の範囲の値が割り当てられているため、検索キーの格納箇所の変更を最小限に抑制することが可能となる。加えて、個々の記憶部での格納方法が木表現であるため、前方部分（例えば、接頭辞）を共有する検索キーは同一の記憶部に格納されることになる。そのため、情報検索時には、検索キーの前方のみを用いてハッシュ値Ｈを計算して検索キーが格納された記憶部を特定し、その記憶部内で情報格納時にハッシュ値Ｈの計算に用いられなかった範囲（文字列の後方部部分）を用いて前方一致検索を行うことが可能となる。
【００５６】
また、本実施形態では、検索キーの先頭側ほど重み付けを大きくして、ハッシュ値Ｈの計算（負の低減項を持つハッシュ値Ｈの計算）を行うため、ハッシュ値Ｈの計算に用いる文字数ｋを変更したとしても、検索キーの格納箇所の変更を最小限に抑制することが可能となる。
【００５７】
すなわち、前記文字数ｋが短い場合は、情報が複数の記憶部ａ，ｂ，ｃ，…，ｓに分散されず偏ってしまう恐れがあり、前記文字数ｋが長い場合には前方一致検索に用いる検索キーの範囲（検索キーの前方文字数ｋ以外の後方部分）が限定されてしまう。この文字数ｋと文字数ｋ以外の範囲のバランスを調整するために、文字数ｋの値を変更したとしても、ハッシュ値Ｈは検索キーの後方ほどハッシュ値Ｈへの影響が小さくなるように計算されるため、ハッシュ値Ｈの値の大幅な変更が抑制される。その結果、検索キーの格納箇所の変更を最小限に抑制することが可能となる。
【００５８】
≪プログラムなど≫
本発明は、前記情報検索装置１を構成する記憶部選択部２および記憶部ａ〜ｓの一部若しくは全部として、コンピュータを機能させるためのプログラムとして構成することもできる。このプログラムでは、Ｓ１〜Ｓ６の全ステップあるいは一部のステップをコンピュータに実行させることが可能である。
【００５９】
このプログラムは、Ｗｅｂサイトや電子メールなどネットワークを通じて提供することができる。また、前記プログラムは、ＣＤ−ＲＯＭ，ＤＶＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ，ＤＶＤ−Ｒ，ＤＶＤ−ＲＷ，ＭＯ，ＨＤＤ，Ｂｌｕ−ｒａｙ  Ｄｉｓｋ（登録商標）などの記録媒体に記録して、保存・配布することも可能である。この記録媒体は、記録媒体駆動装置を利用して読み出され、そのプログラムコード自体が前記実施形態の処理を実現するので、該記録媒体も本発明を構成する。
【００６０】
以上、本発明において、記載された具体例に対してのみ詳細に説明したが、本発明の技術思想の範囲で多彩な変形および修正が可能であることは、当業者にとって明白なことであり、このような変形および修正が特許請求の範囲に属することは当然のことである。
【００６１】
例えば、本実施形態では、情報格納時における検索キーのハッシュ値Ｈの計算に、前記（１）式，（２）式を用いたが、検索キーのハッシュ値Ｈの計算は、検索キーの先頭側の文字ほど重み付けを大きくして計算を行えば、他の計算方法でもよい。
【符号の説明】
【００６２】
１…情報格納検索装置
２…記憶部選択部
ａ，ｂ，ｃ，ｓ…記憶部
【図１】
0005416659.tif 000004
【図２】
0005416659.tif 000005
【図３】
0005416659.tif 000006
【図４】
0005416659.tif 000007
【図５】
0005416659.tif 000008