(57)【要約】【課題】範囲検索時にヒット件数を簡易に取得する。【解決手段】開始キー順位算出部１３は、開始キーを基づいて中間ノードを辿り、対応する件数管理情報を累積してリーフノードに到達したときのレコードの順位を求め、さらにリーフノードを水平検索する。開始キーを含むレコードに到達したときにそのレコードに至るまでの水平検索時のレコード数を求め、これをリーフノードに到達したときのレコードの順位に足して開始キーを含むレコードの順位（Ｎｓｔａｒｔ）を求める。終了キー順位算出部１３も同様に終了キーを含むレコードの順位（Ｎｅｎｄ）を求める。レコード数算出部１５は、開始キー順位算出部１３のＮｓｔａｒｔ出力および終了キー順位算出部１４のＮｅｎｄ出力に基づいて検索範囲に含まれるキーを持つレコードの総数を算出する。【選択図】　図１
2004110216.tif 000002
【特許請求の範囲】
【請求項１】
Ｂ＋ツリー構造のノードから分岐するサブツリーの各々について当該ノードの最初のサブツリーから当該サブツリーに直前で隣接するサブツリーまでのリーフに含まれるレコードの総数を管理情報として当該サブツリーのリンク情報に関連づけて当該ノードに保持し、
検索範囲を規定する開始キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの直前で隣接するサブツリーに関する上記管理情報のレコードの総数を順次に累積し、上記開始キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記Ｂ＋ツリー構造の最初のレコードから上記開始キーを含むレコードに至るまでの、または開始キーを含むレコードがない場合には、上記検索範囲に含まれて上記開始キーに最も近いキーを含むレコードまでの、第１のレコード数を決定し、
上記検索範囲を規定する終了キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの直前で隣接するサブツリーに関する上記管理情報のレコードの総数を順次に累積し、上記終了キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記Ｂ＋ツリー構造の最初のレコードから上記終了キーを含むレコードに至るまでの、または終了キーを含むレコードがない場合には、上記検索範囲に含まれて上記終了キーに最も近いキーを含むレコードに至るまでの、第２のレコード数を決定し、
決定した第２のレコード数に対する、決定した第１のレコード数の差分に基づいて検索範囲に該当するレコードの総数を決定することを特徴とする検索装置。
【請求項２】
上記ノードから分岐するサブツリーの各々について、当該サブツリーと、当該最初のサブツリーから当該サブツリーまでのリーフに含まれるレコードの総数とを関連づけて保持し、上記上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーに直前で隣接するサブツリーに関連づけられるレコードの総数を取得して順次累積する請求項１記載の検索装置。
【請求項３】
上記ノードから分岐するサブツリーの各々について、当該サブツリーと、当該最初のサブツリーから当該サブツリーに直前で隣接するサブツリーまでのリーフに含まれるレコードの総数とを関連づけて保持し、上記上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーに関連づけられるレコードの総数を取得して順次累積する請求項１記載の検索装置。
【請求項４】
Ｂ＋ツリー構造のノードから分岐するサブツリーの各々について当該サブツリーのリーフに含まれるレコードの個数を管理情報として当該ノードに保持し、
検索範囲を規定する開始キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの兄弟に位置するサブツリーのうち先頭から直前で隣接するサブツリーまでのリーフに含まれるレコード数の和を上記管理上情報に基づいて順次に累積し、上記開始キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記Ｂ＋ツリー構造の最初のレコードから上記開始キーを含むレコードに至るまでの、または開始キーを含むレコードがない場合には、上記検索範囲に含まれて上記開始キーに最も近いキーを含むレコードまでの、第１のレコード数を決定し、
上記検索範囲を規定する終了キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの兄弟に位置するサブツリーのうち先頭から直前で隣接するサブツリーまでのリーフに含まれるレコード数の和を順次に上記管理情報に基づいて累積し、上記終了キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記Ｂ＋ツリー構造の最初のレコードから上記終了キーを含むレコードに至るまでの、または終了キーを含むレコードがない場合には、上記検索範囲に含まれて上記終了キーに最も近いキーを含むレコードに至るまでの、第２のレコード数を決定し、
決定した第２のレコード数に対する、決定した第１のレコード数の差分に基づいて検索範囲に該当するレコードの総数を決定することを特徴とする検索装置。
【請求項５】
Ｂ＋ツリー構造のノードから分岐するサブツリーの各々について最初のサブツリーから当該サブツリーに直前で隣接するサブツリーまでのリーフに含まれるレコードの総数を管理情報として当該サブツリーのリンク情報に関連付けて当該ノードに保持させ、上記管理情報を用いて検索範囲に該当するレコードの総数を決定する検索方法において、
検索範囲を規定する開始キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの直前で隣接するサブツリーに関する上記管理情報のレコードの総数を順次に累積し、上記開始キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記Ｂ＋ツリー構造の最初のレコードから上記開始キーを含むレコードに至るまでの、または開始キーを含むレコードがない場合には、上記検索範囲に含まれて上記開始キーに最も近いキーを含むレコードまでの、第１のレコード数を決定するステップと、
上記検索範囲を規定する終了キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの直前で隣接するサブツリーに関する上記管理情報のレコードの総数を順次に累積し、上記終了キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記Ｂ＋ツリー構造の最初のレコードから上記終了キーを含むレコードに至るまでの、または終了キーを含むレコードがない場合には、上記検索範囲に含まれて上記終了キーに最も近いキーを含むレコードに至るまでの、第２のレコード数を決定するステップと、
決定した第２のレコード数に対する、決定した第１のレコード数の差分に基づいて検索範囲に該当するレコードの総数を決定するステップとを有することを特徴とする検索方法。
【請求項６】
Ｂ＋ツリー構造のノードから分岐するサブツリーの各々について最初のサブツリーから当該サブツリーに直前で隣接するサブツリーまでのリーフに含まれるレコードの総数を管理情報として当該ノードに保持させ、上記管理情報を用いて検索範囲に該当するレコードの総数を決定する検索方法において、
検索範囲を規定する開始キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの直前で隣接するサブツリーに関する上記管理情報のレコードの総数を順次に累積し、上記開始キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記Ｂ＋ツリー構造の最初のレコードから上記開始キーを含むレコードに至るまでの、または開始キーを含むレコードがない場合には、上記検索範囲に含まれて上記開始キーに最も近いキーを含むレコードまでの、第１のレコード数を決定するステップと、
上記検索範囲を規定する終了キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの直前で隣接するサブツリーに関する上記管理情報のレコードの総数を順次に累積し、上記終了キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記Ｂ＋ツリー構造の最初のレコードから上記終了キーを含むレコードに至るまでの、または終了キーを含むレコードがない場合には、上記検索範囲に含まれて上記終了キーに最も近いキーを含むレコードに至るまでの、第２のレコード数を決定するステップと、
決定した第２のレコード数に対する、決定した第１のレコード数の差分に基づいて検索範囲に該当するレコードの総数を決定するステップとをコンピュータに実行させるために用いられることを特徴とする検索用コンピュータプログラム。
【請求項７】
Ｂ＋ツリー構造のノードから分岐するサブツリーの各々について最初のサブツリーから当該サブツリーに直前で隣接するサブツリーまでのリーフに含まれるレコードの総数を管理情報として当該ノードに保持し、
検索範囲を規定する開始キーに対する上記Ｂ＋ツリー構造の検索時にとおるサブツリーの各々について当該サブツリーに関する上記管理情報のレコードの総数を順次に累積し、上記累積して得た総数合計を利用して、上記Ｂ＋ツリー構造の最初のレコードから上記開始キーを含むレコードに至るまでの、または開始キーを含むレコードがない場合には、上記検索範囲に含まれて上記開始キーに最も近いキーを含むレコードまでの、第１のレコード数を決定し、
上記検索範囲を規定する終了キーに対する上記Ｂ＋ツリー構造の検索時にとおるサブツリーの各々について当該サブツリーに関する上記管理情報のレコードの総数を順次に累積し、上記累積して得た総数合計を利用して、上記Ｂ＋ツリー構造の最初のレコードから上記終了キーを含むレコードに至るまでの、または終了キーを含むレコードがない場合には、その直前のレコードに至るまでの、第２のレコード数を決定し、
決定した第２のレコード数に対する、決定した第１のレコード数の差分に基づいて検索範囲に該当するレコードの総数を決定することを特徴とする検索装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、Ｂ＋ツリー構造を用いた検索技術に関し、とくに、Ｂ＋ツリー構造中に、件数を管理する情報を追加し、指定したキーの範囲にヒットするレコード数を、検索結果と同時に得ることができるようにしたものである。
【０００２】
【従来の技術】
サーチエンジンなどを具現化するために、語をキーとして、文書ＩＤを検索する索引を構成する。その際に、指定した語に対する、検索結果として、文書のリストだけでなく、検索結果件数を表示することが求められる。なぜならば、通常、ヒットした文書のリストは、限定された件数しか表示されないので、リストに表示された件数が、検索結果全体の内のどの程度かを知ることが重要であるからである。
【０００３】
このためには、語の索引を用意し、指定した語を含む文書が何件あるかを管理する方法があるが、この方式では、語から検索結果を得る為に、語の索引と、文書の索引の両方を検索しなければならず、検索時間が増大する。
【０００４】
【発明が解決する課題】
この発明は、以上の事情を考慮してなされたものであり、検索結果の件数を知るための索引を別途検索することなしに、検索結果の件数を知ることができる検索技術を提供することを目的としている。
【０００５】
【課題を解決するための手段】
この発明によれば、上述の目的を達成するために、特許請求の範囲に記載のとおりの構成を採用している。ここでは、発明を詳細に説明するのに先だって、特許請求の範囲の記載について補充的に説明を行なっておく。
【０００６】
まず、この発明の原理的な説明を行う。
【０００７】
この発明の原理的な構成においては、文書の索引のＢ＋ツリー構造中に、各ノード以下に含まれる文書数を格納するように、構成する。そして、検索と同時に、検索結果件数が得られるようし、検索時間を半減させる。
【０００８】
改良されたＢ＋ツリー構造では、例えば、所定のノードから分岐するサブツリーのリーフ中に格納されるレコード数（文書数）を、サブツリーに対応つけて格納する。
【０００９】
また、他の態様の改良されたＢ＋ツリー構造では、所定のノードから分岐する最初のサブツリーから当該サブツリーに至るまでのすべてのサブツリーのリーフ中に格納されるレコード数を、当該サブツリーに対応つけて格納する。
【００１０】
検索範囲を指定した検索において、範囲の開始キーと最終キーを検索キーとして、それぞれ、以下のステップで検索を行なう。検索キーと一致するものがない場合は、検索範囲に含まれ、かつ検索キーに最も近いキーを持つレコードに位置づけることにする。下記ステップにて、ルートからリーフへ順にノードを選択してツリーを下るステップを垂直探索（垂直検索）と呼ぶ。また、リーフノードの中から指定したキーを持つレコードを選択するステップを水平探索（水平検索）と呼ぶ。
【００１１】
［ステップ１］：順位数を０に設定する。
［ステップ２］：Ｂ＋ツリー構造のルートを得る。
［ステップ３］：キーを選択する。
［ステップ４］：選択したキーの左側（小さい側）に隣接するキーに対応つけられたレコード数を順位数に足す。選択したノードが最左端（ＬＥＦＴ）であれば、順位数には０を加える。
［ステップ５］：指定したノードがリーフになるまで、ステップ３とステップ４とを実施する。
［ステップ６］：リーフノードの場合、指定したキーを持つレコードを選択する。
［ステップ７］：リーフノード中のレコードの順位を、順位数に加える。
【００１２】
つぎに、開始キーに対する順位数（Ｎｓｔａｒｔとする）と、最終キーに対する順位数（Ｎｅｎｄとする）とから、ヒット件数を計算する。最終キーと一致するレコードがあった場合は、ヒット件数は、Ｎｅｎｄ−Ｎｓｔａｒｔ＋１として、計算される。最終キーに一致するレコードが無い場合は、ヒット件数は、Ｎｅｎｄ−Ｎｓｔａｒｔとして、計算される。
【００１３】
以上の構成をとることで、ヒット件数を管理する目的で語索引を保持する必要が無いばかりでなく、語索引を検索し、件数を得るという余計な処理がなくなり、高速に検索ができる。
【００１４】
さらにこの発明を説明する。
【００１５】
この発明の一側面によれば、検索装置において、（ｉ）Ｂ＋ツリー構造のノードから分岐するサブツリーの各々について最初のサブツリーから当該サブツリーの直前のサブツリーまでのリーフに含まれるレコードの総数を管理情報として当該ノードに保持し、（ｉｉ）検索範囲を規定する開始キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの直前で隣接するサブツリーに関する上記管理情報のレコードの総数を順次に累積し、上記開始キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記開始キーを含むレコードに至るまでの、または開始キーを含むレコードがない場合には、上記検索範囲に含まれて上記開始キーに最も近いキーを含むレコードまでの、第１のレコード数を決定し、（ｉｉｉ）上記検索範囲を規定する終了キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの直前で隣接するサブツリーに関する上記管理情報のレコードの総数を順次に累積し、上記終了キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記終了キーを含むレコードに至るまでの、または終了キーを含むレコードがない場合には、上記検索範囲に含まれて上記終了キーに最も近いキーを含むレコードに至るまでの、第２のレコード数を決定し、（ｉｖ）決定した第２のレコード数に対する、決定した第１のレコード数の差分に基づいて検索範囲に該当するレコードの総数を決定する。
【００１６】
この構成においては、Ｂ＋ツリー構造中のレコード数に関する情報に基づいてＢ＋ツリー構造の検索時にヒット件数を計算できる。この例では、ノードから分岐するサブツリーの各々について最初のサブツリーから当該サブツリーの直前のサブツリーまでのリーフに含まれるレコードの総数を当該サブツリーの直前のサブツリーに関連づけて管理情報として保持しているので、予め、最初のサブツリーから当該サブツリーの直前までのリーフに含まれるレコードを累積して求めてあるので、検索時にそのような累積を行う必要がなく高速な処理が可能である。
【００１７】
また、この発明の他の側面によれば、検索装置において、（ｉ）Ｂ＋ツリー構造のノードから分岐するサブツリーの各々について当該リーフに含まれるレコードの個数を管理情報として当該ノードに保持し、（ｉｉ）検索範囲を規定する開始キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの直前のサブツリーまでのリーフに含まれるレコードを上記管理上情報に基づいて順次に累積し、上記開始キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記開始キーを含むレコードに至るまでの、または開始キーを含むレコードがない場合には、上記検索範囲に含まれて上記開始キーに最も近いキーを含むレコードまでの、第１のレコード数を決定し、（ｉｉｉ）上記検索範囲を規定する終了キーに対する上記Ｂ＋ツリー構造の垂直検索時にとおるサブツリーの各々について当該サブツリーの直前のサブツリーまでのリーフに含まれるレコードを順次に上記管理情報に基づいて累積し、上記終了キーに対する上記Ｂ＋ツリー構造のリーフノードに含まれるレコードの水平検索時にとおるレコードの数を上記累積した値に加算して、上記終了キーを含むレコードに至るまでの、または終了キーを含むレコードがない場合には、上記検索範囲に含まれて上記終了キーに最も近いキーを含むレコードに至るまでの、第２のレコード数を決定し、（ｉｖ）決定した第２のレコード数に対する、決定した第１のレコード数の差分に基づいて検索範囲に該当するレコードの総数を決定する。
【００１８】
この構成においても、Ｂ＋ツリー構造中のレコード数に関する情報に基づいてＢ＋ツリー構造の検索時にヒット件数を計算できる。この例では、検索時に、ノードから分岐するサブツリーの各々について最初のサブツリーから当該サブツリーの直前のサブツリーまでのリーフに含まれるレコードの総数を累積する。その分処理負荷が大きくなるが、Ｂ＋ツリーを作成する時にそのような累積処理を行う必要がない。
【００１９】
なお、この発明は装置またはシステムとして実現できるのみでなく、方法としても実現可能である。また、そのような発明の一部をソフトウェアとして構成することができることはもちろんである。またそのようなソフトウェアをコンピュータに実行させるために用いるソフトウェア製品もこの発明の技術的な範囲に含まれることも当然である。
【００２０】
この発明の上述の側面およびこの発明の他の側面は特許請求の範囲に記載され、以下実施例を用いて詳細に説明される。
【００２１】
【発明の実施の形態】
以下、この発明の実施例の検索システムについて説明する。
【００２２】
図１は、実施例の検索システムを模式的に示しており、この図において、検索システムは、検索キー入力部１０、検索部１１、インデクス保持部１２、開始キー順位算出部１３、終了キー順位算出部１４、レコード数算出部１５等を含んで構成されている。
【００２３】
検索キー入力部１０は、検索範囲を指定する開始キーおよび終了キーを入力する。検索部１１は、開始キーおよび終了キーについてそれぞれインデクス保持部１２のＢ＋ツリー構造を参照して検索を行い、「開始キーを含むレコード」（開始キーを含むレコードがない場合には検索範囲において最も開始キーに近いキーを含むレコード。以下同様）および「終了キーを含むレコード」（開始キーを含むレコードがない場合には検索範囲において最も開始キーに近いキーを含むレコード。以下同様）を位置決めし、この後、「開始キーを含むレコード」から「終了キーを含むレコード」に水平検索を行い、検索範囲のキーを含む値（例えば文書ＩＤ）を取り出し、検索結果として出力する。この場合、検索結果が多数に上るときには、検索を所望数のレコードまでで取りやめるようにすることが多い。
【００２４】
インデクス保持部１２に保持されているＢ＋ツリー構造は、例えば、図２に示すように、管理ノード、中間ノードおよびリーフノードにより記述される。管理ノードは、図３に示すように、複数のＢ＋ツリーを管理する。各Ｂ＋ツリーはスキーマによりキー、バリュー等のバイト数等が規定される。管理ノードにより、検索キーが対応するＢ＋ツリーに振り分けられる。中間ノードは、分岐を制御するキーと分岐する下位ノード（サブツリー）が規定される。また、この実施例に特有の構成として、各下位ノードについてそのサブツリーのリーフノードに属するレコードの数を件数管理情報として保持している。リーフノードは図４に示すようにキーとバリュー（例えば文書ＩＤ）との複数の対を含んでいる。リーフノードは、中間ノードにおいて分岐を制御するキーについても、そのキーとバリューとの対を含んでいる。また、つぎのリーフノードへのポインタも含まれ、いわゆる水平検索を行える。
【００２５】
検索に際しては、図６に示すように、管理ノードによりＢ＋ツリーが決定され、そのルートノードから中間ノードを沿って垂直検索が行われ、リーフノードに当直した後、水平検索が行われる。
【００２６】
ここで、図７を用いて、中間ノードの件数管理情報について説明する。図７において、中間ノードは、第１段目の中間ノード（管理ノードのつぎのノード）を例にすると、キー「ＬＥＦＴ」、Ｋ（０）１、Ｋ（０）２、Ｋ（０）３、・・・により下位ノード（サブツリー）に分岐する。「Ｋ（０）」は第１段目のキーであることを示す。第ｎ段目の中間ノードのキーは同様に「Ｋ（ｎ−１）」で表す。「ＬＥＦＴ」からＫ（０）１までの範囲のキーが分岐する下位ノード（サブツリー）のリーフノードに格納されるレコードの数Ｒ（０）１を、下位ノード０の件数管理情報にストアする。Ｋ（０）１からＫ（０）２までの範囲のキーが分岐する下位ノード（サブツリー）のリーフノードに格納されるレコードの数ｒ（０）１を求め、これにその前の下位ノードのレコードの数（この場合Ｒ０）を足して、Ｒ（０）１＝Ｒ（０）１＋ｒ（０）１を得、下位ノード１の件数管理情報に格納する。キーＫ（０）ＮからキーＫ（０）Ｎ＋１までの範囲のキーが分岐する下位ノードＮのリーフノードに格納されるレコードｒ（０）Ｎを求め、これにその直前の下位ノードＮ−１の件数管理情報（Ｒ（０）Ｎ−１）を足して、下位ノードＮの件数管理情報Ｒ（０）Ｎ＝Ｒ（０）Ｎ−１＋ｒ（０）Ｎを得る。同様に最後の下位ノードまで、件数管理情報を取得して管理する。
【００２７】
開始キーおよび終了キーを用いて検索するときに、中間ノードの件数管理情報を用いてリーフノードに到達した時点の順位を求めることができる。すなわち、順次辿っていく中間ノードにおいて、つぎに辿る下位の中間ノードを決定する。このとき、その左側の中間ノードの件数管理情報を求める。つぎに辿る中間ノードでも同様にし、この操作をリーフノードに至るまで繰り返す。例えば、第１段から第Ｎ段のそれぞれのキーＫ（０）Ａ、Ｋ（１）Ｂ、Ｋ（２）Ｃ、・・・、Ｋ（Ｎ−１）Ｄを辿っていくとすると、中間ノード０のキー（下位のノードまたはサブツリー。以下同様）Ｋ（０）Ａ−１の件数管理情報Ｒ（０）Ａ−１、中間ノード１のキーＫ（１）Ｂ−１の件数管理情報Ｒ（１）Ｂ−１、中間ノード２のキーＫ（２）Ｃ−１の件数管理情報Ｒ（２）Ｃ−１、・・・中間ノード（Ｎ−１）のキーＫ（Ｎ−１）Ｄ−１の件数管理情報Ｒ（Ｎ−１）Ｄ−１を累積してリーフノードに到達したときレコードの順位を得ることができる。
【００２８】
なお、後述するように、中間ノードの件数管理情報としてそのサブツリーに含まれるレコードの総数（その左側の件数を含まない）を用いてもよい。この場合、辿る中間ノードのキーにおいて、その左側のキーの件数管理情報を累積するようにすれば、同様な操作となる。
【００２９】
図１に戻る。
【００３０】
開始キー順位算出部１３は、上述のとおり、開始キーを基づいて中間ノードを辿り、対応する件数管理情報を累積してリーフノードに到達したときのレコードの順位を求め、さらにリーフノードを水平検索する。開始キーを含むレコードに到達したときにそのレコードに至るまでの水平検索時のレコード数を求め、これをリーフノードに到達したときのレコードの順位に足して開始キーを含むレコード（開始キーを含むレコードがない場合には、検索範囲に含まれて開始キーに最も近いキーを含むレコード）の順位（Ｎｓｔａｒｔ）を求める。
【００３１】
終了キー順位算出部１３も同様である。すなわち、終了キー順位算出部１３は、終了キーに基づいて中間ノードを辿り、対応する件数管理情報を累積してリーフノードに到達したときのレコードの順位を求め、さらにリーフノードを水平検索する。終了キーを含むレコードに到達したときにそのレコードに至るまでの水平検索時のレコード数を求め、これをリーフノードに到達したときのレコードの順位に足して終了キーを含むレコード（開始キーを含むレコードがない場合には、検索範囲に含まれて開始キーに最も近いキーを含むレコード）の順位（Ｎｅｎｄ）を求める。
【００３２】
レコード数算出部１５は、開始キー順位算出部１３のＮｓｔａｒｔ出力および終了キー順位算出部１４のＮｅｎｄ出力に基づいて検索範囲に含まれるキーを持つレコードの総数を算出する。終了キーを含むレコードが有る場合には、そのレコードの総数はＮｅｎｄ−Ｎｓｔａｒｔ＋１であり、終了キーを含むレコードがない場合には、そのレコードの総数はＮｅｎｄ−Ｎｓｔａｒｔである。
【００３３】
図８は、この実施例の動作を示している。図８においては、語および文書ＩＤを用いて範囲検索における検索範囲のレコード（文書）の総数を算出する。総数の算出の処理は以下のとおりである。なお、検索者が語を入力すると、文書ＩＤの範囲が自動的に０ｘ３０００（１６進数表示）から０ｘ３ｆｆｆとされる。
【００３４】
［ステップＳ１０］：検索範囲を受け取る。
［ステップＳ１１］：Ｂ＋ツリーを決定する。
［ステップＳ１２］：開始キーを検索キーとする。
［ステップＳ１３］：検索キーが該当するキーを、選択する
［ステップＳ１４］：順位算出ルーチンを実施する。図９参照。
［ステップＳ１５］：順位算出ルーチンで取得した順位をＮｓｔａｒｔとする。。
［ステップＳ１６］：終了キーを検索キーとする。
［ステップＳ１７］：順位算出ルーチンを実施する。
［ステップＳ１８］：順位算出ルーチンで取得した順位をＮｅｎｄとする。
［ステップＳ１９］：終了キーに該当するレコードがあるか。あればステップＳ２０ヘ進み、なければステップＳ２１へ進む。
［ステップＳ２０］：検索範囲の件数をＮｅｎｄ−Ｎｓｔａｒｔ＋１で算出する。
［ステップＳ２１］：検索範囲の件数をＮｅｎｄ−Ｎｓｔａｒｔで算出する。
【００３５】
順位算出ルーチンはつぎのとおりである。
【００３６】
［ステップＳ３０］：順位を０にリセットする。
［ステップＳ３１］：中間ノードにおいて検索キーが該当するキーの左のキーの件数管理情報を順位に累積する。
［ステップＳ３２］：検索キーが該当するキーの下位のノードに進む。
［ステップＳ３３］：ノードが中間ノードかリーフノードかを判別する。中間ノードであれば、ステップＳ３１に戻る。リーフノードであればステップＳ３４に進む。
［ステップＳ３４］：リーフノードに到達したときのレコードから検索キーに対応するキーのレコードまで水平検索で辿る。
［ステップＳ３５］：水平検索で辿ったレコードの数を上述の順位に累積する。
【００３７】
なお、中間ノードの件数管理情報としてそのサブツリーのリーフノードのレコードの総数を用いる場合には、図９の処理に変えて図１０の処理を行う。
【００３８】
［ステップＳ４０］：順位を０にリセットする。
［ステップＳ４１］：中間ノードにおいて、最初のキーから、検索キーが該当するキーの左のキーまでの件数管理情報を加算し、順位に累積する。
［ステップＳ４２］：検索キーが該当するキーの下位のノードに進む。
［ステップＳ４３］：ノードが中間ノードかリーフノードかを判別する。中間ノードであれば、ステップＳ４１に戻る。リーフノードであればステップＳ４４に進む。
［ステップＳ４４］：リーフノードに到達したときのレコードから検索キーに対応するキーのレコードまで水平検索で辿る。
［ステップＳ４５］：水平検索で辿ったレコードの数を順位に累積する。
【００３９】
なお、上述では語と文書ＩＤで検索範囲を指定したが、語のみで検索範囲を指定することもできる。
【００４０】
また、上述実施例では、図１において模式的な構成を示したが、図１１に示すようなイントラネット環境で実装することができる。この例では、ウェブサーバ１００、アプリケーションサーバ１０１、検索システム１０２、ディレクトリサーバ１０３等で検索サービスを提供する。検索システム１０２は図１で示したような機能を実現するものであり、インデクス保持部１０４を有する。クライアント端末１０５からウェブサーバ１００にアクセスし、検索要求を検索システム１０２に送り、上述のとおりの検索を行い、検索結果の一部のリストと、そのレコードの総数とをウェブサーバ１００がクライアント端末１０５に返す。ユーザはレコードの総数を確かめながらリストの内容を評価し、適宜、リスト用いて必要な文書を取得する。図１１では、記録媒体１０６を用いて検索システム１０２に上述の処理を実行するプログラムをインストールしている。もちろんネットワーク１０７等を介してプログラムをダウンロードしてインストールしてもよい。なお、１０８はルータ、１０９はＬＡＮである。
【００４１】
【発明の効果】
以上説明したように、この発明によれば、語の索引を別途用いることなく、キーの検索時にそれに該当するレコードの件数を簡易に求めることができる。
【図面の簡単な説明】
【図１】この発明の実施例の検索システムを模式的に示すブロック図である。
【図２】上述実施例のＢ＋ツリー構造を説明する図である。
【図３】上述実施例のＢ＋ツリー構造の管理ノードを説明する図である。
【図４】上述実施例のＢ＋ツリー構造の中間ノードを説明する図である。
【図５】上述実施例のＢ＋ツリー構造のリーフノードを説明する図である。
【図６】上述実施例の検索の態様を説明する図である。
【図７】上述実施例の件数管理情報を説明する図である。
【図８】上述実施例の検索範囲のレコードの件数を算出する動作を説明するフローチャートである。
【図９】図８の順位算出ステップのサブルーチンを説明するフローチャートである
【図１０】図９の他の例を説明するフローチャートである。
【図１１】上述実施例のイントラネット環境における実装例を説明する図である。
【符号の説明】
１０　　　検索キー入力部
１１　　　検索部
１２　　　インデクス保持部
１３　　　開始キー順位算出部
１３　　　終了キー順位算出部
１４　　　終了キー順位算出部
１５　　　レコード数算出部
１００　　　ウェブサーバ
１０１　　　アプリケーションサーバ
１０２　　　検索システム
１０３　　　ディレクトリサーバ
１０４　　　インデクス保持部
１０５　　　クライアント端末
１０６　　　記録媒体
１０７　　　ネットワーク
１０８　　　ルータ
１０９　　　ＬＡＮ
【図１】
2004110216.tif 000003
【図２】
2004110216.tif 000004
【図３】
2004110216.tif 000005
【図４】
2004110216.tif 000006
【図５】
2004110216.tif 000007
【図６】
2004110216.tif 000008
【図７】
2004110216.tif 000009
【図８】
2004110216.tif 000010
【図９】
2004110216.tif 000011
【図１０】
2004110216.tif 000012
【図１１】
2004110216.tif 000013