以下に、本願の開示する検索システム、情報処理装置および検索方法の実施例を図面に基づいて詳細に説明する。なお、実施例によりこの発明が限定されるものではない。
[検索システムの構成]
図1は、実施例に係る検索システムの構成を示す機能ブロック図である。図1に示すように、検索システム9は、振分サーバ1および複数の検索サーバ2を有する。振分サーバ1および複数の検索サーバ2は、ネットワーク3で接続される。
[振分サーバの構成]
振分サーバ1は、通信インタフェース11と、記憶部12と、制御部13とを有する。
通信インタフェース11は、各端末装置との間で通信を確立して、各端末装置から領域検索要求を受信したり、各端末装置に領域検索応答を送信したりするインタフェースである。ここで、領域検索要求とは、端末装置の位置のような、特定の位置情報がいずれの領域に含まれるかを検索する要求である。位置情報は、例えば端末装置が現在位置する緯度、経度の情報である。そして、領域検索要求は、例えば端末装置の位置情報や端末装置が搭載するセンサーの識別IDを含む内容となる。領域検索応答とは、領域検索要求に対応する応答であり、検索結果を含む内容となる。なお、通信インタフェース11は、例えば、LANやインターネットなどと接続するネットワークインタフェースカードや、無線アンテナを有する無線通信部などである。
記憶部12は、制御部13が実行するプログラムなどを記憶するとともに、領域インデックスDB121、領域データDB122および前回領域DB123を有する。なお、記憶部12は、例えば、RAM(Random Access Memory)、フラッシュメモリ(flash memory)などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置に対応する。
領域インデックスDB121は、空間内に存在する大量の領域から条件に合った領域を高速に検索するための索引情報(インデックス)である。例えば、領域インデックスDB121は、どの領域がどこにあるのかを示したインデックスをRツリーで保持する。
ここで、領域インデックスDB121に記憶される情報の例を、図3を参照して説明する。図3は、領域インデックスDBに記憶される情報の例を示す図である。図3に示すように、領域インデックスDB121は、ルートノード、中間ノードおよび葉ノードのいずれかを示す領域データで形成されるRツリーを記憶する。ルートノードは、Rツリーに1つ存在する頂点の領域データである。また、葉ノードは、Rツリーの最底辺のノードであり、自らは子ノードを含まず、検索対象となる多次元の領域データを1つ以上持つ。それ以外の木の中間に存在するノードは、中間ノードであり、それぞれ子ノードを1つ以上持つ。
図3の例では、ルートノードがR1であり、R1の子ノード且つ中間ノードがR10、R11である。R1がR10、R11の矩形領域を全て含む矩形領域となっている。中間ノードR10の子ノードである葉ノードがR100、R101である。R10がR100、R101の矩形領域を全て含む矩形領域となっている。中間ノードR11の子ノードである葉ノードがR110、R111である。R11がR110、R111の矩形領域を全て含む矩形領域となっている。そして、葉ノードであるR100は、検索対象となる領域データ1、2、3を持っている。葉ノードであるR101は、検索対象となる領域データ4、5を持っている。葉ノードであるR110は、検索対象となる領域データ6、7を持っている。葉ノードであるR111は、検索対象となる領域データ8、9を持っている。なお、領域データ1〜9とは、例えば領域データを識別可能な領域ID(IDentification)を含むデータとしても良い。
領域インデックスDB121は、Rツリーの実体としてルート、中間、葉の各ノードの情報を記憶する。図4は、領域インデックスDBに記憶されるルートノードの情報の例を示す図である。図4に示すように、領域インデックスDB121は、ルートノードR1の情報として、「ノード種別、矩形領域、子ノードリスト」を記憶する。「ノード種別」は、ノードがルート、中間、葉のいずれかであるかを示す情報である。「矩形領域」は、子ノードの担当領域を全て含む最小外接矩形の情報である。最小外接矩形とは、子ノードの領域を全て含む最小の矩形領域をいう。「子ノードリスト」は、当該ノードの子ノードへのリンクポインタのリストである。
図4の例では、ルートノードR1は、x、yの2次元データを管理し、「x1=35.5、y1=139.0」が担当領域の最小点であり、「x2=35.9、y2=139.5」が担当領域の最大点であることを示す。すなわち、R1が担当する領域は、両点を頂点として各次元軸に直交した4直線で作られる領域である。また、R1は、子ノード「R10、R11」へのポインタのリストを記憶する。
図5は、領域インデックスDBに記憶される中間ノードの情報の例を示す図である。図5に示すように、領域インデックスDB121は、中間ノードの情報として、「ノード種別、矩形領域、子ノードリスト」を記憶する。ここで記憶される「ノード種別」、「矩形領域」、「子ノードリスト」は、図4と同様であるので詳細な説明は省略する。領域インデックスDB121は、R10、R11について、図5の情報を記憶する。
図5の場合、中間ノードR10は、x、yの2次元データを管理し、「x1=35.5、y1=139.2」が担当領域の最小点であり、「x2=35.7、y2=139.3」が担当領域の最大点であることを示す。すなわち、中間ノードR10が担当する領域は、両点を頂点として各次元軸に直交した4直線で作られる領域である。また、R10は、子ノード「R100、R101」へのポインタのリストを記憶する。
図6は、領域インデックスDBに記憶される葉ノードの情報の例を示す図である。図6に示すように、領域インデックスDB121は、葉ノードの情報として、「ノード種別、矩形領域、データリスト」を記憶する。ここで記憶される「ノード種別」、「矩形領域」は、図4と同様であるので詳細な説明は省略する。「データリスト」は、管理する多次元の領域データである。領域インデックスDB121は、R100、R101、R110、R111について、図6の情報を記憶する。
図6の場合、葉ノードR100は、x、yの2次元データを管理し、「x1=35.5、y1=139.2」が担当領域の最小点であり、「x2=35.6、y2=139.3」が担当領域の最大点であることを示す。すなわち、葉ノードR100が担当する領域は、両点を頂点として各次元軸に直交した4直線で作られる領域である。また、R100は、領域データ「D1、D2、D3、D4」へのポインタのリストを記憶する。領域データへのポインタの一例として、領域データを識別する領域IDが用いられる。各領域データの実体は、後述する領域データDB122に格納されている。
図2に戻って、領域データDB122は、複数の領域データを管理するとともに、複数の領域データのそれぞれについて、領域データの領域と重複する他の領域の領域データを管理する。
ここで、領域データDB122のデータ構造の一例を、図7を参照して説明する。図7は、領域データDBのデータ構造の一例を示す図である。図7に示すように、領域データDB122は、領域ID122a毎に、データ名122b、領域情報122cおよび重複領域122dを対応付けて記憶する。領域ID122aは、領域データを一意に識別可能なIDを示す。データ名122bは、領域IDで示される領域データのデータ名を示す。領域情報122cは、領域IDで示される領域データの実体である具体的な範囲を示す。重複領域122dは、領域IDで示される領域データと重複する他の領域データの領域IDを示す。例えば、領域ID122aが「00001」である場合、データ名122bとして「A商店X店舗近辺」、領域情報122cとして「円領域:緯度35.491、経度139.650、半径100m」と記憶している。そして、領域ID122aが「00001」である場合の重複領域122dとして「00005、00034」の2個の領域IDを記憶している。なお、領域データDB122は、予め生成されているものとする。
図2に戻って、前回領域DB123は、同じ要求元から再び領域検索要求があった場合、前回、領域検索要求があったときに検索できた領域情報を当該要求元に対応付けて管理する。ここで、前回領域DB123のデータ構造の一例を、図8を参照して説明する。図8は、前回領域DB123のデータ構造の一例を示す図である。図8に示すように、前回領域DB123は、センサーID123a毎に、前回検索領域123bを対応付けて記憶する。センサーID123aは、領域検索要求の要求元のセンサーの識別IDを示す。前回検索領域123bは、前回、領域検索要求があったときに検索できた領域情報を示す。例えば前回検索領域123bには、検索できた場合に検索できた領域の領域IDが記憶され、検索できなかった場合に「未検出」が記憶される。一例として、センサーID123aが「SensorX」である場合、前回検索領域123bとして「未検出」と記憶している。また、センサーID123aが「SensorY」である場合、前回検索領域123bとして「領域ID00034」と記憶している。
図2に戻って、制御部13は、インデックス割当部131、振分部132、および領域データ追加部133を有する。制御部13は、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。
インデックス割当部131は、Rツリーを複数の部分に分割し、分割したそれぞれの部分をそれぞれの検索サーバ2に割り当てる。例えば、インデックス割当部131は、領域インデックスDB121を用いて、Rツリーのルートノードより下位の所定の深度にあるノードを、それぞれの検索サーバ2に1つ以上割り当てる。そして、インデックス割当部131は、検索サーバ2に割り当てられたノードを、当該検索サーバ2のルートノードに設定する。さらに、インデックス割当部131は、設定したルートノード配下のノードの情報を、割り当てた検索サーバ2の領域インデックスDB221にコピーする。すなわち、インデックス割当部131は、ルートノードの矩形領域を、当該ルートノードを割り当てた検索サーバ2の担当領域とする。なお、所定の深度として、ノードの数が検索サーバ2の数より大きくなるような数が選択される。
また、インデックス割当部131は、検索サーバ2に割り当てられたルートノード配下のノードに付随する領域データを、当該検索サーバ2の領域データDB222にコピーする。例えば、インデックス割当部131は、領域データDB122に記憶された情報のうち、検索サーバ2に割り当てられたルートノード配下の葉ノードに属する領域データの情報を、当該検索サーバ2の領域データDB222にコピーする。
また、インデックス割当部131は、検索サーバ2が担当する各領域データについて、領域データの領域に重複する重複領域122dに含まれる領域データのうち検索サーバ2が担当しない領域データを、重複領域キャッシュデータとする。そして、インデックス割当部131は、重複領域キャッシュデータを検索サーバ2にコピーする。これは、検索サーバ2が担当しない重複領域の領域データを重複領域キャッシュデータとして当該検索サーバ2に保持させるためである。
また、インデックス割当部131は、領域インデックスDB121に記憶されたノードの情報のうち、検索サーバ2にルートノードとして割り当てた中間ノードの情報に当該検索サーバ2の宛先を記録する。つまり、インデックス割当部131は、検索サーバ2にルートノードとして割り当てたノードを、振分サーバ1の葉ノードとして検索サーバ2のルートノードとリンクさせる。振分サーバ1の葉ノードと検索サーバ2のルートノードとは、同じ情報を有するノードであるからである。
ここで、振分サーバ1の領域インデックスDBに記憶される葉ノードの情報について、図9を参照して説明する。図9は、振分サーバの領域インデックスDBに記憶される葉ノードの情報の例を示す図である。図9に示すように、領域インデックスDB121は、葉ノードの情報として、「ノード種別、矩形領域、検索サーバの宛先」を記憶する。「検索サーバの宛先」は、この葉ノードをルートノードとして割り当てられた検索サーバ2の宛先である。「検索サーバの宛先」は、例えば、検索サーバ2のURLである。また、ここで記憶される「ノード種別」、「矩形領域」は、図4と同様であるので詳細な説明は省略する。
図9の場合、葉ノードR1は、x、yの2次元データを管理し、「x1=35.5、y1=139.25」が担当領域の最小点であり、「x2=35.65、y2=139.30」が担当領域の最大点であることを示す。すなわち、葉ノードR1が担当する領域は、両点を頂点として各次元軸に直交した4直線で作られる領域である。また、R1は、検索サーバの宛先として、検索サーバAのURLを記憶する。
また、Rツリーの検索サーバ2への割り当てについて、図10を参照して説明する。図10は、Rツリーの検索サーバへの割り当てについて説明する図である。図10に示すように、深度が2である場合、インデックス割当部131は、Rツリーのルートノードより下位の深度2にあるノードを検索サーバ2に割り当てる。そして、インデックス割当部131は、検索サーバ2に割り当てられたノードを当該検索サーバ2のルートノードに設定する。インデックス割当部131は、検索サーバ2に割り当てられたノードを振分サーバ1の葉ノードに設定する。
ここでは、ノードR1が、検索サーバAのルートノードとして割り当てられているとともに、振分サーバ1の葉ノードとして設定されている。ノードR2が、検索サーバBのルートノードとして割り当てられているとともに、振分サーバ1の葉ノードとして設定されている。ノードR3が、検索サーバCのルートノードとして割り当てられているとともに、振分サーバ1の葉ノードとして設定されている。ノードR4が、検索サーバDのルートノードとして割り当てられているとともに、振分サーバ1の葉ノードとして設定されている。
図2に戻って、振分部132は、領域検索要求の現在位置を担当範囲に持つノードを検索する。そして、振分部132は、検索できたノードを検索結果に設定する。そして、振分部132は、検索結果に葉ノードが存在すれば、存在する葉ノードが担当する検索サーバ2を、領域検索要求を振り分ける振分対象とする。そして、振分部132は、振分対象とした検索サーバ2に対して領域検索要求を振り分ける。なお、振分対象が複数あれば、振分部132は、複数の振分対象の検索サーバ2に対して領域検索要求を転送する。
また、振分部132は、領域検索要求を転送した検索サーバ2の数が複数の場合、検索サーバ2から検索結果を最初に受け取ると、検索結果を出力した検索サーバ2と異なる検索サーバ2に対して領域検索の終了指示を発行する。これにより、振分部132は、最初に検索結果がみつかった検索サーバ2以外の領域検索を終了できるので、検索サーバ2並びにシステム全体の負荷を削減できる。
領域データ追加部133は、領域データを追加する場合、領域データを追加する検索サーバ2を探索し、探索した検索サーバ2に領域データを追加する旨を指示する。例えば、領域データ追加部133は、ルートノードから子ノードに向かって順番にノードを選択し、選択したノードの子ノードに追加領域を含むものがあるか否かを、領域インデックスDB121を用いて判定する。そして、領域データ追加部133は、選択したノードの子ノードに追加領域を含むものがある場合、一例として、追加領域を包含する子ノードの内、矩形領域の面積が最小のものを選択ノードとする。また、領域データ追加部133は、選択したノードの子ノードに追加領域を含むものがない場合、一例として、追加領域を含めると拡大量が最小になる子ノードを選択ノードとする。そして、領域データ追加部133は、選択ノードが葉ノードであれば、当該葉ノードを担当する検索サーバ2に、領域データの追加指示をする。これにより、領域データの追加指示がされた検索サーバ2は、自サーバが担当する担当領域の領域データとして領域データDB222に追加することになる。
[検索サーバの構成]
図11は、実施例に係る検索サーバの構成を示す機能ブロック図である。図11に示すように、検索サーバ2は、通信インタフェース21と、記憶部22と、制御部23とを有する。
通信インタフェース21は、振分サーバ1との間で通信を確立して、所定のデータを送信したり、受信したりするインタフェースである。例えば、通信インタフェース21は、振分サーバ1から領域検索要求を受信したり、振分サーバ1に領域検索応答を送信したりする。また、通信インタフェース21は、他の検索サーバ2との間で通信を確立して、所定のデータを送信したり、受信したりする。
記憶部22は、制御部23が実行するプログラムなどを記憶するとともに、領域インデックスDB221と領域データDB222と重複領域キャッシュデータDB223と検索状態管理DB224とを有する。なお、記憶部22は、例えば、RAM(Random Access Memory)、フラッシュメモリ(flash memory)などの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。
領域インデックスDB221は、振分サーバ1によって検索サーバ2毎に割り当てられたルートノード配下のノードの情報を記憶する。すなわち、検索サーバ2は、振分サーバ1によって自サーバに割り当てられたルートノードの矩形領域を、領域検索の担当領域とする。なお、領域インデックスDB221のデータ構造は、振分サーバ1の領域インデックスDB121と同様であるので、その説明を省略する。
領域データDB222は、振分サーバ1によって検索サーバ2毎に割り当てられたルートノード配下の担当するノードに付随する領域データを管理するとともに、領域データについて、領域データの領域と重複する他の領域の領域データを管理する。すなわち、検索サーバ2は、自サーバの担当領域に含まれる領域データの領域に関する情報を管理する。なお、領域データDB222は、領域ID222a毎に、データ名222b、領域情報222cおよび重複領域222dを対応付けて記憶する。領域ID222a、データ名222b、領域情報222cおよび重複領域222dは、振分サーバ1の領域データDB122の領域ID122a、データ名122b、領域情報122cおよび重複領域122dそれぞれに対応する。
重複領域キャッシュデータDB223は、担当する領域データの領域に重複する他の領域の領域データのうち担当しない領域データを重複領域キャッシュデータとして管理する。ここで、重複領域キャッシュデータDB223のデータ構造の一例を、図12を参照して説明する。図12は、重複領域キャッシュデータDBのデータ構造の一例を示す図である。図12に示すように、重複領域キャッシュデータDB223は、領域ID223a毎に、データ名223bおよび領域情報223cを対応付けて記憶する。領域ID223aは、領域データを一意に識別可能なIDを示す。領域ID223aは、領域データDB222の領域ID222aに対応する。データ名223bは、領域IDで示される領域データのデータ名を示す。データ名223bは、領域データDB222のデータ名222bに対応する。領域情報223cは、領域IDで示される領域データの実体である具体的な範囲を示す。領域情報223cは、領域データDB222の領域情報222cに対応する。例えば、領域ID223aが「00034」である場合、データ名223bとして「レストランC周辺」、領域情報223cとして「円領域:緯度35.492、経度139.650、半径100m」と記憶している。
図11に戻って、検索状態管理DB224は、領域検索要求毎の検索状態を管理する。ここで、検索状態管理DB224のデータ構造の一例を、図13を参照して説明する。図13は、検索状態管理DBのデータ構造の一例を示す図である。図13に示すように、検索状態管理DB224は、リクエストID224a毎に、開始時間224bおよび終了指示224cを対応付けて記憶する。リクエストID224aは、領域検索要求を一意に識別可能なIDを示す。開始時間224bは、領域検索要求に対応する領域検索が開始された時間である。終了指示224cは、振分サーバ1からの領域検索における終了指示の有無を示す。一例として、終了指示があった場合、終了指示があったことを示す「終了指示あり」が設定される。終了指示がない場合、終了指示がないことを示す空白が設定される。例えば、リクエストID224aが「sensorX−94」である場合、開始時間224bとして「10/11 10:05」、終了指示224cとして「終了指示あり」と記憶している。
図11に戻って、制御部23は、リクエスト受付部231、レスポンス転送部232、終了指示受付部233、判定部234、ボトムアップ検索部235、トップダウン検索部236および領域データ追加部237を有する。制御部23は、例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。
リクエスト受付部231は、振分サーバ1によって振り分けられた領域検索要求(検索リクエスト)を受け付ける。例えば、リクエスト受付部231は、振分サーバ1によって送信される領域検索要求を、通信インタフェース21を介して受け付けると、領域検索要求の中からリクエストIDを取り出す。そして、リクエスト受付部231は、検索状態管理DB224に、リクエストID、領域検索を開始する時間および終了指示がないことを示す空白を対応付けて記録する。また、リクエスト受付部231は、領域検索要求が同じ要求元から過去にあった場合、前回検索できた領域IDの領域情報を領域検索要求とともに受け付ける。
レスポンス転送部232は、検索リクエストに対応する領域検索応答を通信インタフェース11に転送する。
終了指示受付部233は、振分サーバ1によって発行される領域検索の終了指示を受け付ける。例えば、終了指示受付部233は、振分サーバ1によって発行される領域検索の終了指示を通信インタフェース21を介して受け付けると、検索状態管理DB224の、領域検索に対応する終了指示があったことを示す「終了指示あり」に更新する。
判定部234は、自サーバが担当する担当領域に、前回領域を含んでいるか否かを判定する。ここでいう「前回領域」とは、前回に領域検索できた領域IDの領域である。例えば、判定部234は、領域インデックスDB221からルートノードの矩形領域を読み出し、読み出した矩形領域に前回領域が含まれるか否かを判定する。
また、判定部234は、自サーバが担当する担当領域に前回領域を含んでいると判定した場合、ボトムアップ検索部235に、Rツリーの、前回領域に対応する葉ノードからボトムアップに検索させる。これは、担当領域に前回領域を含んでいれば、現在位置が前回領域あるいは前回領域に近い領域に含まれる可能性が高いからである。また、判定部234は、自サーバが担当する担当領域に前回領域を含んでいないと判定した場合、トップダウン検索部236に、Rツリーの、担当領域に対応するルートノードからトップダウンに検索させる。これは、担当領域に前回領域を含んでいなければ、前回領域と現在位置との関係が不明であるからである。
ボトムアップ検索部235は、前回領域に対応する葉ノードからボトムアップに、領域検索要求に指定される位置情報(現在位置)を含む領域を検索する。
例えば、ボトムアップ検索部235は、領域検索要求の中からリクエストID、要求元を示すセンサーIDおよび位置情報を取り出す。ボトムアップ検索部235は、領域検索要求の中から取り出した位置情報が前回領域に含まれるか否かを判定する。そして、ボトムアップ検索部235は、取り出した位置情報が前回領域に含まれる場合、当該前回領域の領域データを検索結果に追加する。
また、ボトムアップ検索部235は、取り出した位置情報が前回領域に含まれない場合、領域インデックスDB221を用いて、前回領域を領域データに持つ葉ノードから当該位置情報を含む領域を検索する。すなわち、ボトムアップ検索部235は、葉ノードが持つ領域データの内、位置情報を含む領域データがあれば、検索できた領域データを検索結果に追加する。
また、ボトムアップ検索部235は、葉ノードが持つ領域データの内、当該位置情報を含む領域データがなければ、ルートノードへ向けてボトムアップにノードを順番に辿り、位置情報を含むノードを選択する。そして、ボトムアップ検索部235は、選択したノードの子ノードに、位置情報を含むものがあるか否かを、領域インデックスDB221を用いて判定する。そして、ボトムアップ検索部235は、位置情報を含む子ノードを選択候補ノードとして追加する。そして、ボトムアップ検索部235は、選択候補ノードとして追加されたノードを1つずつ選択し、選択したノードが葉ノードであれば、葉ノードにある領域データの内、位置情報を含む領域データがあるか否かを、領域インデックスDB221を用いて判定する。そして、ボトムアップ検索部235は、位置情報を含む領域データが1つでもあれば、いずれか1つの領域データを検索結果に追加する。
また、ボトムアップ検索部235は、領域データDB222に記憶された重複領域222dに基づいて、検索結果に追加された領域データに対応する重複領域の中から位置情報を含む重複領域を検索する。一例として、ボトムアップ検索部235は、重複領域222dに設定された領域IDが領域データDB222の領域ID222aに存在すれば、領域データDB222の領域情報222cを用いて位置情報を含む重複領域であるかを検索すれば良い。一方、ボトムアップ検索部235は、重複領域222dに設定された領域IDが領域データDB222の領域ID222aに存在しなければ、重複領域キャッシュデータDB223の領域情報223cを用いて位置情報を含む重複領域であるかを検索すれば良い。そして、ボトムアップ検索部235は、検索できた重複領域の領域データを検索結果に追加する。
そして、ボトムアップ検索部235は、検索リクエストに対応する領域検索応答として検索結果をレスポンス転送部232に出力する。なお、ボトムアップ検索部235は、領域検索中に、振分サーバ1から検索終了の指示があった場合、検索を終了する。例えば、ボトムアップ検索部235は、検索処理のうち所定の処理の後に、検索状態管理DB224に記憶された、領域検索要求に対応する終了指示224cを参照し、終了指示があったか否かを確認すれば良い。
トップダウン検索部236は、ルートノードからトップダウンに、領域検索要求に指定される位置情報を含む領域を検索する。
例えば、トップダウン検索部236は、領域検索要求の中からリクエストID、要求元を示すセンサーIDおよび位置情報を取り出す。トップダウン検索部236は、ルートノードから子ノードへトップダウンに辿り順番にノードを選択し、選択したノードの子ノードに、取り出した位置情報を含むものがあるか否かを、領域インデックスDB221を用いて判定する。
また、トップダウン検索部236は、取り出した位置情報を含む子ノードを選択候補ノードとして追加する。そして、トップダウン検索部236は、選択候補ノードとして追加されたノードを1つずつ選択し、選択したノードが葉ノードであれば、葉ノードにある領域データの内、取り出した位置情報を含むものがあるか否かを、領域インデックスDB221を用いて判定する。そして、トップダウン検索部236は、領域データに対応する領域情報222cに、取り出した位置情報を含むものが1つでもあれば、いずれか1つの領域情報222cの領域データを検索結果に追加する。なお、トップダウン検索部236は、位置情報を含む領域情報が複数ある場合には、重複領域の数が最も小さい領域情報を選択することが望ましい。これは、さらに、トップダウン検索部236が、選択した領域情報の重複領域から位置情報を含む領域を検索することとなるので、検索対象となる重複領域の数を減らすためである。
また、トップダウン検索部236は、領域データDB222に記憶された重複領域222dに基づいて、検索結果に追加された領域データに対応する重複領域の中から位置情報を含む重複領域を検索する。一例として、トップダウン検索部236は、重複領域222dに設定された領域IDが領域データDB222の領域ID222aに存在すれば、領域データDB222の領域情報222cを用いて位置情報を含む重複領域であるかを検索すれば良い。一方、トップダウン検索部236は、重複領域222dに設定された領域IDが領域データDB222の領域ID222aに存在しなければ、重複領域キャッシュデータDB223の領域情報223cを用いて位置情報を含む重複領域であるかを検索すれば良い。そして、トップダウン検索部236は、検索できた重複領域の領域データを検索結果に追加する。
そして、トップダウン検索部236は、検索リクエストに対応する領域検索応答として検索結果をレスポンス転送部232に出力する。なお、トップダウン検索部236は、領域検索中に、振分サーバ1から検索終了の指示があった場合、検索を終了する。例えば、トップダウン検索部236は、検索処理のうち所定の処理の後に、検索状態管理DB224に記憶された、領域検索要求に対応する終了指示224cを参照し、終了指示があったか否かを確認すれば良い。
領域データ追加部237は、領域データの追加指示があった場合、追加指示があった領域データを領域データDB222に追加する。また、領域データ追加部237は、追加指示があった領域データについて、領域データDB222の重複領域を設定する。例えば、領域データ追加部237は、ルートノードから子ノードに向かって順番にノードを選択し、選択したノードの子ノードに、追加領域と重なるものがあるか否かを、領域インデックスDB221を用いて判定する。
また、領域データ追加部237は、追加領域と重なる子ノードを選択候補ノードとして追加する。そして、領域データ追加部237は、選択候補ノードとして追加されたノードを1つずつ選択し、選択したノードが葉ノードであれば、葉ノードにある領域データの内、追加領域と重複する部分がある領域データを重複領域として選択する。そして、領域データ追加部237は、重複領域として選択された領域データを、領域データDB222の追加領域に対応する重複領域222dに追加する。さらに、領域データ追加部237は、追加領域を、重複領域として選択された領域データに対応する重複領域222dに追加する。
また、領域データ追加部237は、他の検索サーバ2に対して、追加指示があった領域データの重複領域への設定依頼をする。これは、追加指示があった領域データが、他の検索サーバ2によって担当される領域データと重複する場合があるからである。かかる場合に、他の検索サーバ2は、領域データDB222の重複領域について、自身が担当する領域データであって設定依頼があった領域データと重複する領域データの重複領域に、設定依頼があった領域データの領域IDを追加する。そして、領域データ追加部237は、他の検索サーバ2から、追加指示があった領域データと重複する領域データを受け取り、重複領域キャッシュデータDB223に追加する。
[検索システムの処理の説明]
次に、実施例に係る検索システム9の処理を、図14を参照して説明する。図14は、実施例に係る検索システムの処理を説明する図である。なお、図14では、振分サーバ1は、深度2にあるノードb、cをルートノードとしてそれぞれ検索サーバA、Bに割り当てている。検索サーバAは、ルートノードbの配下を担当領域とする。ノードcの矩形領域は、領域ID1、2、3の領域を含んでいる。ノードdの矩形領域は、領域ID4、5の領域を含んでいる。検索サーバBは、ルートノードeの配下を担当領域とする。ノードfの矩形領域は、領域ID6、7の領域を含んでいる。ノードgの矩形領域は、領域ID8、9の領域を含んでいる。そして、領域ID1と領域ID2の領域は、互いに重複していることを示している。領域ID5と領域ID9の領域は、担当の検索サーバが異なるが、互いに重複していることを示している。
このような状況の下、今回の領域検索要求の現在位置がルートノードb配下の葉ノードの矩形領域の範囲内であって、ルートノードe配下の葉ノードの矩形領域の範囲内であったとする。すると、振分サーバ1は、現在位置が範囲内であった葉ノードを担当する検索サーバA、Bに対して領域検索要求を振り分ける。
ここで、前回領域の領域IDが「9」であったとする。すると、領域検索要求を振り分けられた検索サーバAは、担当領域に前回領域を含まないので、ルートノードbからのトップダウンで、現在位置を含む領域を検索する。また、領域検索要求を振り分けられた検索サーバBは、担当領域に前回領域を含むので、前回領域に対応する葉ノードgからボトムアップで、現在位置を含む領域を検索する。
そして、振分サーバ1は、最も早く戻ってきた応答を元に領域検索応答を行う。これにより、検索システム9では、振分サーバ1が、検索サーバ2に対して順番に領域検索を行う場合と比較して、検索サーバ2間を跨ぐ無駄なバックトラックがなくなることで、検索サーバ2および振分サーバ1間の通信コストを削減できる。この結果、検索システム9は、領域検索の検索時間を高速化できる。
[領域検索要求のデータの一例]
次に、振分部132が通信インタフェース11を介して受け付ける領域検索要求の内容について、図15を参照して説明する。図15は、領域検索要求の内容の一例を示す図である。図15に示すように、領域検索要求には、領域検索要求を識別するリクエストIDと、センサーを識別するセンサーIDと、緯度および経度とを含む。緯度および経度は、位置情報(現在位置)の一例である。図15の例では、リクエストIDとして「SensorX−94」、センサーIDとして「SensorX」、緯度として「35.4134」、経度として「139.6252」と設定している。なお、領域検索要求には、センサーIDを含むものとしたが、これに限定されず、領域検索を要求する端末装置の装置IDであっても良いし、領域検索を要求する携帯電話の携帯電話番号であっても良い。
[領域検索応答のデータの一例]
次に、振分部132が通信インタフェース11を介して出力する領域検索応答の内容について、図16を参照して説明する。図16は、領域検索応答の内容の一例を示す図である。図16に示すように、領域検索応答は、領域検索の結果を示す領域情報のリストであり、領域情報に対応する領域IDと領域名とを含む。図16の例では、領域IDとして「00001」、領域名として「A商店X店舗周辺」と設定している。また、領域IDとして「00034」、領域名として「レストランC周辺」と設定している。なお、領域情報のリストには、領域IDと領域名とを含むものとしたが、これに限定されず、領域の位置、大きさや形状などを含むものとしても良い。
[振分サーバによる振分処理の手順]
次に、実施例に係る振分サーバ1による振分処理の手順について、図17A、図17Bを参照して説明する。図17A、図17Bは、振分サーバによる振分処理の手順を示すフローチャートである。なお、図17A、17Bの例では、領域検索要求(検索リクエスト)に含まれる位置情報を現在位置として説明する。
まず、検索リクエストを受信した振分部132は、領域インデックスDB121に基づいて、ルートノードを選択する(ステップS11)。そして、振分部132は、選択した選択ノードの子ノードの中から、リクエストの現在位置を担当範囲に持つノードを検索する(ステップS12)。
そして、振分部132は、検索結果に葉ノードを含むか否かを判定する(ステップS13)。検索結果に葉ノードを含まないと判定した場合(ステップS13;No)、振分部132は、ステップS15に移行する。一方、検索結果に葉ノードを含むと判定した場合(ステップS13;Yes)、振分部132は、検索結果の全ての葉ノードがそれぞれ含む検索サーバ2のURLを、振分対象リストに追加する(ステップS14)。そして、振分部132は、ステップS15に移行する。
ステップS15では、振分部132は、検索結果の中間ノードを選択候補ノードに追加する(ステップS15)。そして、振分部132は、全ての選択候補ノードの検索を終えたか否かを判定する(ステップS16)。全ての選択候補ノードの検索を終えていないと判定した場合(ステップS16;No)、振分部132は、選択候補ノード内の1つの未検索ノードを選択し(ステップS17)、ステップS12に移行する。
一方、全ての選択候補ノードの検索を終えたと判定した場合(ステップS16;Yes)、振分部132は、振分対象サーバリストを用いて、振分対象サーバの数が0であるか否かを判定する(ステップS18)。振分対象サーバの数が0であると判定した場合(ステップS18;Yes)、振分部132は、リクエストを振り分ける対象の検索サーバ2がないので、領域検索要求のリクエスト元に空の検索結果を返し(ステップS18A)、処理を終了する。
振分対象サーバの数が0でないと判定した場合(ステップS18;No)、振分部132は、振分対象サーバリストに含まれる検索サーバ2のURLにリクエストを転送する(ステップS19)。そして、振分部132は、リクエストのIDと振分対象サーバリストを返答待ちリストに追加する(ステップS20)。そして、振分部132は、処理を終了する。
その後、リクエストを振り分けたいずれかの検索サーバ2から検索結果を受信した振分部132は、検索元のリクエストのIDが返答待ちリストにあるか否かを判定する(ステップS21)。検索元のリクエストのIDが返答待ちリストにないと判定した場合(ステップS21;No)、振分部132は、処理を終了する。
検索元のリクエストのIDが返答待ちリストにあると判定した場合(ステップS21;Yes)、振分部132は、検索結果を領域検索応答として領域検索要求のリクエスト元へ返答する(ステップS22)。
そして、振分部132は、返答待ちリストを用いて、リクエスト(ID)に対応する振分対象サーバに対して、検索の終了指示を発行する(ステップS23)。そして、振分部132は、リクエストのIDを返答待ちリストから削除し(ステップS24)、処理を終了する。
[検索サーバによる検索処理の手順]
次に、実施例に係る検索サーバ2による検索処理の手順について、図18A〜図18Cを参照して説明する。図18A〜図18Cは、検索サーバによる検索処理の手順を示すフローチャートである。なお、図18A〜図18Cの例では、領域検索要求(検索リクエスト)に含まれる位置情報を検索座標として説明する。
まず、振分サーバ1から領域検索要求を受け付けたリクエスト受付部231は、検索状態管理DB224に、領域検索要求に含まれるリクエストIDおよび領域検索の開始時間を対応付けて追加する(ステップS30)。なお、リクエスト受付部231は、振分サーバ1から、領域検索要求の内容を受信するとともに、リクエストのセンサーIDに対応する前回領域(前回データ)があれば当該前回データの領域IDを受信する。
続いて、判定部234は、リクエストのセンサーIDの前回データが担当領域に含まれるか否かを判定する(ステップS31)。例えば、判定部234は、領域データDB222の領域ID222aに、前回データの領域IDが記憶されているか否かを判定する。リクエストのセンサーIDの前回データが担当領域に含まれないと判定した場合(ステップS31;No)、判定部234は、ルートノードからトップダウンに検索すべく、ステップS51に移行する。
一方、リクエストのセンサーIDの前回データが担当領域に含まれると判定した場合(ステップS31;Yes)、判定部234は、前回データに対応する葉ノードからボトムアップに検索すべく、ステップS32に移行する。ステップS32では、ボトムアップ検索部235は、検索座標が前回データ内にあるか否かを判定する(ステップS32)。検索座標が前回データ内にある場合(ステップS32;Yes)、ボトムアップ検索部235は、前回データを該当データとして検索結果に追加する(ステップS33)。
続いて、ボトムアップ検索部235は、領域データDB222の重複領域222dに基づいて、検索結果に追加した領域データの重複領域から未判定のものを読み出し、読み出した重複領域を1つ選択する(ステップS34)。そして、ボトムアップ検索部235は、選択した重複領域が検索座標を含むか否かを判定する(ステップS35)。例えば、ボトムアップ検索部235は、選択した重複領域の領域IDが領域データDB222のいずれかの領域ID222aと一致すれば、一致した領域ID222aの領域情報222cを用いて検索座標を含むか否かを判定する。また、ボトムアップ検索部235は、選択した重複領域の領域IDが領域データDB222のいずれの領域ID222aとも一致しなければ、重複領域キャッシュデータDB223を用いて判定する。すなわち、ボトムアップ検索部235は、選択した重複領域の領域IDと一致する、重複領域キャッシュデータDB223の領域ID223aの領域情報222cを用いて検索座標を含むか否かを判定する。
選択した重複領域が検索座標を含むと判定した場合(ステップS35;Yes)、ボトムアップ検索部235は、含むと判定した重複領域の領域IDを検索結果に追加し(ステップS36)、ステップS37に移行する。一方、選択した重複領域が検索座標を含まないと判定した場合(ステップS35;No)、ボトムアップ検索部235は、全重複領域の判定を終えたか否かを判定する(ステップS37)。
全重複領域の判定を終えていない場合(ステップS37;No)、ボトムアップ検索部235は、終了指示を確認する(ステップS37A)。例えば、ボトムアップ検索部235は、検索状態管理DB224に記憶された該当リクエストIDに対応する終了指示224cを参照し、終了指示を確認する。終了指示がされていない場合、ボトムアップ検索部235は、次の重複領域を判定すべく、ステップS34に移行する。終了指示がされている場合、ボトムアップ検索部235は、既に別の検索サーバ2で検索結果がみつかったと判断し、検索処理を終了すべく、ステップS45に移行する。
一方、ボトムアップ検索部235は、全重複領域の判定を終えた場合(ステップS37;Yes)、作成された検索結果を振分サーバ1へ返答する(ステップS38)。そして、ボトムアップ検索部235は、ステップS45に移行する。
ステップS32では、検索座標が前回データ内にない場合(ステップS32;No)、ボトムアップ検索部235は、ノードをボトムアップに辿る検索処理に移行すべく、ステップS40に移行する。
ステップS40では、ボトムアップ検索部235が、領域インデックスDB221に基づいて、前回データを領域データとしてデータリストに持つ葉ノードまたは親ノードを選択する(ステップS40)。そして、ボトムアップ検索部235は、選択した選択ノードが検索座標を含むか否かを、領域インデックスDB221を用いて判定する(ステップS41)。選択ノードが検索座標を含むと判定した場合(ステップS41;Yes)、ボトムアップ検索部235は、さらにノードを選択ノードからトップダウンに辿る検索処理に移行すべく、ステップS71に移行する。
一方、選択ノードが検索座標を含まないと判定した場合(ステップS41;No)、ボトムアップ検索部235は、選択ノードがルートノードであるか否かを、領域インデックスDB221を用いて判定する(ステップS42)。選択ノードがルートノードでなければ(ステップS42;No)ボトムアップ検索部235は、終了指示を確認する(ステップS42A)。例えば、ボトムアップ検索部235は、検索状態管理DB224に記憶された該当リクエストIDに対応する終了指示224cを参照し、終了指示を確認する。終了指示がされていない場合、ボトムアップ検索部235は、親ノードを検索すべく、ステップS40に移行する。終了指示がされている場合、ボトムアップ検索部235は、既に別の検索サーバ2で検索結果がみつかったと判断し、検索処理を終了すべく、ステップS45に移行する。
一方、選択ノードがルートノードであれば(ステップS42;Yes)、ボトムアップ検索部235は、検索結果無しとして振分サーバ1へ返答する(ステップS43)。そして、ボトムアップ検索部235は、ステップS45に移行する。ステップS45では、ボトムアップ検索部235は、検索状態管理DB234からリクエストIDに対応するレコードを削除し(ステップS45)、検索処理を終了する。
[前回データが担当領域に含まれていない場合の検索処理の手順]
次に、図18AのステップS31に示した前回データが担当領域に含まれていない場合の検索処理の手順について、図18Bを参照して説明する。
判定部234によってリクエストのセンサーIDの前回データが担当領域に含まれないと判定された場合、トップダウン検索部236は、領域インデックスDB221に基づいて、ルートノードを選択する(ステップS51)。そして、トップダウン検索部236は、選択した選択ノードが葉ノードであるか否かを判定する(ステップS52)。
選択ノードが葉ノードでないと判定した場合(ステップS52;No)、トップダウン検索部236は、選択ノードの子ノードに検索座標を含むものがあるか否かを、領域インデックスDB221を用いて判定する(ステップS53)。一例として、トップダウン検索部236は、領域インデックスDB221に基づいて、選択ノードの子ノードリストを読み出し、読み出した子ノードリストに含まれるそれぞれの子ノードの矩形領域を読み出す。そして、トップダウン検索部236は、読み出したそれぞれの子ノードの矩形領域に、検索座標を含むものがあるか否かを判定する。
選択ノードの子ノードに検索座標を含むものがあると判定した場合(ステップS53;Yes)、トップダウン検索部236は、検索座標を含む子ノードを選択候補ノードに追加し(ステップS54)、ステップS55に移行する。一方、選択ノードの子ノードに検索座標を含むものがないと判定した場合(ステップS53;No)、トップダウン検索部236は、ステップS55に移行する。
続いて、トップダウン検索部236は、全ての選択候補ノードの検索を終えたか否かを判定する(ステップS55)。全ての選択候補ノードの検索を終えていないと判定した場合(ステップS55;No)、トップダウン検索部236は、終了指示を確認する(ステップS55A)。終了指示がされていない場合、トップダウン検索部236は、次の未検索ノードを選択すべく、ステップS56に移行する。終了指示がされている場合、トップダウン検索部236は、既に別の検索サーバ2で検索結果がみつかったと判断し、検索処理を終了すべく、ステップS65に移行する。なお、終了指示の確認方法は、ボトムアップ検索部235の場合と同様であるので、その説明を省略する。
ステップS56では、トップダウン検索部236は、選択候補ノード内の1つの未検索ノードを選択し(ステップS56)、ステップS52に移行する。
ステップS52では、選択ノードが葉ノードであると判定した場合(ステップS52;Yes)、トップダウン検索部236は、選択した葉ノードが持つ領域データの内、検索座標を含むものがあるか否かを判定する(ステップS57)。一例として、トップダウン検索部236は、領域インデックスDB221に基づいて、葉ノードであるノードのデータリストを読み出し、読み出したデータリストに含まれる領域データへのポインタ、例えば領域IDを取り出す。そして、トップダウン検索部236は、領域データDB222に基づいて、取り出した領域IDに対応する領域情報222cに検索座標を含むものがあるか否かを判定する。
選択した葉ノードが持つ領域データの内、検索座標を含むものがないと判定した場合(ステップS57;No)、トップダウン検索部236は、次の選択候補ノードを検索すべく、ステップS55に移行する。
一方、選択した葉ノードが持つ領域データの内、検索座標を含むものがあると判定した場合(ステップS57;Yes)、トップダウン検索部236は、終了指示を確認する(ステップS57A)。終了指示がされていない場合、トップダウン検索部236は、次の処理に進むべく、ステップS58に移行する。終了指示がされている場合、トップダウン検索部236は、既に別の検索サーバ2で検索結果がみつかったと判断し、検索処理を終了すべく、ステップS65に移行する。
ステップS58では、トップダウン検索部236は、該当領域データの内、重複領域の数が最小の領域データを検索結果に追加する(ステップS58)。一例として、トップダウン検索部236は、領域データDB222に記憶された重複領域222dに基づいて、重複領域の数が最小の領域データ(領域ID)を検索結果に追加する。
続いて、トップダウン検索部236は、領域データDB222の重複領域222dに基づいて、検索結果に追加した領域データの重複領域から未判定のものを読み出し、読み出した重複領域を1つ選択する(ステップS59)。そして、トップダウン検索部236は、選択した重複領域が検索座標を含むか否かを判定する(ステップS60)。例えば、トップダウン検索部236は、選択した重複領域の領域IDが領域データDB222のいずれかの領域ID222aと一致すれば、一致した領域ID222aの領域情報222cを用いて検索座標を含むか否かを判定する。また、トップダウン検索部236は、選択した重複領域の領域IDが領域データDB222のいずれの領域ID222aとも一致しなければ、重複領域キャッシュデータDB223を用いて判定する。すなわち、トップダウン検索部236は、選択した重複領域の領域IDと一致する、重複領域キャッシュデータDB223の領域ID223aの領域情報222cを用いて検索座標を含むか否かを判定する。
選択した重複領域が検索座標を含むと判定した場合(ステップS60;Yes)、トップダウン検索部236は、含むと判定した重複領域の領域IDを検索結果に追加し(ステップS61)、ステップS62に移行する。
一方、選択した重複領域が検索座標を含まないと判定した場合(ステップS60;No)、トップダウン検索部236は、全重複領域の判定を終えたか否かを判定する(ステップS62)。全重複領域の判定を終えていない場合(ステップS62;No)、トップダウン検索部236は、次の重複領域を判定すべく、ステップS59に移行する。一方、トップダウン検索部236は、全重複領域の判定を終えた場合(ステップS62;Yes)、作成した検索結果を振分サーバ1へ返答する(ステップS63)。そして、トップダウン検索部236は、ステップS65に移行する。
また、トップダウン検索部236が全ての選択候補ノードの検索を終えると(ステップS55;Yes)、検索結果無しとして振分サーバ1へ返答する(ステップS64)。そして、トップダウン検索部236は、ステップS65に移行する。ステップS65では、トップダウン検索部236は、検索状態管理DB224からリクエストIDに対応するレコードを削除し(ステップS65)、検索処理を終了する。
[選択ノードが検索座標を含む場合の検索処理の手順]
次に、図18AのステップS41に示した選択ノードが検索座標を含む場合の検索処理の手順について、図18Cを参照して説明する。
ボトムアップ検索部235は、検索座標を含む選択ノードが葉ノードであるか否かを、領域インデックスDB221を用いて判定する(ステップS71)。
選択ノードが葉ノードでないと判定した場合(ステップS71;No)、ボトムアップ検索部235は、選択ノードの子ノードに検索座標を含むものがあるか否かを、領域インデックスDB221を用いて判定する(ステップS72)。一例として、ボトムアップ検索部235は、領域インデックスDB221に基づいて、選択ノードの子ノードリストを読み出し、読み出した子ノードリストに含まれるそれぞれの子ノードの矩形領域を読み出す。そして、ボトムアップ検索部235は、読み出したそれぞれの子ノードの矩形領域に、検索座標を含むものがあるか否かを判定する。
選択ノードの子ノードに検索座標を含むものがあると判定した場合(ステップS72;Yes)、ボトムアップ検索部235は、検索座標を含む子ノードを選択候補ノードに追加し(ステップS73)、ステップS74に移行する。一方、選択ノードの子ノードに検索座標を含むものがないと判定した場合(ステップS72;No)、ボトムアップ検索部235は、ステップS74に移行する。
続いて、ボトムアップ検索部235は、全ての選択候補ノードの検索を終えたか否かを判定する(ステップS74)。全ての選択候補ノードの検索を終えていないと判定した場合(ステップS74;No)、ボトムアップ検索部235は、選択候補ノード内の1つの未検索ノードを選択し(ステップS75)、ステップS71に移行する。
ステップS71では、選択ノードが葉ノードであると判定した場合(ステップS71;Yes)、ボトムアップ検索部235は、選択した葉ノードが持つ領域データの内、検索座標を含むものがあるか否かを判定する(ステップS76)。一例として、ボトムアップ検索部235は、領域インデックスDB221に基づいて、葉ノードであるノードのデータリストを読み出し、読み出したデータリストに含まれる領域データへのポインタ、例えば領域IDを取り出す。そして、ボトムアップ検索部235は、領域データDB222に基づいて、取り出した領域IDに対応する領域情報222cに検索座標を含むものがあるか否かを判定する。
選択した葉ノードが持つ領域データの内、検索座標を含むものがないと判定した場合(ステップS76;No)、ボトムアップ検索部235は、次の選択候補ノードを検索すべく、ステップS74に移行する。
一方、選択した葉ノードが持つ領域データの内、検索座標を含むものがあると判定した場合(ステップS76;Yes)、ボトムアップ検索部235は、該当領域データの内の1つを該当データとして検索結果に追加する(ステップS77)。そして、ボトムアップ検索部235は、ステップS34に移行する。なお、ボトムアップ検索部235は、該当領域データの内の1つとして、重複領域の数が最小の領域データを検索結果に追加しても良い。
ステップS74では、全ての選択候補ノードの検索を終えたと判定した場合(ステップS74;Yes)、ボトムアップ検索部235は、選択ノードに検索座標を含むものがないので、さらに親ノードから検索すべく、ステップS40に移行する。
[検索サーバによる終了指示受付処理の手順]
次に、実施例に係る検索サーバ2による終了指示受付処理の手順について、図19を参照して説明する。図19は、検索サーバによる終了指示受付処理の手順を示すフローチャートである。
終了指示受付部233は、振分サーバ1から終了指示を受け付けると、終了指示に対応するリクエストの、検索状態管理DB224の終了指示224cを「終了指示あり」に更新する(ステップS81)。そして、終了指示受付部233は、処理を終了する。
[振分サーバによるインデックス割当処理の手順]
次に、実施例に係る振分サーバ1によるインデックス割当処理の手順について、図20を参照して説明する。図20は、振分サーバによるインデックス割当処理の手順を示すフローチャートである。
まず、インデックス割当部131は、インデックス割当指示を受信する。このとき、インデックス割当部131は、Rツリーのインデックスを検索サーバ2へ割り当てる際の深度(ここでは、割り当て深度という)と、Rツリーのインデックスを割り当てる対象である検索サーバ2の宛先リストとを受け取る。すると、インデックス割当部131は、領域インデックスDB121を用いて、割り当て深度にあるノードを抽出し、割り当てノードリストを作成する(ステップS91)。
そして、インデックス割当部131は、割り当てノードリストの先頭のノードに宛先リスト内の先頭の検索サーバ2を割り当てる(ステップS92)。そして、インデックス割当部131は、割り当てられたノードの子ノード以下のインデックスの内容を、割り当てた検索サーバ2の領域インデックスDB221にコピーする(ステップS93)。そして、インデックス割当部131は、割り当てたノードを、コピー先の検索サーバ2のルートノードにする(ステップS94)。
続いて、インデックス割当部131は、ルートノード配下のノードに付随する領域データを、割り当てた検索サーバ2の領域データDB222にコピーする(ステップS94A)。そして、インデックス割当部131は、コピー先にコピーした領域データの重複領域に設定されたデータ(領域ID)の和集合を作成する(ステップS95)。
そして、インデックス割当部131は、作成した和集合から、インデックスと共にコピー済みの領域データに該当するデータ(領域ID)を削除する(ステップS96)。この結果、和集合には、コピー先にコピーされた領域データの重複領域のうち他の検索サーバ2が担当する領域データの領域が残ることになる。
そして、インデックス割当部131は、残った重複領域の領域データを、領域データDB122からコピーして、重複領域キャッシュデータとする(ステップS97)。すなわち、インデックス割当部131は、割り当てた検索サーバ2の重複領域キャッシュデータDB223にコピーする。
そして、インデックス割当部131は、検索サーバ2を割り当てたノード(ルートノードとしたノード)の情報に、割り当てた検索サーバ2の宛先(URL)を記録する(ステップS98)。そして、インデックス割当部131は、検索サーバ2を割り当てたノードを、割り当てノードリストから削除する(ステップS99)。
さらに、インデックス割当部131は、宛先リストの先頭の検索サーバ2を宛先リストの最後に移動する(ステップS100)。そして、インデックス割当部131は、割り当てノードリストにノードが残っているか否かを判定する(ステップS101)。割り当てノードリストにノードが残っていると判定した場合(ステップS101;Yes)、インデックス割当部131は、次のノードに検索サーバ2を割り当てるべく、ステップS92に移行する。
一方、割り当てノードリストにノードが残っていないと判定した場合(ステップS101;No)、インデックス割当部131は、インデックス割当処理を終了する。
[振分サーバによる領域データ追加処理の手順]
次に、実施例に係る振分サーバ1による領域データ追加処理の手順について、図21を参照して説明する。図21は、振分サーバによる領域データ追加処理の手順を示すフローチャートである。領域データ追加部133は、追加領域の領域データを受け取ったとする。領域データには、領域ID、データ名および領域情報が含まれる。
まず、領域データ追加部133は、領域インデックスDB121に基づいて、ルートノードを選択する(ステップS111)。そして、領域データ追加部133は、選択した選択ノードが葉ノードであるか否かを判定する(ステップS112)。
選択ノードが葉ノードでないと判定した場合(ステップS112;No)、領域データ追加部133は、領域インデックスDB121に基づいて、選択ノードの子ノードに追加領域を包含するものがあるか否かを判定する(ステップS113)。一例として、領域データ追加部133は、領域インデックスDB121に基づいて、選択ノードの子ノードリストを読み出し、読み出した子ノードリストに含まれるそれぞれの子ノードの矩形領域を読み出す。そして、領域データ追加部133は、読み出したそれぞれの子ノードの矩形領域に、追加領域を包含する矩形領域があるか否かを判定する。
追加領域を包含するものがあると判定した場合(ステップS113;Yes)、領域データ追加部133は、追加領域を包含する子ノードの内、矩形領域の面積が最小のものを選択ノードとする(ステップS114)。そして、領域データ追加部133は、ステップS112に移行する。
一方、追加領域を包含するものがないと判定した場合(ステップS113;No)、領域データ追加部133は、追加領域を含めると拡大量が最小になる子ノードを選択ノードとする(ステップS115)。そして、領域データ追加部133は、ステップS112に移行する。
ステップS112では、選択ノードが葉ノードであると判定した場合(ステップS112;Yes)、領域データ追加部133は、葉ノードに対応する検索サーバ2に、追加領域の領域データの追加指示を送信する(ステップS116)。
[検索サーバによる領域データ追加処理の手順]
次に、検索サーバ2による領域データ追加処理の手順について、図22および図23を参照して説明する。図22は、領域データの追加指示を受けた検索サーバによる領域データ追加処理の手順を示す図である。図23は、重複領域への設定依頼を受けた検索サーバによる領域データ追加処理の手順を示す図である。なお、図22では、検索サーバ2が、振分サーバ1から追加領域の領域データの追加指示を受け付けたものとする。このとき、検索サーバ2は、領域データには、領域ID、データ名および領域情報が含まれている。
図22に示すように、追加領域の領域データの追加指示を受け付けた領域データ追加部237は、振分サーバ1に、全ての検索サーバ2の宛先を問い合わせ、問い合わせた宛先を受信する(ステップS120)。そして、領域データ追加部237は、他の全ての検索サーバ2に、追加の領域データを重複領域へ設定するように依頼する(ステップS121)。これは、追加指示があった領域データが、他の検索サーバ2によって担当された領域データと重複する場合があるからである。そして、領域データ追加部237は、追加の領域データを領域データDB222に追加する(ステップS122)。
続いて、領域データ追加部237は、領域インデックスDB221に基づいて、ルートノードを選択する(ステップS123)。そして、領域データ追加部237は、選択した選択ノードが葉ノードであるか否かを判定する(ステップS124)。
選択ノードが葉ノードであると判定した場合(ステップS124;Yes)、領域データ追加部237は、選択ノードにある領域データの内、追加領域と重なる領域データの領域を重複領域として選択する(ステップS125)。一例として、領域データ追加部237は、領域インデックスDB221に基づいて、選択ノードのデータリストを読み出し、読み出したデータリストに含まれる領域データへのポインタ、例えば領域IDを取り出す。そして、領域データ追加部237は、領域データDB222に基づいて、取り出した領域IDの内、追加領域と重なる部分がある領域IDを重複領域として選択する。そして、領域データ追加部237は、ステップS128に移行する。
一方、選択ノードが葉ノードでないと判定した場合(ステップS124;No)、領域データ追加部237は、領域インデックスDB221に基づいて、選択ノードの子ノードに追加領域と重なるものがあるか否かを判定する(ステップS126)。選択ノードの子ノードに追加領域と重なるものがあると判定した場合(ステップS126;Yes)、領域データ追加部237は、重なった子ノードを選択候補ノードに加え(ステップS127)、ステップS128に移行する。また、選択ノードの子ノードに追加領域と重なるものがないと判定した場合(ステップS126;No)、領域データ追加部237は、ステップS128に移行する。
続いて、領域データ追加部237は、全ての選択候補ノードの検索を終えたか否かを判定する(ステップS128)。全ての選択候補ノードの検索を終えていないと判定した場合(ステップS128;No)、領域データ追加部237は、選択候補ノード内の1つの未検索ノードを選択し(ステップS129)、ステップS124に移行する。
一方、全ての選択候補ノードの検索を終えたと判定した場合(ステップS128;Yes)、領域データ追加部237は、選択済みの重複領域を追加領域の重複領域に追加する(ステップS130)。一例として、領域データ追加部237は、重複領域として選択した領域データを、領域データDB222の追加領域に対応する重複領域222dに追加する。
続いて、領域データ追加部237は、追加領域を各選択済みの重複領域に重複領域として追加する(ステップS131)。一例として、領域データ追加部237は、追加領域を、領域データDB222の重複領域として選択した各領域データに対応する重複領域222dに追加する。
さらに、領域データ追加部237は、追加データの重複領域への設定に関する返答を、他の全ての検索サーバ2から待ち受ける(ステップS132)。そして、領域データ追加部237は、他の検索サーバ2から返答を受信すると、返答に含まれる領域データを重複領域キャッシュに保存する(ステップS133)。すなわち、領域データ追加部237は、他の検索サーバ2から、追加指示があった領域データに重複する領域データを受け取り、重複領域キャッシュデータDB223に追加する。
そして、領域データ追加部237は、返答に含まれる領域データの領域IDを追加の領域データの重複領域222dとして追加する(ステップS134)。そして、領域データ追加部237は、領域データの追加指示を受けた検索サーバ2による領域データ追加処理を終了する。
図23に示すように、追加の領域データを重複領域へ設定するように依頼された検索サーバ2の領域データ追加部237は、領域インデックスDB221に基づいて、ルートノードを選択する(ステップS141)。そして、領域データ追加部237は、選択した選択ノードが葉ノードであるか否かを判定する(ステップS142)。
選択ノードが葉ノードであると判定した場合(ステップS142;Yes)、領域データ追加部237は、選択ノードにある領域データの内、追加領域と重なる領域データの領域を重複領域として選択する(ステップS143)。そして、領域データ追加部237は、ステップS146に移行する。
一方、選択ノードが葉ノードでないと判定した場合(ステップS142;No)、領域データ追加部237は、領域インデックスDB221に基づいて、選択ノードの子ノードに追加領域と重なるものがあるか否かを判定する(ステップS144)。選択ノードの子ノードに追加領域と重なるものがあると判定した場合(ステップS144;Yes)、領域データ追加部237は、重なった子ノードを選択候補ノードに加え(ステップS145)、ステップS146に移行する。また、選択ノードの子ノードに追加領域と重なるものがないと判定した場合(ステップS144;No)、領域データ追加部237は、ステップS146に移行する。
続いて、領域データ追加部237は、全ての選択候補ノードの検索を終えたか否かを判定する(ステップS146)。全ての選択候補ノードの検索を終えていないと判定した場合(ステップS146;No)、領域データ追加部237は、選択候補ノード内の1つの未検索ノードを選択し(ステップS147)、ステップS142に移行する。
一方、全ての選択候補ノードの検索を終えたと判定した場合(ステップS146;Yes)、領域データ追加部237は、追加領域を各選択済みの重複領域に重複領域として追加する(ステップS148)。一例として、領域データ追加部237は、追加領域を、領域データDB222の重複領域として選択した各領域データに対応する重複領域222dに追加する。
そして、領域データ追加部237は、重複領域が1つ以上見つかったか否かを判定する(ステップS148A)。重複領域が1つも見つからなかった場合(ステップS148A;No)、領域データ追加部237は、そのまま領域データ追加処理を終了する。一方、重複領域が1つでも見つかった場合(ステップS148A;Yes)、領域データ追加部237は、追加領域の領域データを重複領域キャッシュデータDB223に追加する(ステップS149)。そして、領域データ追加部237は、追加領域に重複する重複領域の領域データを依頼元の検索サーバ2へ返答する(ステップS150)。そして、領域データ追加部237は、追加の領域データを重複領域へ設定するように依頼された検索サーバ2による領域データ追加処理を終了する。
[検索処理の具体例]
次に、検索処理の具体例を、図24Aおよび図24Bを参照して説明する。図24Aおよび図24Bは、実施例に係る検索処理の具体例を示す図である。なお、図24A、図24Bでは、検索サーバA、BのそれぞれのRツリーが表わされている。検索サーバAは、領域IDが1、2、3、4、5である領域を担当している。検索サーバBは、領域IDが6、7、8、9である領域を担当している。
図24Aに示すように、領域検索要求を送信する端末装置が、領域IDが8である前回領域から所定の領域に移動したとする。すなわち、領域検索要求を送信する端末装置の現在位置は、検索されることになる領域IDが4である領域内であるとする。すると、振分サーバ1は、領域検索要求の現在位置を担当範囲に持つノードを検索し、ノードが担当する検索サーバ2を振分対象とする。ここでは、振分サーバ1は、現在位置を担当範囲(矩形領域)に含むノードbを検索し、ノードbが担当する検索サーバAを振分対象とする。
検索サーバAは、自サーバが担当する担当領域に、前回領域を含んでいるか否かを判定する。ここでは、検索サーバAは、Rツリーに、前回領域の領域IDである8を含んでいないので、前回領域を含んでいないと判定する。すると、検索サーバAは、ルートノードbからトップダウンに、現在位置を含む領域を検索する。ここでは、検索サーバAは、ルートノードbからノードdを辿って、現在位置を含む領域の領域ID4を検索する。
これにより、端末装置が担当領域を跨ぐように移動する場合であっても、端末装置の現在位置に関係する検索サーバAが領域を検索するので、領域を検索する際のサーバ間での通信コストを削減できる。つまり、仮に、前回領域を担当する検索サーバBが先行して前回領域からボトムアップに検索し、その後、検索サーバAがトップダウンに検索するとする。そうすると、検索サーバBおよび振分サーバ1間、振分サーバ1および検索サーバA間での無駄なバックトラックが発生するので、サーバ間での通信コストがかかってしまう。したがって、検索システム9は、サーバ間での通信コストを削減でき、ひいては、領域検索の検索時間を高速化することができる。
ここで、端末装置が担当領域を跨ぐように移動する場合であっても、担当領域が重複する領域に移動する場合がある。かかる場合について説明する。図24Bでは、領域ID9の領域と領域ID5の領域とは、互いに重複しているとする。そして、領域ID9の領域は、検索サーバAが担当する領域であり、領域ID5の領域は、検索サーバBが担当する領域である。
図24Bに示すように、領域検索要求を送信する端末装置が、領域IDが8である前回領域から検索サーバA、Bの重複領域に移動したとする。すなわち、領域検索要求を送信する端末装置の現在位置は、検索されることになる領域IDが9、5である領域内であるとする。すると、振分サーバ1は、領域検索要求の現在位置を担当範囲に持つノードを検索し、ノードが担当する検索サーバ2を振分対象とする。ここでは、振分サーバ1は、現在位置を担当範囲(矩形領域)に含むノードb、eを検索し、ノードb、eが担当する検索サーバA、Bを振分対象とする。
検索サーバAは、自サーバが担当する担当領域に、前回領域を含んでいるか否かを判定する。ここでは、検索サーバAは、Rツリーに、前回領域の領域IDである8を含んでいないので、前回領域を含んでいないと判定する。すると、検索サーバAは、ルートノードbからトップダウンに、現在位置を含む領域を検索する。ここでは、検索サーバAは、ルートノードbからノードdを辿って、現在位置を含む領域の領域ID5を検索する。さらに、検索サーバAは、領域ID5の領域と重複する、領域ID9の領域も現在位置を含むので、領域ID5、9を検索結果とする領域検索応答を振分サーバ1に送信することが可能となる。
一方、検索サーバBは、自サーバが担当する担当領域に、前回領域を含んでいるか否かを判定する。ここでは、検索サーバBは、Rツリーに、前回領域の領域IDである8を含んでいるので、前回領域を含んでいると判定する。すると、検索サーバBは、前回領域に対応する葉ノードgからボトムアップに、現在位置を含む領域を検索する。ここでは、検索サーバBは、前回領域(領域ID8の領域)に現在位置が含まれないので、前回領域の親ノードgを辿って、現在位置を含む領域の領域ID9を検索する。さらに、検索サーバAは、領域ID9の領域と重複する、領域ID5の領域も現在位置を含むので、領域ID9,5を検索結果とする領域検索応答を振分サーバ1に送信することが可能となる。
これにより、端末装置が、担当領域が重複する領域に移動する場合であっても、端末装置の現在位置に関係する検索サーバA、Bが検索することとなるので、サーバ間での通信コストを削減できる。この結果、検索システム9は、領域検索の検索時間を高速化することができる。特に、前回領域を担当する検索サーバBは、前回領域からボトムアップで検索するので、高速に検索することが可能となる。また、端末装置の現在位置に関係する検索サーバA、Bが並行して検索を行うので、振分サーバ1は、早い方の検索結果を端末装置に応答することができ、応答時間を高速化できる。
[実施例の効果]
上記実施例によれば、検索システム9は、振分サーバ1および検索サーバ2を有する。振分サーバ1は、現在位置を担当領域に含む検索サーバ2へ現在位置に関わる領域検索要求を振り分ける。そして、検索サーバ2は、自サーバが担当する担当領域に前回の領域検索要求で検索された領域を示す前回領域を含む場合、Rツリーの前回領域に対応する葉ノードからボトムアップに検索する。検索サーバ2は、自サーバが担当する担当領域に前回領域を含まない場合、Rツリーのルートノードからトップダウンに検索する。そして、検索サーバ2は、検索された結果を示す検索結果を振分サーバ1に出力する。かかる構成によれば、振分サーバ1は、現在位置を用いて領域検索要求を振り分ける検索サーバ2を選択する。そして、選択された各検索サーバ2は、ボトムアップの検索、トップダウンの検索を使い分けながら、並行して検索処理を行うので、検索時間を高速化することができる。すなわち、各検索サーバ2が、順番に検索処理を行う場合と比較して、サーバ間での通信コストを削減でき、ひいては、検索時間を高速化することができる。
また、上記実施例によれば、振分サーバ1は、検索結果を受け取ると、領域検索要求を振り分けた検索サーバ2の数が複数である場合、検索結果を出力した検索サーバ2と異なる検索サーバ2に対して領域検索の終了を通知する。かかる構成によれば、振分サーバ1は、検索結果を出力した検索サーバ2以外に領域検索の終了を通知することで、領域検索を中止させることができるので、検索サーバ2の負荷を削減できる。
また、上記実施例によれば、振分サーバ1は、Rツリーのルートノードより下位の所定の深度にあるノードそれぞれをいずれかの検索サーバ2が担当するように割り当てる。かかる構成によれば、振分サーバ1は、検索サーバ2が複数存在する場合、各検索サーバ2に所定の深度にある異なるノードを担当させるので、各検索サーバ2の負荷を分散させることができる。
また、上記実施例によれば、振分サーバ1は、所定の深度にあるノードの数が検索サーバ2の数より大きくなるような深度を選択し、選択した深度にあるノードそれぞれをいずれかの検索サーバ2が担当するように割り当てる。かかる構成によれば、振分サーバ1は、検索サーバ2が複数存在する場合、複数の検索サーバ2それぞれに、選択した深度にあるノードを担当させることができるので、複数の検索サーバ2を効率的に活用できる。
また、上記実施例によれば、検索サーバ2は、現在位置を含む領域を検索できた場合、領域データDB222を用いて、検索できた領域の重複領域の中から現在位置を含む領域を検索する。かかる構成によれば、検索サーバ2は、現在位置を含む領域を1個検索できれば、検索できた領域の重複領域の中から該位置を含む領域を検索すれば良いので、該位置を含む領域検索を効率的に行うことができる。この結果、検索サーバ2は、該位置を含む領域検索の検索時間を高速化できる。
なお、前回領域DB123は、センサーID123aと前回検索領域123bとを対応付けるものとして説明した。しかしながら、前回領域DB123は、センサーID123aを、例えば、領域検索を要求する端末装置の装置IDに代えても良いし、領域検索を要求する携帯電話の携帯電話番号に代えても良い。すなわち、センサーID123aに相当するIDは、ユースケース毎に変えることができる。
また、ボトムアップ検索部235およびトップダウン検索部236は、図18Aおよび図18Bで示したように、検索処理のうち所定の処理の後に、振分サーバ1から終了指示があったか否かを確認するようにした。しかしながら、ボトムアップ検索部235およびトップダウン検索部236は、図18Aおよび図18Bで示した例に限らず、終了指示確認をいれる箇所を増減させても良い。
[プログラムなど]
なお、振分サーバ1は、既知のパーソナルコンピュータ、ワークステーションなどの情報処理装置に、上記したインデックス割当部131、振分部132、領域データ追加部133などの各機能を搭載することによって実現することができる。検索サーバ2は、既知のパーソナルコンピュータ、ワークステーションなどの情報処理装置に、上記した判定部234、ボトムアップ検索部235、トップダウン検索部236などの各機能を搭載することによって実現することができる。
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、判定部234およびボトムアップ検索部235、判定部234およびトップダウン検索部236をそれぞれ1個の部として統合しても良い。一方、ボトムアップ検索部235を、担当領域から位置情報を含む領域を検索する第1の検索部と担当領域から検索できた領域と重複する領域から位置情報を含む領域を検索する第2の検索部とに分散しても良い。同様に、トップダウン検索部236を、担当領域から位置情報を含む領域を検索する第1の検索部と担当領域から検索できた領域と重複する領域から位置情報を含む領域を検索する第2の検索部とに分散しても良い。また、領域データDB222や重複領域キャッシュデータDB223などの記憶部を検索サーバ2の外部装置としてネットワーク経由で接続するようにしても良い。
また、上記実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、図11に示した検索サーバ2と同様の機能を実現する検索プログラムを実行するコンピュータの一例を説明する。図25は、検索プログラムを実行するコンピュータの一例を示す図である。
図25に示すように、コンピュータ200は、各種演算処理を実行するCPU201と、ユーザからのデータの入力を受け付ける入力装置202と、ディスプレイ203を有する。また、コンピュータ200は、記憶媒体からプログラムなどを読取る読み取り装置204と、ネットワークを介して他のコンピュータとの間でデータの授受を行うインタフェース装置205とを有する。また、コンピュータ200は、各種情報を一時記憶するRAM206と、ハードディスク装置207を有する。そして、各装置201〜207は、バス208に接続される。
ハードディスク装置207は、検索プログラム207aなどのプログラムを記憶する。CPU201は、例えばプログラム207aを読み出して、RAM206に展開する。検索プログラム207は、検索プロセス206aとして機能する。例えば、検索プロセス206aは、判定部234、ボトムアップ検索部235およびトップダウン検索部236に対応する。
なお、検索プログラム207aについては、必ずしも最初からハードディスク装置207に記憶させておかなくてもよい。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ200がこれらから検索プログラム207aを読み出して実行するようにしても良い。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)第1の情報処理装置および複数の第2の情報処理装置を有する検索システムであって、
前記第1の情報処理装置は、
所定の位置を担当領域に含む前記第2の情報処理装置へ前記位置に関わる検索要求を振り分ける振分部を有し、
前記第2の情報処理装置は、
自装置が担当する担当領域に前回の検索要求で検索された領域を示す前回領域を含む場合、領域の包含関係をインデックスで指し示すインデックス情報をノードの情報としてツリー構造で表したインデックスツリーの前記前回領域に対応する葉ノードからボトムアップに前記所定の位置を含む領域を検索し、前記担当領域に前記前回領域を含まない場合、前記インデックスツリーの前記担当領域に対応するルートノードからトップダウンに前記所定の位置を含む領域を検索する検索部と、
前記検索部によって検索された結果を示す検索結果を前記第1の情報処理装置に出力する出力部と、
を有することを特徴とする検索システム。
(付記2)前記第1の情報処理装置は、
前記出力部によって出力された検索結果を最初に受け取ると、前記検索要求を振り分けた第2の情報処理装置の数が複数である場合、前記検索結果を出力した装置と異なる第2の情報処理装置に対して前記検索要求の終了を通知する通知部
を有することを特徴とする付記1に記載の検索システム。
(付記3)前記第1の情報処理装置は、
前記インデックスツリーのルートノードより下位の所定の深度にあるノードそれぞれをいずれかの前記第2の情報処理装置が担当するように割り当てる割当部
を有することを特徴とする付記1または付記2に記載の検索システム。
(付記4)前記割当部は、所定の深度にあるノードの数が前記第2の情報処理装置の数より大きくなるような前記深度を選択し、選択した深度にあるノードそれぞれをいずれかの前記第2の情報処理装置が担当するように割り当てる
ことを特徴とする付記3に記載の検索システム。
(付記5)前記第2の情報処理装置は、
前記領域毎に各領域と重複する重複領域の情報を記憶する記憶部を有し、
前記検索部は、前記位置を含む領域を検索できた場合、前記記憶部に記憶された情報に基づいて、検索できた領域の重複領域の中から前記位置を含む領域を検索する
ことを特徴とする付記1から付記4のいずれか1つに記載の検索システム。
(付記6)所定の位置に関わる検索要求を受け取ると、自装置が担当する担当領域に前回の検索要求で検索された領域を示す前回領域を含む場合、領域の包含関係をインデックスで指し示すインデックス情報をノードの情報としてツリー構造で表したインデックスツリーの前記前回領域に対応する葉ノードからボトムアップに前記所定の位置を含む領域を検索し、前記担当領域に前記前回領域を含まない場合、前記インデックスツリーの前記担当領域に対応するルートノードからトップダウンに前記所定の位置を含む領域を検索する検索部と、
前記検索部によって検索された結果を示す検索結果を前記検索要求の要求元に出力する出力部と、
を有することを特徴とする情報処理装置。
(付記7)第1の情報処理装置および複数の第2の情報処理装置を有する検索システムが実行する検索方法であって、
前記第1の情報処理装置は、
所定の位置を担当領域に含む前記第2の情報処理装置へ前記位置に関わる検索要求を振り分け、
該振り分けられた前記第2の情報処理装置は、
自装置が担当する担当領域に前回の検索要求で検索された領域を示す前回領域を含む場合、領域の包含関係をインデックスで指し示すインデックス情報をノードの情報としてツリー構造で表したインデックスツリーの前記前回領域に対応する葉ノードからボトムアップに前記所定の位置を含む領域を検索し、前記担当領域に前記前回領域を含まない場合、前記インデックスツリーの前記担当領域に対応するルートノードからトップダウンに前記所定の位置を含む領域を検索し、
該検索する処理によって検索された結果を示す検索結果を前記第1の情報処理装置に出力する
各処理を実行することを特徴とする検索方法。