(57)【要約】【課題】複数の索引と、索引に対応するオブジェクトテーブルを利用して、少ないリソース環境下で高速で検索を実施する。【解決手段】属性の異なる第１検索条件及び第２検索条件を満たすオブジェクトを検索するデータ管理装置は、第１検索条件に対応する属性の第１索引と、第１索引のオブジェクトノードに対応する識別子を管理する第１オブジェクト管理情報と、第２検索条件に対応する属性の第２索引と、第２索引のオブジェクトノードに対応する識別子を管理する第２オブジェクト管理情報と、第１検索条件で第１索引を探索してオブジェクトノードを取得し、当該オブジェクトノードで第１オブジェクト管理情報を探索して識別子を取得する主索引検索部と、第２検索条件で第２索引を探索してオブジェクトノードを取得し、オブジェクトノードで第２オブジェクト管理情報を探索して識別子を取得する副索引検索部と、を有する。【選択図】図１１
2020135530.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリを有し、属性の異なる第１の検索条件と第２の検索条件を受け付けて、前記第１の検索条件及び第２の検索条件を満たすオブジェクトを検索するデータ管理装置であって、
前記第１の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第１の索引と、
前記第１の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第１のオブジェクト管理情報と、
前記第２の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第２の索引と、
前記第２の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第２のオブジェクト管理情報と、
前記第１の検索条件で前記第１の索引を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第１のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する主索引検索部と、
前記第２の検索条件で前記第２の索引を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第２のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する副索引検索部と、を有することを特徴とするデータ管理装置。
【請求項２】
請求項１に記載のデータ管理装置であって、
前記オブジェクト識別子に対応するオブジェクトを格納するオブジェクト詳細情報をさらに有し、
前記主索引検索部は、
前記第１の検索条件を満足する前記オブジェクト識別子を取得した場合に、前記副索引検索部で前記第２の検索条件を満足し、かつ前記第１の検索条件を満足するオブジェクト識別子を検索し、当該オブジェクト識別子に対応するオブジェクトを前記オブジェクト詳細情報から取得して、当該オブジェクトを検索結果として出力することを特徴とするデータ管理装置。
【請求項３】
請求項１に記載のデータ管理装置であって、
前記主索引検索部は、
前記第１の検索条件を満足する前記オブジェクト識別子を候補オブジェクト識別子として前記副索引検索部へ出力し、
前記副索引検索部は、
前記第２の検索条件を満足する前記オブジェクト識別子を比較対象オブジェクト識別子として取得し、前記候補オブジェクト識別子が前記比較対象オブジェクト識別子と一致するか否かを判定し、
前記主索引検索部は、
前記副索引検索部で、比較対象オブジェクト識別子と一致する候補オブジェクト識別子を検索結果として出力することを特徴とするデータ管理装置。
【請求項４】
請求項３に記載のデータ管理装置であって、
前記副索引検索部は、
当該副索引検索部の検索条件に合致しない候補オブジェクト識別子の値を格納する非該当オブジェクト識別子範囲情報を管理し、前記候補オブジェクト識別子が前記比較対象オブジェクト識別子と一致しない場合には、当該候補オブジェクト識別子の値を含む範囲を前記非該当オブジェクト識別子範囲情報に設定することを特徴とするデータ管理装置。
【請求項５】
請求項４に記載のデータ管理装置であって、
前記主索引検索部は、
前記候補オブジェクト識別子の値が前記非該当オブジェクト識別子範囲情報に含まれるか否かを判定し、前記候補オブジェクト識別子の値が前記非該当オブジェクト識別子範囲情報に含まれる場合には、前記副索引検索部の処理を省略して前記候補オブジェクト識別子を第２の検索条件に一致しないと判定することを特徴とするデータ管理装置。
【請求項６】
請求項１に記載のデータ管理装置であって、
前記第２のオブジェクト管理情報は、
前記オブジェクトノードが対応するオブジェクト識別子の値の昇順又は降順でソートされたことを特徴とするデータ管理装置。
【請求項７】
プロセッサとメモリを有する計算機で、属性の異なる第１の検索条件と第２の検索条件を受け付けて、前記第１の検索条件及び第２の検索条件を満たすオブジェクトを検索するデータ検索方法であって、
前記計算機が、前記第１の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第１の索引を読み込んで、前記第１の検索条件で前記第１の索引を探索してオブジェクトノードを取得する第１のステップと、
前記計算機が、前記第１の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第１のオブジェクト管理情報を読み込んで、前記取得されたオブジェクトノードで前記第１のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する第２のステップと、
前記計算機が、前記第２の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第２の索引を読み込んで、前記第２の検索条件で前記第２の索引を探索してオブジェクトノードを取得する第３のステップと、
前記計算機が、前記第２の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第２のオブジェクト管理情報を読み込んで、前記取得されたオブジェクトノードで前記第２のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する第４のステップと、
を含むことを特徴とするデータ検索方法。
【請求項８】
プロセッサとメモリを有する計算機で、属性の異なる第１の検索条件と第２の検索条件を受け付けて、前記第１の検索条件及び第２の検索条件を満たすオブジェクトを検索させるためのプログラムであって、
前記第１の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第１の索引を読み込んで、前記第１の検索条件で前記第１の索引を探索してオブジェクトノードを取得する第１のステップと、
前記第１の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第１のオブジェクト管理情報を読み込んで、前記取得されたオブジェクトノードで前記第１のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する第２のステップと、
前記第２の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第２の索引を読み込んで、前記第２の検索条件で前記第２の索引を探索してオブジェクトノードを取得する第３のステップと、
前記第２の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第２のオブジェクト管理情報を読み込んで、前記取得されたオブジェクトノードで前記第２のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する第４のステップと、
を前記計算機に実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ管理システム、データ管理方法、及び、データ管理プログラムに関するものである。
【背景技術】
【０００２】
データベース管理システムでは、数値データ、文字列データ、時刻印データ、空間データなど、様々な種類のデータを内包するオブジェクトを管理できる。
【０００３】
このようなオブジェクトの検索方法として、オブジェクトが有するデータを一定の順序で配置することで構築した索引を参照し、検索条件の値を基に、該当オブジェクトを高速に絞り込む方法が知られている。
【０００４】
ここで、取り出したいオブジェクトを絞り込むために、複数の検索条件の論理積によって検索する場合が多く、特に、検索条件ごとに対象とするデータが異なる場合、複数の索引を利用して検索する。そのため、データベース管理システムでは、この複数の検索条件の全てに該当するオブジェクトを、複数の索引を用いて高速に検索することが求められる。
【０００５】
例えば、カーナビゲーションシステムにおいて、登録されている施設情報オブジェクトのうち、“コンビニ”の文字列を含み、かつ、自車位置から半径５Ｋｍ以内の位置に存在するオブジェクトを検索する場合などがある。
【０００６】
従来のデータベース管理システムでは、複数の検索条件の論理積による検索を行う場合、文字列データや空間データなどのそれぞれのデータごとに構築された索引を利用して一時的な絞り込み結果を個々に生成し、それぞれの一時的な絞り込み結果を突き合わせてオブジェクトを抽出して検索結果を得る。
【０００７】
この方法では、それぞれの索引ごとの一次的な絞り込み結果を生成する際に、大量の索引オブジェクトを参照するため、ディスクアクセス処理やソート処理に膨大な時間が必要となる。この処理時間を短縮させる方法として、データベース管理システムが管理する全てのオブジェクトを、大容量の主記憶装置上に予め配置しておき、ディスクアクセスを削減させる方法があるが、大規模なハードウェア資源が必要となる。
【０００８】
一方、大容量の主記憶を利用しない別の解決方法として、特許文献１には、文書情報と空間情報を共に検索する手法が開示されている。この手法によると、空間情報と、文書情報と、固有表現を位置情報に変換できる地名辞書を用いて解決する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１０−１２８８０６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
前記した特許文献１で開示される方法では、検索条件のデータの種類が文字列データと空間データだけを対象としており、数値データや時刻印データなどの種類の検索条件を利用できない。また、前記特許文献１では、固有表現を位置情報に変換できる地名辞書を予め構築する必要があり、任意の文字列を検索条件のデータとして利用できない。
【００１１】
そこで、本発明は、複数の検索条件の論理積によるオブジェクトの検索処理について、前記した問題を解決し、複数の索引と、対応するオブジェクトテーブルを利用して、少ないリソース環境下で高速で検索を実施することを、主な目的とする。
【課題を解決するための手段】
【００１２】
本発明は、プロセッサとメモリを有し、属性の異なる第１の検索条件と第２の検索条件を受け付けて、前記第１の検索条件及び第２の検索条件を満たすオブジェクトを検索するデータ管理装置であって、前記第１の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第１の索引と、前記第１の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第１のオブジェクト管理情報と、前記第２の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第２の索引と、前記第２の索引のオブジェクトノードに対応するオブジェクト識別子を管理する第２のオブジェクト管理情報と、前記第１の検索条件で前記第１の索引を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第１のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する主索引検索部と、前記第２の検索条件で前記第２の索引を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第２のオブジェクト管理情報を探索して前記オブジェクト識別子を取得する副索引検索部と、を有する。
【発明の効果】
【００１３】
本発明によれば、複数の検索条件の論理積によるオブジェクトの検索処理を、複数の索引部と、対応するオブジェクトテーブルを利用して、少ないリソース環境下で高速に実施することができる。
【００１４】
本明細書において開示される主題の、少なくとも一つの実施の詳細は、添付されている図面と以下の記述の中で述べられる。開示される主題のその他の特徴、態様、効果は、以下の開示、図面、請求項により明らかにされる。
【図面の簡単な説明】
【００１５】
【図１】本発明の実施例１を示し、データ管理装置の一例を示すブロック図である。
【図２】本発明の実施例１を示し、主索引部及び副索引部の一例を示すブロック図である。
【図３Ａ】本発明の実施例１を示し、空間データの一例を示す図である。
【図３Ｂ】本発明の実施例１を示し、空間索引ツリーのツリー構造とオブジェクト詳細テーブルの関係を示す図である。
【図４Ａ】本発明の実施例１を示し、文字列データの一例を示す図である。
【図４Ｂ】本発明の実施例１を示し、文字列データ索引部の展開図である。
【図５】本発明の実施例１を示し、非該当ＲＯＷＩＤ範囲リストの構成図である。
【図６】本発明の実施例１を示し、概略判定リストの構成図である。
【図７Ａ】本発明の実施例１を示し、空間索引ツリーによる検索対象の空間データを示す説明図である。
【図７Ｂ】本発明の実施例１を示し、空間索引ツリーによる検索処理の説明図である。
【図８Ａ】本発明の実施例１を示し、文字列データの一例を示す図である。
【図８Ｂ】本発明の実施例１を示し、文字列データ索引ツリーによる検索処理の説明図である。
【図９】本発明の実施例１を示し、非該当ＲＯＷＩＤ範囲リストの新規追加処理の説明図である。
【図１０】本発明の実施例１を示し、非該当ＲＯＷＩＤ範囲リストの範囲の更新処理の説明図である。
【図１１】本発明の実施例１を示し、主索引検索部の処理の一例を示すフローチャートである。
【図１２Ａ】本発明の実施例１を示し、副索引検索部のフローチャートの処理の一例を示す前半部である。
【図１２Ｂ】本発明の実施例１を示し、副索引検索部の処理の一例を示すフローチャートの後半部である。
【図１３】本発明の実施例２を示し、データ管理装置の一例を示すブロック図である。
【図１４】本発明の実施例２を示し、主索引部及び副索引部の一例を示すブロック図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施形態を添付図面に基づいて説明する。
【実施例１】
【００１７】
図１は、データ管理装置１を示す構成図である。データ管理装置１は、中央処理装置９１と、主記憶装置９２と、二次記憶装置９３と、入力装置９４、及び、出力装置９５を含むコンピュータとして構成される。ただし、二次記憶装置９３については、主記憶装置で代替することも可能である。
【００１８】
中央処理装置９１は主記憶装置９２に格納されたプログラムの処理を行い、各処理を実行する。主記憶装置９２は、中央処理装置９１で実行されるプログラムやデータを格納するメモリで構成される。
【００１９】
主記憶装置９２には、処理部として、オブジェクト検索部５０を構成するためのプログラムと、非該当ＲＯＷＩＤ範囲リスト８１と、概略判定リスト８２と、が格納されている。
【００２０】
オブジェクト検索部５０には、主索引検索部としての空間索引検索部６１と、副索引検索部としての文字列索引検索部７１と、非該当ＲＯＷＩＤ範囲設定部５２の各機能部が含まれる。オブジェクト検索部５０の各機能部はプログラムとして主記憶装置９２にロードされて中央処理装置９１で実行される。
【００２１】
中央処理装置９１は、各機能部のプログラムに従って処理を実行することによって、所定の機能を提供する機能部として稼働する。例えば、中央処理装置９１は、空間索引検索プログラムに従って処理を実行することで空間索引検索部６１として機能する。他のプログラムについても同様である。さらに、中央処理装置９１は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。なお、各機能部で行われる処理については後述する。
【００２２】
二次記憶装置９３は、ハードディスクドライブやフラッシュメモリドライブなどの大容量の記憶装置で構成される。二次記憶装置９３には、数値データや、文字列データ、空間データなど様々な属性のデータがオブジェクトとしてオブジェクト詳細テーブル９０に格納されている。
【００２３】
また、二次記憶装置９３には、オブジェクトを検索するための条件に用いられる属性に応じて、オブジェクトの属性データを索引化した索引部が格納される。本実施例１では、索引部として、１つの主索引部（空間データ索引部２３）と、副索引部（文字列データ索引部３３）から構成される例を示す。
【００２４】
入力装置９４は、オブジェクトの検索に必要な複数の検索条件を入力する装置である。例えば、車載情報端末では、入力装置９４として、ハードウェアキーボードの他に、タッチパネルによるソフトウェアキーボードなどで構成される。出力装置９５は、オブジェクトの検索結果を表示する装置であり、液晶ディスプレイやスピーカなどにより構成される。
【００２５】
なお、本実施例１では、入力装置９４から空間データの検索条件と文字列データの検索条件を受け付けて、これらの検索条件の論理積と一致するオブジェクトを検索する例を示す。
【００２６】
図２は、データ管理装置１における主索引部（空間データ索引部２３）、及び、副索引部（文字列データ索引部３３）として扱う索引部と、オブジェクトを格納したオブジェクト詳細テーブル９０の関係を示す図である。
【００２７】
空間データ索引部２３は、空間索引ツリー２４と空間オブジェクトテーブル２５で構成される。空間索引検索部６１は、指定された検索条件に応じて空間索引ツリー２４を辿りながら、空間索引ツリー２４にリンクする空間オブジェクトテーブル２５でオブジェクトノードを特定する。
【００２８】
空間オブジェクトテーブル２５は、オブジェクト詳細テーブル９０で管理される個々のオブジェクトを、オブジェクト識別子（ＲＯＷＩＤ）によってリンクする。空間オブジェクトテーブル２５の各オブジェクトノードは、１つ又は複数のＲＯＷＩＤを管理する。
【００２９】
一方、副索引部としての文字列データ索引部３３も空間データ索引部２３と同様に、文字列索引ツリー３４及び文字列オブジェクトテーブル３５で構成され、空間データ索引部２３と同等のリンクを含む。
【００３０】
ただし、文字列データ索引部３３の文字列オブジェクトテーブル３５で管理される１つのオブジェクトノード（キー値）の中で、ＲＯＷＩＤの値は昇順又は降順にソートされており、空間データ索引部２３では１つのオブジェクトノード（キー値）の中で、ＲＯＷＩＤの順序は任意に配置されている。
【００３１】
空間索引ツリー２４には、空間索引の情報が、低データ量かつ高速検索が可能なツリー構造として格納される（詳細は図３Ａ、図３Ｂを参照）。空間オブジェクトテーブル２５には、空間索引ツリー２４が示す各領域について、オブジェクトが含まれているか否かの情報が格納される。
【００３２】
文字列索引ツリー３４には、文字列索引の情報が、低データ量かつ高速検索可能なツリー構造として格納される（詳細は図４Ａ、図４Ｂを参照）。文字列オブジェクトテーブル３５には、文字列索引ツリー３４が示す各文字列を含むオブジェクトのＲＯＷＩＤが、オブジェクトノードに対応付けて格納される。なお、ＲＯＷＩＤは、オブジェクト詳細テーブル９０のオブジェクトを指し示すポインタとして機能する。
【００３３】
図２に示した空間索引検索部６１は、空間に関する検索条件を受け付けて、空間索引ツリー２４を用いて、任意の範囲（検索範囲）に含まれるオブジェクトを範囲検索する。範囲検索を実現するため、空間索引検索部６１は、検索起点設定部６２と、空間条件判定部６３を含む。本実施例１では、空間に関する検索条件として位置情報を中心として所定の半径内のオブジェクトを検索する例を示す。
【００３４】
図２に示した文字列索引検索部７１は、文字列に関する検索条件を受け付けて、文字列索引ツリー３４を用いて、検索条件の文字列を含むオブジェクトを検索する。文字列検索を実現するために、文字列索引検索部７１は、検索初期設定部７２と、文字列条件判定部７３を含む。
【００３５】
本実施例１のオブジェクト検索部５０は、位置情報の検索条件と、文字列の検索条件の論理積を満たすオブジェクトを検索する例を示す。
【００３６】
オブジェクト詳細テーブル９０には、位置情報の属性と文字列の属性を含むオブジェクトのデータと、当該オブジェクトの識別子としてのＲＯＷＩＤが格納される。なお、ＲＯＷＩＤは、予めオブジェクト毎に設定した識別子で、データ管理装置１内でユニークな値である。
【００３７】
図３Ａ、図３Ｂは、空間データ索引部２３の空間索引ツリー２４が示す情報を展開した展開図である。図３Ａでは、横（ｘ）１６区画×縦（ｙ）１６区画の空間領域を、情報（ｚ軸）から見下ろした形式で示しており、図中７つのオブジェクト（Ａ〜Ｇ）が配置されている。
【００３８】
図３Ａにおいて、展開図内の数字（例えば、原点「０」や中央点「１９２」など）は、その数字の記載位置に対応するＺオーダーの順位で符号化したモートン符号値（又はＺ階数）を示す。なお、モートン符号値は、ｎ次元の空間領域上の位置を、１次元のスカラ値に写像する写像値の一例である。本実施例１では、モートン符号値を例示したが、これに限定されるものではなく、ヒルベルト曲線で符号化したヒルベルト符号値など他の写像演算値を用いてもよい。
【００３９】
図３Ａにおいて、展開図内の円は、各オブジェクトの座標値を示しており、オブジェクトＩＤ（Ａ〜Ｇ）が記述されている。展開図内の破線は、空間領域を各軸の垂直２等分線で等面積に４分割することで生成される各空間領域の境界を示す。
【００４０】
例えば、モートン符号値「１９２」を起点（左下点）とする右上の領域４０１は、１６区画の空間領域を１分割した結果の大きめの（８ｘ８区画）領域である。一方、モートン符号値「６０」を起点（左下点）とする中央付近の領域４０２は、１６区画の空間領域を３分割した結果の小さ目の（２ｘ２区画）領域である。
【００４１】
空間データ索引部２３は、各空間領域の位置を、その代表点（例えば、左下の位置）を変換したモートン符号値と分割回数（分割数）の組で表現する。空間領域を再帰的に等面積で４分割するため、モートン符号値と分割数の組で空間領域の位置と形状を一意に特定できる。空間領域の代表点は、領域内のｘ座標とｙ座標の最小値を組みとした座標値とする。
【００４２】
以下、座標値（７、１０）をモートン符号値「１５７」に変換する計算方法を示す。
【００４３】
（手順１）座標値として、（ｘ、ｙ）＝（７、１０）が入力される。
（手順２）入力された１０進数の座標値（７、１０）を、２進数の座標値（０１１１、１０１０）に変換する。
（手順３）２進数の座標値（０１１１、１０１０）を、ｙ座標とｘ座標の順で、２進数の先頭ビットから順に交互に並べ、「１００１１１０１」とする。
（手順４）「１００１１１０１」を１０進数に変換すると、モートン符号値「１５７」となる。
【００４４】
図３Ｂは、図３Ａが示す空間索引ツリー２４の情報を、ツリー構造として示した構成図である。空間索引ツリー２４は、各ノードと、ノード間を接続するリンクとがツリー構造になっている。空間索引ツリー２４は、バランス木（Ｂ木、Ｂ＋木など）のツリー構造であり、非リーフノード（ルートノード）、リーフノード、オブジェクトノードから構成される。
【００４５】
以下の説明では、バランス木の一例として、Ｂ＋木を用いる例を説明する。Ｂ＋木では、非リーフノードにはキー値と子ノードへのポインタ、リーフノードにはキー値とレコードポインタが含まれる。そして、隣接するリーフノードの間を片方向のリンクで連結する。
【００４６】
空間索引ツリー２４のリーフノード、非リーフノードには、キー値であるモートン符号値（図中では数値で示す）と、そのモートン符号値が示す左下座標からの空間領域を生成するための分割数と、の組が最大３組分格納できる。例えば、図３Ａの左上の空間領域は、「モートン符号値＝１２８、分割数＝１」の組として表現される。
【００４７】
このモートン符号値と分割数との組が、図３Ａの１つ分の空間領域を示すので、以下の説明では、モートン符号値と分割数の組を「ノード内の空間領域情報」と表記する。
【００４８】
このように、空間索引ツリー２４では、空間領域を等面積で４分割することで生成される空間領域をモートン符号値と分割数との組で一意に表現する。
【００４９】
空間索引ツリー２４の非リーフ（幹）ノードは、最大３件の空間領域情報を格納する。非リーフノードは、非リーフノード又はリーフノードを子ノードとしてリンクする。非リーフノード内の空間領域情報は、降順又は昇順に配置されており、空間領域情報間の図中白色部には、子ノードへのポインタが矢印で表記される。
【００５０】
なお、空間領域情報の最大個数を３件とするのは、あくまで一例である。
【００５１】
親ノードの第１空間領域情報と第２空間領域情報との間に設定されるポインタは、そのポインタが示す子ノードを指し示す。このとき、子ノードの各空間領域情報のモートン符号値は、第１空間領域情報のモートン符号値から、第２空間領域情報のモートン符号値までの範囲に収まる。
【００５２】
空間索引ツリー２４のリーフ（葉）ノードは、最大３件の空間領域情報を格納する。リーフノードは、オブジェクトノードにリンクする。リーフノードの空間領域情報は、降順又は、昇順に配置されている。リーフノードの各空間領域情報（例えば、モートン符号値「１６」）からは、その空間領域情報が示す空間領域に存在するオブジェクトを示すオブジェクトノードへのリンク（例えば、オブジェクト「Ｂ」）が存在する。
【００５３】
空間索引ツリー２４のオブジェクトノードは、オブジェクトの座標位置とＲＯＷＩＤ値を含む。
【００５４】
図４Ａは、副索引部の例に挙げた文字列データ索引部３３における文字列索引ツリー３４が示す情報を展開した展開図である。この展開図（図４Ａ）では、７個のオブジェクトの文字列データ（Ａ〜Ｇ）を示しており、文字列の中に含まれる任意の文字列を図４Ｂに示すツリー構造で管理する。本実施例１では、文字列管理構造として代表的な３−ＧＲＡＭ方式のトライ構造を一例として説明する。
【００５５】
３−ＧＲＡＭ方式では、文字列データ内の全ての文字を起点として、連続する３文字をキー値として図４Ｂのトライ構造で管理する。なお、文字列データの、後方２文字目、及び、最終文字から始まるキー値は、それぞれ、２文字、及び、１文字となる。したがって、１つの文字列データから生成されるキー値の数は文字列データの長さと等しい。
【００５６】
文字列索引ツリー３４の非リーフノードは、キー値の１文字の文字データを管理し、非リーフノード又はリーフノードを子ノードとしてリンクする。非リーフノード内の文字データは、降順又は昇順に配置されており、子ノードへのポインタが矢印で表記される。
【００５７】
文字列索引ツリー３４のリーフノードは、キー値の１文字の文字データを管理し、オブジェクトノードをリンクする。リーフノードの文字データは、降順又は、昇順に配置されている。
【００５８】
例えば、図４Ａの文字列データＥに含まれる「ａｅｂ」は、図４Ｂの非リーフノードから深さ３のリーフノードまで、各ノードで「ａ」「ｅ」「ｂ」を１文字ごとに管理する。リーフノードは、対象文字列を含むオブジェクトノードをリンクし、オブジェクトノード（ａｅｂ）では、オブジェクト詳細情報のＲＯＷＩＤ（Ｅ）を管理する。
【００５９】
図４Ａの文字列データＧの前半に含まれる「ａｅｂ」も文字列データＥと同じくオブジェクトノード（ａｅｂ）で管理されるため、オブジェクト詳細テーブル９０のＲＯＷＩＤ（Ｇ）を含む。このとき、オブジェクトノードが管理するＲＯＷＩＤは、ＲＯＷＩＤの値によって昇順、又は、降順にソートされた形式で管理される。
【００６０】
図５は、検索条件に該当するＲＯＷＩＤを探索する手順において、いずれかの検索条件に対して非該当となることが予め判断できているＲＯＷＩＤの範囲を管理する、非該当ＲＯＷＩＤ範囲リスト８１の構造を示した図である。
【００６１】
最上位となる非該当ＲＯＷＩＤ範囲リスト８１は、相互に異なる複数の非該当ＲＯＷＩＤ範囲エントリを管理する。１つの非該当ＲＯＷＩＤ範囲エントリは、検索条件に対して非該当（不一致）となるＲＯＷＩＤの値の範囲を最小値と最大値によって管理する。
【００６２】
また、１つの非該当ＲＯＷＩＤ範囲の最大値（最大ＲＯＷＩＤ値）は、当該範囲において現在の検索条件に該当する最小のＲＯＷＩＤ値を示す。したがって、非該当ＲＯＷＩＤ範囲は、最小値以上であり、かつ、最大値よりも小さなＲＯＷＩＤを意味する。１つの非該当ＲＯＷＩＤ範囲エントリが表す非該当ＲＯＷＩＤ範囲は、他の非該当ＲＯＷＩＤ範囲エントリが表す非該当ＲＯＷＩＤ範囲と重複しない。
【００６３】
この非該当ＲＯＷＩＤ範囲リスト８１は、検索開始から検索終了の間で、主索引部（本実施例１では空間索引検索部６１）による検索から得られる主索引部の検索条件に該当するＲＯＷＩＤ（候補ＲＯＷＩＤ）が、副索引部（本実施例１では文字列索引検索部７１）によって検索条件に該当しないと判定される契機で、候補ＲＯＷＩＤの値を基に非該当ＲＯＷＩＤ範囲エントリの追加や最小値の更新がなされる。
【００６４】
例えば、非該当ＲＯＷＩＤの最小値が「１００」の非該当範囲エントリは、ＲＯＷＩＤの最小値が「１００」、最大値が「２００」を示す。これは、現在の検索条件に該当しないＲＯＷＩＤの値が「１００」以上、「２００」未満であることを示す。したがって、オブジェクト検索部５０は、現在の検索条件では、ＲＯＷＩＤの値が「１００」以上「２００」未満の範囲を除外して検索すればよい。
【００６５】
これにより、空間データ索引部２３及び文字列索引検索部７１は、非該当ＲＯＷＩＤ範囲リスト８１を参照することで、現在の検索条件にマッチしないＲＯＷＩＤを取得して、このＲＯＷＩＤ範囲を読み飛ばすことで、検索処理を高速化することができる。
【００６６】
図６は、概略判定リスト８２の概念図を示したものである。主索引部（本実施例１では空間索引検索部６１）による検索から得られる候補ＲＯＷＩＤが、全ての副索引部（本実施例１では文字列索引検索部７１）によってそれぞれの検索条件の全てに該当すると判断された場合に、空間データ索引部２３のキー値（本実施例１では座標値とＲＯＷＩＤ）が概略判定リスト８２へ登録される。
【００６７】
この概略判定リスト８２に登録されたＲＯＷＩＤは、検索結果として出力されるオブジェクトを示すものである。なお、検索結果の取り出し順序に、任意点からの距離順を指定された場合は、この概略判定リスト８２の各キーの座標値を基にソートを実施して検索結果を出力する。
【００６８】
空間範囲だけを検索条件に指定された場合に、オブジェクト検索部５０が主索引の例に挙げた空間データ索引部２３だけで該当オブジェクトを検索する手順を説明する。
【００６９】
図７Ａは、オブジェクト検索部５０が実行する、検索範囲を、太い破線で囲む矩形の左下座標（５、２）〜右上座標（７、５）としたときの、図３Ｂの空間索引ツリー２４を検索する様子を示す。以下に、この場合の手順について、図７Ａ及び図７Ｂを併せて参照しつつ、以下に説明する。
【００７０】
まず、図７Ｂにおける１回目の検索処理（図中左側の破線矢印７５）について、説明する。検索起点設定部６２は、図７Ａに示す検索範囲の左下座標（５、２）をモートン符号値「２８」に変換し、検索符号値Ｍに設定する。
【００７１】
空間索引ツリー２４を探索する際、空間索引検索部６１は、検索符号値Ｍに対応した座標を含む空間領域を辿る。モートン符号値の性質から、検索符号値Ｍ以下で最大のモートン符号値を含む部分木を辿ることになる。
【００７２】
この場合、図７Ｂにおいて、空間索引ツリー２４のルートノードを参照すると、モートン符号値「６０」の左の子ノードへのリンクを辿る。これは、このリンクは、検索符号値Ｍ「２８」以下で最大のモートン符号値をもつ部分木を指し示すためである。
【００７３】
ルートノードの子ノードでは、同様にモートン符号値「３２」の左ポインタが指し示す孫ノードを辿る。さらに、この孫ノードでは、検索符号値Ｍ「２８」は空間領域情報のモートン符号値「１６」を代表点とする空間領域に含まれるため（図７Ａで空間領域の右上座標のモートン符号値は「３１」であるため）、空間索引検索部６１は、そのノードからのリンク先であるオブジェクトノード「Ｂ」を概略判定リスト８２に入れる。
【００７４】
検索起点設定部６２は、空間索引ツリー２４をリーフノード（及びその下のオブジェクトノード）まで辿った後、検索符号値Ｍを更新する。次回の検索符号値Ｍは、今回の検索符号値Ｍに対応する検索範囲から、今回の検索符号値Ｍから検索された空間領域を除外（領域として切り取る）した後の、残りの検索範囲の座標に対応したモートン符号値の中で最小値になる。
【００７５】
例えば、図７Ａにおいて、今回の検索範囲（５、２）〜（７、５）に対して、検索された空間領域の範囲（４、０）〜（７、３）を除外すると、残りの検索範囲は（５、４）〜（７、５）となる。よって、検索起点設定部６２は、座標（５、４）のモートン符号値「４９」を、次回の検索符号値Ｍとする。
【００７６】
次に、図７Ｂにおける２回目の検索処理（図中中央の破線矢印７６）について、説明する。
【００７７】
空間索引検索部６１は、空間索引ツリー２４のルートノードを参照すると、検索符号値Ｍ「４９」以下で最大のモートン符号値をもつ部分木を指し示すモートン符号値「６０」の左の子ノードへのリンクを辿る。その子ノードでは、空間領域情報のモートン符号値「３２」以上で、「５２」よりも小さい、左から２つ目の子ノードへのリンクを辿る。その子ノード（ルートノードの孫ノード）では、検索符号値Ｍ「４９」は空間領域情報のモートン符号値「４８」を代表点とする空間領域に含まれる。このため、空間索引検索部６１は、そのノードからのリンク先であるオブジェクトノード「Ｃ」を概略判定リスト８２に入れる。
【００７８】
図７Ａで今回の検索範囲（５、４）〜（７、５）に対して、検索された空間領域の範囲（４、４）〜（５、５）を除外すると、残りの範囲は（６、４）〜（７、５）となる。よって、検索起点設定部６２は、図７Ａの座標（６、４）のモートン符号値「５２」を次の検索対象値Ｍとする。
【００７９】
そして、図７Ｂにおける３回目の検索処理（図中右側の破線矢印７７）について、説明する。
【００８０】
空間索引検索部６１は、空間索引ツリー２４のルートノードを参照すると、検索符号値Ｍ「５２」はルートノードの空間領域情報のモートン符号値「６０」よりも小さいので、左下の子ノードへのリンクを辿る。その子ノードでは、検索符号値Ｍ「５２」は空間領域情報のモートン符号値「５２」以上なので、さらに左から３つめの子ノードへのリンクを辿る。その子ノード（ルートノードの孫ノード）では、検索符号値Ｍ「５２」は空間領域情報のモートン符号値「５２」を代表点とする空間領域に含まれるため、空間索引検索部６１は、そのノードからのリンク先であるオブジェクトノード「Ｅ、Ｇ」を概略判定リスト８２に入れる。
【００８１】
図７Ａで今回の検索範囲（６、４）〜（７、５）に対して、検索された空間領域の範囲（６、４）〜（７、５）を除外すると、残りの検索範囲が無くなる。よって、検索符号値Ｍは更新せず、空間索引検索部６１は空間索引ツリー２４を対象とした検索を終了する。
【００８２】
以上の結果、オブジェクト「Ｂ、Ｃ、Ｅ、Ｇ」が、空間索引ツリー２４からリンクを辿ることにより検索され、図７Ａの太い破線の枠で囲んだ検索範囲（５、２）〜（７、５）に適合する検索結果として、出力装置９５に出力される。
【００８３】
なお、検索条件となる検索範囲の形状は、円、矩形、多角形など任意である。例えば、円を検索範囲とする場合、円の外接矩形を検索範囲として代替して、前記の方法でオブジェクトノードを辿った後、概略判定リスト８２への登録前に、円に含まれるか否かを座標値によって判定する方法などで実現できる。
【００８４】
副索引（文字列データ索引部３３）を利用した検索手順は、前記の空間データ索引部２３の手順と同等である。本実施例１では、検索条件に図７Ａの検索範囲が与えられ、かつ、文字列データに“ａｅｂ”と“ｕｐｃ”の両方を含むという検索条件が与えられた場合に、文字列データ索引部３３を利用した検索手順について図７Ａ〜図１０を参照して説明する。
【００８５】
まず、オブジェクト検索部５０は、前記図７Ｂの左側の破線矢印７５に沿って、オブジェクトノードＢまで辿る。文字列索引検索部７１は、このオブジェクトノードＢを概略判定リスト８２に登録する前に、オブジェクトノードＢのＲＯＷＩＤ値（２４０）を候補ＲＯＷＩＤとし、図８Ｂの文字列索引ツリー３４を辿って文字列データの検索条件に対する絞り込みを実施する。
【００８６】
文字列索引検索部７１は、検索条件の文字列の“ａｅｂ”と“ｕｐｃ”のそれぞれについて図８Ｂの文字列索引ツリー３４を辿る。まず、文字列索引検索部７１は、検索条件“ａｅｂ”について１文字ずつルートノード（ａ）、ルートノードの子ノード（ｅ）、リーフノード（ｂ）を辿り、オブジェクトノード（Ｅ、Ｇ）まで辿る。
【００８７】
ここで文字列データの検索条件が図８Ａで示すように、「“ａｅｂ”と“ｕｐｃ”の両方を含む文字列データ」というＡＮＤ論理演算であるため、文字列索引検索部７１は、まず、“ａｅｂ”が含まれるオブジェクトを指し示すオブジェクトノード（Ｅ、Ｇ）に候補ＲＯＷＩＤ（２４０）が含まれるか否かを判定する。
【００８８】
文字列索引検索部７１は、判定の結果、オブジェクトノード（Ｅ、Ｇ）に候補ＲＯＷＩＤ（２４０）は存在しないため、残りの検索条件「“ｕｐｃ”を含む」を判定することなく、この候補ＲＯＷＩＤは非該当として概略判定リスト８２に登録せず、非該当ＲＯＷＩＤ範囲リスト８１の設定（更新）を非該当ＲＯＷＩＤ範囲設定部５２へ依頼する。なお、非該当ＲＯＷＩＤ範囲リスト８１の更新は、文字列索引検索部７１が行うようにしてもよい。
【００８９】
図９は、非該当ＲＯＷＩＤ範囲設定部５２が行う、非該当ＲＯＷＩＤ範囲リスト８１への登録手順を図示したものである。
【００９０】
前記の候補ＲＯＷＩＤ（２４０）を文字列索引の検索条件によりオブジェクトノードを辿った際、候補ＲＯＷＩＤ（２４０）がオブジェクトノードに存在せず、オブジェクトノード内でＲＯＷＩＤ（２４０）よりも小さなＲＯＷＩＤが存在せず、かつ、次に存在するＲＯＷＩＤはＲＯＷＩＤ（２６０）である。
【００９１】
したがって、ＲＯＷＩＤ（０）〜ＲＯＷＩＤ（２５９）の範囲のＲＯＷＩＤは、文字列索引の検索条件に該当しないため、空間索引の検索結果に関わらず非該当のオブジェクトである。
【００９２】
非該当ＲＯＷＩＤ範囲設定部５２は、非該当ＲＯＷＩＤ範囲リスト８１に、「最小値０、最大値２６０」の非該当ＲＯＷＩＤ範囲エントリ８１１を追加する。本実施例１では、ＲＯＷＩＤを整数で扱うため、ＲＯＷＩＤ（２５９）より大なる値「２６０」を最大値として設定する。また、候補ＲＯＷＩＤ（２４０）は非該当と判断されたため概略判定リスト８２には登録されない。
【００９３】
次に、空間索引検索部６１は、図７Ｂの中央の破線矢印７６の順にて、オブジェクトノードＣまで辿り、候補ＲＯＷＩＤを（２４５）とする。空間索引検索部６１は、この候補ＲＯＷＩＤ（２４５）を概略判定リスト８２へ登録する前に、この候補ＲＯＷＩＤ（２４５）が図９の非該当ＲＯＷＩＤ範囲リスト８１の範囲に含まれるかをサーチする。
【００９４】
空間索引検索部６１は、非該当ＲＯＷＩＤ範囲リスト８１が管理する各エントリの非該当ＲＯＷＩＤの最小値のうち、候補ＲＯＷＩＤ（２４５）よりも小さく、値が最大である非該当ＲＯＷＩＤ範囲エントリを辿る。これにより、空間索引検索部６１は、候補ＲＯＷＩＤ値（２４５）が０以上かつ２６０未満の非該当ＲＯＷＩＤ範囲に含まれるため、非該当であることを判定できる。このため、候補ＲＯＷＩＤ値（２４５）は概略判定リスト８２には登録されない。
【００９５】
次に、空間索引検索部６１は、図７Ｂの右側の破線矢印７７の順にて、オブジェクトノードＥ、Ｇまで辿る。文字列索引検索部７１は、このオブジェクトノードＥを候補ＲＯＷＩＤ（２６０）とし、概略判定リスト８２へ登録する前に、候補ＲＯＷＩＤ値（２６０）が、図９の非該当ＲＯＷＩＤ範囲リスト８１の範囲に含まれるか否かをサーチする。
【００９６】
空間索引検索部６１は、非該当ＲＯＷＩＤ範囲リスト８１が管理する各エントリの非該当ＲＯＷＩＤの最小値のうち、候補ＲＯＷＩＤ（２６０）よりも小さく、値が最大である非該当ＲＯＷＩＤ範囲エントリを辿る。これにより、空間索引検索部６１は、候補ＲＯＷＩＤ値（２６０）が、２４０以上かつ２６０未満の非該当ＲＯＷＩＤ範囲に含まれないため、図８Ｂの文字列索引ツリー３４を辿って文字列の検索条件を評価する。
【００９７】
文字列索引検索部７１は、図８Ｂの前回の検索条件“ａｅｂ”の対象オブジェクトノード位置からオブジェクトＥのＲＯＷＩＤ（２６０）が存在することを判定する。次に、文字列索引検索部７１は、もう一方の検索条件“ｕｐｃ”について１文字ずつルートノード（ｕ）、ルートノードの子ノード（ｐ）、リーフノード（ｃ）を辿り、オブジェクトノード（Ｄ、Ｇ）まで辿る。
【００９８】
オブジェクトノード（Ｄ、Ｇ）には、候補ＲＯＷＩＤ（２６０）が含まれていないため、文字列索引検索部７１は、この候補ＲＯＷＩＤを非該当と判定して概略判定リスト８２に登録せず、非該当ＲＯＷＩＤ範囲の設定を非該当ＲＯＷＩＤ範囲設定部５２へ依頼する。
【００９９】
図１０は、図９の非該当ＲＯＷＩＤ範囲リスト８１に対して、非該当ＲＯＷＩＤ範囲設定部５２が、非該当ＲＯＷＩＤ範囲を更新する手順を図示したものである。
【０１００】
非該当ＲＯＷＩＤ範囲設定部５２は、候補ＲＯＷＩＤ（２６０）よりも小さな値（０）を最小値とする非該当ＲＯＷＩＤ範囲エントリを辿り、そのエントリが管理する範囲に候補ＲＯＷＩＤ（２６０）が含まれているため、この非該当ＲＯＷＩＤ範囲エントリを更新対象とする。
【０１０１】
非該当ＲＯＷＩＤ範囲設定部５２は、文字列索引で検索文字列に該当するオブジェクトノード上で候補ＲＯＷＩＤ（２６０）よりも１つ大きいＲＯＷＩＤ（２８０）は、この非該当ＲＯＷＩＤ範囲エントリの最大ＲＯＷＩＤ（２６０）よりも大きな値である。
【０１０２】
したがって、現時点で非該当ＲＯＷＩＤ範囲とされていない２６０〜２７９の範囲も非該当であることが判明していることから、非該当ＲＯＷＩＤ範囲設定部５２は、非該当ＲＯＷＩＤ範囲エントリの最大値を２６０から２８０に更新する。また、候補ＲＯＷＩＤ（２６０）は非該当と判定されたため概略判定リスト８２には登録されない。
【０１０３】
次に、図７Ｂの前回の検索条件（図中右側の破線矢印７７）で辿ったオブジェクトノードＧの候補ＲＯＷＩＤ（２８０）について、空間索引検索部６１は、非該当ＲＯＷＩＤ範囲に含まれるか否かを前述の手順で判定においてする。この判定の結果、候補ＲＯＷＩＤ（２８０）は非該当ＲＯＷＩＤ範囲に含まれないため、文字列索引検索部７１は、図８Ｂの文字列索引によって検索条件の評価を行う。
【０１０４】
文字列索引検索部７１は、図８Ｂで、検索条件“ａｅｂ”による前回のオブジェクトノードＧをサーチして、候補ＲＯＷＩＤ（２８０）が存在することが判定される。次に、検索条件“ｕｐｃ”による前回のオブジェクトノードＧをサーチして候補ＲＯＷＩＤ（２８０）が存在することが判定される。
【０１０５】
以上から文字列索引の検索条件「“ａｅｂ”と“ｕｐｃ”の両方を含む文字列」に対してオブジェクトノードＧのＲＯＷＩＤ（２８０）が該当すると判断される。このため、文字列索引検索部７１は、候補ＲＯＷＩＤ（２８０）を、概略判定リスト８２に登録し、検索結果を出力装置９５へ出力する。
【０１０６】
この後、文字列索引検索部７１は、図７Ｂにおいて、次のオブジェクトノードが存在しないため、検索を終了する。
【０１０７】
本実施例１における検索手法は前記の通りである。この手順における非該当ＲＯＷＩＤ範囲リスト８１の特性から、図１の空間データ索引部２３が管理する空間オブジェクトテーブル２５のＲＯＷＩＤ全体に対して、昇順にソートされたＲＯＷＩＤ部分が多いほど、非該当ＲＯＷＩＤ範囲のサーチ処理と判定処理の効率を向上させ、検索時間の短縮を図ることができる。
【０１０８】
このため、図１の空間データ索引部２３での検索順序に近い順序でオブジェクト識別子（ＲＯＷＩＤ）を割り当てることが考えられる。具体的な例として、図７Ｂの空間索引ツリー２４を例に説明する。
【０１０９】
図７Ａの空間索引ツリー２４では、空間索引検索部６１が前記の通り、モートン符号値の順に空間領域（空間オブジェクトテーブル２５）を探索する。したがって、各オブジェクトの座標値から得られるモートン符号値が昇順になる順序で各オブジェクトを配置し、この順序に応じたＲＯＷＩＤ値を割り当ててデータ管理装置１を構築することで、非該当ＲＯＷＩＤ範囲の判定の効率化が実現できる。
【０１１０】
図１１は、図１で示した空間索引検索部６１による、主索引（空間データ索引部２３）の検索処理の一例を示すフローチャートである。
【０１１１】
図１１におけるステップＳ１０１では、空間索引検索部６１が、主索引用の検索条件に該当する主索引（空間索引ツリー２４）の下位ノードを辿り、主索引の該当オブジェクトノードのうち未確認（未処理）のオブジェクトノードを１つ取り出す。
【０１１２】
次にステップＳ１０２にて、空間索引検索部６１は、上記取り出した１つの該当オブジェクトノードの中から、未確認（未処理）のオブジェクト識別子（ＲＯＷＩＤ）を１つ選択して、これを候補ＲＯＷＩＤとして扱う。
【０１１３】
ステップＳ１０３では、空間索引検索部６１が、非該当ＲＯＷＩＤ範囲リスト８１を参照し、候補ＲＯＷＩＤが非該当ＲＯＷＩＤ範囲に含まれるか否かを判定する。空間索引検索部６１は、候補ＲＯＷＩＤが非該当ＲＯＷＩＤ範囲に含まれる場合、候補ＲＯＷＩＤは文字列索引検索部７１の検索条件に該当しないオブジェクトであると判定できる。このため、この候補ＲＯＷＩＤに対する以降の判定（文字列索引検索部７１での検索処理）をスキップしてＳ１０７に進む。すなわち、副索引（文字列データ索引部３３）による検索を実施せずに、次のオブジェクトノードの評価に進む。
【０１１４】
一方、空間索引検索部６１は、候補ＲＯＷＩＤが非該当ＲＯＷＩＤ範囲に含まれなければ、ステップＳ１０４以降の処理を行う。
【０１１５】
ステップＳ１０４では、主索引（空間データ索引部２３）用の検索条件に合致したオブジェクトの候補ＲＯＷＩＤが、副索引（文字列データ索引部３３）用の検索条件に該当するか否かを判定する処理であり、文字列索引検索部７１が判定結果を「該当」又は「非該当」の２値で出力する。この処理の詳細は図１２Ａ、図１２Ｂのフローチャートで説明する。
【０１１６】
ステップＳ１０５では、空間索引検索部６１が、ステップＳ１０４での副索引による候補ＲＯＷＩＤの判定結果が該当（文字列の検索条件に一致）したか否かを判定する。候補ＲＯＷＩＤが副索引用の条件に該当した場合は、ステップＳ１０６に進んで、空間索引検索部６１が、この候補ＲＯＷＩＤを概略判定リスト８２に登録する。
【０１１７】
一方、候補ＲＯＷＩＤが副索引用の検索条件に該当しなかった場合、空間索引検索部６１が、候補ＲＯＷＩＤを概略判定リスト８２に登録せずに、ステップＳ１０７に進む。
【０１１８】
ステップＳ１０７では、空間索引検索部６１が、１つの候補ＲＯＷＩＤの判定が完了し、現在取り出しているオブジェクトノードに含まれる未確認（未処理）のＲＯＷＩＤが存在するか否かを判定する。当該オブジェクトノードに未確認のＲＯＷＩＤが存在する場合、空間索引検索部６１は、ステップＳ１０２に戻って次の未確認のＲＯＷＩＤを次の候補ＲＯＷＩＤとして上記処理を繰り返す。
【０１１９】
一方、現在取り出しているオブジェクトノードに未確認のＲＯＷＩＤがない場合、ステップＳ１０８にて、空間索引検索部６１が、主索引（空間データ索引部２３）用の検索条件に該当する未確認のオブジェクトノードが無いかを判定する。
【０１２０】
空間索引検索部６１は、未確認のオブジェクトノードがある場合、ステップＳ１０１に戻って未確認のオブジェクトノードからＲＯＷＩＤを１つ取り出してから上記処理を繰り返す。一方、当該オブジェクトノードに未確認のオブジェクトノードが無い場合、ステップＳ１０９に進む。
【０１２１】
ステップＳ１０９では、空間索引検索部６１が、概略判定リスト８２に登録された、検索条件に該当するＲＯＷＩＤ群を検索結果として出力装置９５へ出力する。なお、空間索引検索部６１は、検索結果としてＲＯＷＩＤで特定されるオブジェクトをオブジェクト詳細テーブル９０から取得して出力装置９５に表示する。
【０１２２】
上記処理によって、データ管理装置１では、空間索引検索部６１が位置情報（空間データ）に関する検索条件を満たす候補ＲＯＷＩＤについて、非該当ＲＯＷＩＤ範囲リスト８１に当該ＲＯＷＩＤが存在する場合には、副索引部（文字列データ索引部３３）での検索をスキップすることで、検索処理の高速化を図ることができる。これにより、利用可能な計算機資源が少ない環境においても、高速な検索処理を実現することが可能となる。
【０１２３】
図１２Ａ、図１２Ｂは、図１で示した文字列索引検索部７１による、副索引（文字列データ索引部３３）の検索処理を示すフローチャートである。このフローチャートは図１１におけるステップＳ１０４に相当し、対象となる副索引（文字列データ索引部３３）用の検索条件に該当するオブジェクトノードの中に候補ＲＯＷＩＤが存在するか否かを判定し、候補ＲＯＷＩＤが存在する場合は「該当」を、候補ＲＯＷＩＤが存在しない場合は「非該当」を出力する処理である。
【０１２４】
図１２ＡにおけるステップＳ２０１では、文字列索引検索部７１が副索引（文字列データ索引部３３）用の検索条件に該当するオブジェクトノードを辿り、副索引用の検索条件に該当するオブジェクトノード群を取り出し、ステップＳ２０２にてオブジェクトノード群が管理する全てのＲＯＷＩＤの値を昇順にソートする。
【０１２５】
なお、検索条件に該当するＲＯＷＩＤがソート済みである場合は、このソート処理をスキップすることができる。例えば、検索条件に該当するオブジェクトノードが１つだけであり、１つのオブジェクトノードが管理する全てのＲＯＷＩＤがソートされている構造である場合は、ＲＯＷＩＤがソート済みであるため、文字列索引検索部７１はソート処理をスキップすることができる。
【０１２６】
ステップＳ２０３では、文字列索引検索部７１が上記ステップＳ２０２でソートされたＲＯＷＩＤのうち未確認（未処理）のＲＯＷＩＤを昇順で１つ取り出して比較対象ＲＯＷＩＤとする。
【０１２７】
ステップＳ２０４では、文字列索引検索部７１が比較対象ＲＯＷＩＤの値と候補ＲＯＷＩＤの値とを比較し、比較対象ＲＯＷＩＤの値が候補ＲＯＷＩＤの値以下であるか否かを判定する。比較対象ＲＯＷＩＤの値が候補ＲＯＷＩＤの値以下であればステップＳ２０５へ進み、そうでない場合にはステップＳ２０９へ進む。
【０１２８】
文字列索引検索部７１は、昇順にソートされた比較対象ＲＯＷＩＤの値が、候補ＲＯＷＩＤの値より大きい場合、この副索引用の検索条件に対して候補ＲＯＷＩＤが存在しないことを判定できる。
【０１２９】
そのため、文字列索引検索部７１は、ステップＳ２０９において比較対象ＲＯＷＩＤで非該当ＲＯＷＩＤ範囲リスト８１の更新を行う。文字列索引検索部７１は、図９で示したように、文字列索引検索部７１における検索条件に合致しない候補ＲＯＷＩＤの範囲を設定する。次に、文字列索引検索部７１は、ステップＳ２１０で候補ＲＯＷＩＤを非該当と応答して処理を終了する。
【０１３０】
一方、ステップＳ２０４で比較対象ＲＯＷＩＤの値が候補ＲＯＷＩＤの値以下であれば、ステップＳ２０５にて、文字列索引検索部７１は、比較対象ＲＯＷＩＤと比較対象ＲＯＷＩＤの値が一致するか否かを判定する。
【０１３１】
文字列索引検索部７１は、両方の値が一致していれば、この副索引（文字列データ索引部３３）用の検索条件に候補ＲＯＷＩＤが該当すると判定し、ステップＳ２０６に進む。
【０１３２】
また、ステップＳ２０５にて、両方の値が一致しなかった場合、比較対象ＲＯＷＩＤの値が候補ＲＯＷＩＤの値よりも小さいことが判定される。この場合、より大きな比較対象ＲＯＷＩＤが存在する可能性があるため、図１２ＢのステップＳ２１１で、文字列索引検索部７１が、現在の比較対象ＲＯＷＩＤの値を元に、非該当ＲＯＷＩＤ範囲リスト８１を更新する。
【０１３３】
そして、ステップＳ２１２にて、文字列索引検索部７１は、副索引用の検索条件に該当するＲＯＷＩＤのリストに未確認（未処理）のＲＯＷＩＤが残っている間は上記ステップＳ２０３からの処理を繰り返す。
【０１３４】
ステップＳ２１２にてＲＯＷＩＤのリストに未確認のＲＯＷＩＤが無くなった場合、文字列索引検索部７１は、ステップＳ２１３で候補ＲＯＷＩＤを非該当として結果を出力して処理を終了する。
【０１３５】
ステップＳ２０６では現在サーチを行っている副索引（文字列データ索引部３３）の検索条件の他に、未判定である他の副索引の検索条件があるか否かを判定する。例えば、主索引（空間データ索引部２３）の検索条件を図１１で実施し、副索引（文字列データ索引部３３）の検索条件を図１２ＡのＳ２０５まで完了した後、さらなる副索引（文字列データ索引部３３）の検索条件が存在する場合などである。
【０１３６】
このような未判定である他の副索引の検索条件が存在しない場合、文字列索引検索部７１は、候補ＲＯＷＩＤが全ての検索条件に該当することが判明しているため、ステップＳ２０８に進んで候補ＲＯＷＩＤを検索条件に該当として結果を出力して処理を終了する。
【０１３７】
一方、ステップＳ２０６で未判定である他の副索引の検索条件が存在する場合、文字列索引検索部７１は、図１２Ａ、図１２Ｂのフローチャート（Ｓ１０４）を再帰的に実行して、候補ＲＯＷＩＤが他の副索引の検索条件に該当するかを判定する。
【０１３８】
文字列索引検索部７１は、未判定である他の副索引の検索条件の全てに対して繰り返してステップＳ１０４の処理を再帰的に実行し、それぞれのステップＳ１０４の呼出し元のステップＳ２０７において、ステップＳ１０４の結果を判定する。
【０１３９】
文字列索引検索部７１は、ステップＳ１０４が出力する結果が「該当」であれば、ステップＳ２０８にて候補ＲＯＷＩＤを検索条件に「該当」として結果を出力して処理を終了する。一方、ステップＳ１０４が出力する結果が検索条件に該当しなければ、文字列索引検索部７１は、ステップＳ２１０にて候補ＲＯＷＩＤを「非該当」として結果を出力して処理を終了する。
【０１４０】
以上のように、本実施例１では、データ管理装置１は、主索引部（空間データ索引部２３）を利用して第１の検索条件（位置情報）に該当するかオブジェクトの有無を判定する主索引検索部（空間索引検索部６１）と、副索引部（文字列データ索引部３３）を利用して第２の検索条件に該当するオブジェクトの有無を判定する副索引検索部（文字列索引検索部７１）と、を有する。主索引検索部（空間索引検索部６１）は、主索引部（空間データ索引部２３）で第１の検索条件に該当するオブジェクト識別子（ＲＯＷＩＤ）からＲＯＷＩＤの候補（候補ＲＯＷＩＤ）を１件取り出して、非該当ＲＯＷＩＤ範囲リスト８１のＲＯＷＩＤ範囲に含まれるか否かを判定する。
【０１４１】
主索引検索部（空間索引検索部６１）は、候補ＲＯＷＩＤが非該当ＲＯＷＩＤ範囲リスト８１のＲＯＷＩＤ範囲に含まれる場合には、候補ＲＯＷＩＤが非該当であると判定できるので、副索引部（文字列データ索引部３３）による検索処理（文字列索引検索部７１）をスキップして、次の候補ＲＯＷＩＤの評価に進む。
【０１４２】
これにより、主索引検索部（空間索引検索部６１）では非該当ＲＯＷＩＤ範囲リスト８１により、副索引検索部で検索条件に該当しないことが判定できるので、副索引検索部の処理を禁止することで、検索処理の高速化を図ることができる。換言すれば、本実施例１のデータ管理装置１では、無駄な副索引検索部の処理を禁止することで、検索処理の負荷を削減することができ、計算機資源の少ない計算機でも、高速な検索処理を実現することが可能となる。
【０１４３】
また、副索引検索部（文字列索引検索部７１）では、文字列データ索引部３３で管理するＲＯＷＩＤの順序から、検索条件に該当しない比較対象ＲＯＷＩＤの最小値と最大値で非該当ＲＯＷＩＤ範囲リスト８１を更新する。
【０１４４】
これにより、現在の検索条件に合致しないＲＯＷＩＤの範囲を学習して、次の検索処理を高速に行うことが可能となる。
【０１４５】
また、主索引部（空間データ索引部２３）では、データ管理装置１で管理する全て又は一部のオブジェクトについて、主索引部の検索順序で参照するオブジェクトの順序を、それぞれのオブジェクトのＲＯＷＩＤの値の昇順又は降順となるようにＲＯＷＩＤ値を割り当てる。
【０１４６】
これにより、非該当ＲＯＷＩＤ範囲リスト８１の検索及び判定処理を高速化することができる。
【実施例２】
【０１４７】
図１３は、本発明の実施例２を示し、データ管理装置の一例を示すブロック図である。実施例２のデータ管理装置１は、前記実施例１の空間データ索引部２３を、データＡ主索引部２０に置き換え、文字列データ索引部３３を複数のデータＢ副索引部３０−１〜データＮ副索引部３０−ｍに置き換え、空間索引検索部６１をデータＡ索引検索部６０に置き換え、文字列索引検索部７１を複数のデータＢ索引検索部７０−１〜データＮ索引検索部７０−ｍに置き換えたものである。その他の構成は、前記実施例１と同様である。
【０１４８】
オブジェクトを検索するための条件に用いられる属性に応じて、オブジェクトの属性データを索引化して、それぞれの索引部が構成される。本実施例２では、索引部として、１つの主索引部（データＡ主索引部２０）と、複数の副索引部（データＢ副索引部３０−１〜データＮ副索引部３０−ｍ）が構成される例を示す。
【０１４９】
主索引部及び副索引部は、Ｂ−木インデックスやハッシュインデックスなどの汎用性の高いインデックスや、Ｒ−木を代表とする空間インデックスや、文字列の中間一致検索用の全文検索インデックスなど、後述の図１４で説明する特徴を含む全ての索引部が適用でき、副索引部の数も１つ以上の任意の数を適用できる。
【０１５０】
図１４は、データ管理装置１における主索引部（データＡ主索引部２０）、及び副索引部（データＢ副索引部３０−１〜データＮ副索引部３０−ｍ）の一例を示すブロック図である。
【０１５１】
主索引部（データＡ主索引部２０）は索引ツリー２１とオブジェクトテーブル２２で構成される。データＡ索引検索部６０は、指定された検索条件に応じて索引ツリー２１を辿り、索引ツリー２１にリンクされたオブジェクトテーブル２２のノードを特定する。
【０１５２】
オブジェクトテーブル２２は、オブジェクト詳細テーブル９０で管理される個々のオブジェクトを、前記実施例１と同様に、オブジェクト識別子（ＲＯＷＩＤ）によってリンクする。オブジェクトテーブル２２の各オブジェクトノードは、１つ又は複数のＲＯＷＩＤを管理する。
【０１５３】
一方、副索引部（データＢ副索引部３０−１〜データＮ副索引部３０−ｍ）もデータＡ主索引部２０と同じく、索引ツリー３１−１〜３１−ｍと、オブジェクトテーブル３２−１〜３２−ｍで構成され、データＡ主索引部２０と同様にオブジェクト詳細テーブル９０とのリンクを含む。
【０１５４】
ただし、副索引部のオブジェクトテーブル３２−１〜オブジェクトテーブル３２−ｍで管理される１つのオブジェクトノード（キー値）の中で、ＲＯＷＩＤは昇順又は降順にソートされており、主索引部では１つのオブジェクトノード（キー値）の中で、ＲＯＷＩＤの順序は任意に配置されている。
【０１５５】
主索引部（データＡ主索引部２０）は、例えば、空間（座標）データの索引が設定され、副索引部のデータＢ副索引部３０−１は、数値データの索引が設定され、データＮ副索引部３０−ｍには、タイムスタンプの索引が設定される。本実施例２では、前記実施例１の空間データと文字列データの索引に加えて、数値データやタイムスタンプ等の索引を有することで、複数の種類の検索条件の論理積によるオブジェクトの検索処理を実現することが可能となる。
【０１５６】
そして、副索引検索部（データＢ索引検索部７０−１〜７０−Ｎ）では、複数の検索条件が存在する場合には、比較対象ＲＯＷＩＤと候補ＲＯＷＩＤの判定処理を再帰的（図１２ＡのステップＳ１０４）に実行することで、候補ＲＯＷＩＤが他の副索引部の検索条件に該当するか否かを判定することができる。
【０１５７】
なお、上記実施例１、２では、オブジェクト詳細テーブル９０がデータ管理装置１内の二次記憶装置９３に格納される例を示したが、オブジェクト詳細テーブル９０はデータ管理装置１の外部に接続されてもよいし、他の計算機に格納されてもよい。
【０１５８】
＜まとめ＞
以上のように、上記実施例１、２のデータ管理装置１は、以下の構成とすることができる。
【０１５９】
（１）プロセッサ（中央処理装置９１）とメモリ（主記憶装置９２）を有し、属性の異なる第１の検索条件（空間データの検索条件）と第２の検索条件（文字列データの検索条件）を受け付けて、前記第１の検索条件及び第２の検索条件を満たすオブジェクトを検索するデータ管理装置（１）であって、前記第１の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第１の索引（空間索引ツリー２４）と、前記第１の索引（２４）のオブジェクトノードに対応するオブジェクト識別子（ＲＯＷＩＤ）を管理する第１のオブジェクト管理情報（空間オブジェクトテーブル２５）と、前記第２の検索条件に対応する属性で、ルートノードからオブジェクトノードまでをリンクする第２の索引（文字列索引ツリー３４）と、前記第２の索引（３４）のオブジェクトノードに対応するオブジェクト識別子（ＲＯＷＩＤ）を管理する第２のオブジェクト管理情報（文字列オブジェクトテーブル３５）と、前記第１の検索条件で前記第１の索引（２４）を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第１のオブジェクト管理情報（２５）を探索して前記オブジェクト識別子（ＲＯＷＩＤ）を取得する主索引検索部（空間索引検索部６１）と、前記第２の検索条件で前記第２の索引（３４）を探索してオブジェクトノードを取得し、当該オブジェクトノードで前記第２のオブジェクト管理情報（３５）を探索して前記オブジェクト識別子（ＲＯＷＩＤ）を取得する副索引検索部（文字列索引検索部７１）と、を有する。
【０１６０】
上記構成により、主索引検索部（空間索引検索部６１）が位置情報（空間データ）に関する検索条件（第１の検索条件）を満たす候補ＲＯＷＩＤについて、副索引部（文字列データ索引部３３）で文字列情報（文字列データ）に関する検索条件（第２の検索条件）を満たすＲＯＷＩＤを抽出できる。これにより、主索引検索部と副索引検索部では、属性の異なるデータの検索をそれぞれ実施することで、複数の属性を含む検索を高速に実行することができる。
【０１６１】
なお、上記実施例１、２では、主索引検索部（６１）で空間データの検索を実施し、副索引検索部（７１）で文字列データの検索を実施する例を示したが、これに限定されるものではない。例えば、データの属性としては、空間データ（位置情報）、文字列の他に、数値データや時刻情報（タイムスタンプ）を用いることができる。
【０１６２】
また、（２）上記（１）に記載のデータ管理装置（１）であって、前記オブジェクト識別子（ＲＯＷＩＤ）に対応するオブジェクトを格納するオブジェクト詳細情報（オブジェクト詳細テーブル９０）をさらに有し、前記主索引検索部（６１）は、前記第１の検索条件を満足する前記オブジェクト識別子を取得した場合に、前記副索引検索部（７１）で前記第２の検索条件を満足し、かつ前記第１の検索条件を満足するオブジェクト識別子（ＲＯＷＩＤ）を検索し、当該オブジェクト識別子に対応するオブジェクトを前記オブジェクト詳細情報（９０）から取得して、当該オブジェクトを検索結果として出力する。
【０１６３】
上記構成により、主索引検索部（６１）の検索結果と、副索引検索部（７１）の検索結果の論理積となるオブジェクト識別子に対応するオブジェクト詳細テーブル９０から取得して検索結果として出力することができる。
【０１６４】
上記実施例１、２では、副索引検索部（７１）が１つの例を示したが、これに限定されるものではない。例えば、複数の副索引検索部を有し、各副索引検索部では、数値データや時刻情報（タイムスタンプ）のデータをそれぞれ検索し、各検索結果の論理積を検索結果として出力することができる。
【０１６５】
また、（３）上記（１）に記載のデータ管理装置（１）であって、前記主索引検索部（６１）は、前記第１の検索条件を満足する前記オブジェクト識別子（ＲＯＷＩＤ）を候補オブジェクト識別子（候補ＲＯＷＩＤ）として前記副索引検索部（７１）へ出力し、前記副索引検索部（７１）は、前記第２の検索条件を満足する前記オブジェクト識別子を比較対象オブジェクト識別子（比較対象ＲＯＷＩＤ）として取得し、前記候補オブジェクト識別子が前記比較対象オブジェクト識別子と一致するか否かを判定し、前記主索引検索部（６１）は、前記副索引検索部（７１）で、比較対象オブジェクト識別子と一致する候補オブジェクト識別子を検索結果として出力する。
【０１６６】
上記構成により、主索引検索部（６１）の検索結果を候補ＲＯＷＩＤとして副索引検索部（７１）へ入力し、副索引検索部（７１）は第２の検索条件（文字列データ）の検索結果を比較対象ＲＯＷＩＤとして取得し、入力された候補ＲＯＷＩＤが比較対象ＲＯＷＩＤと一致すれば、複数の検索条件を満たすと判定することができる。これにより、属性の異なる複数の検索条件の論理積で検索を実施することができる。
【０１６７】
（４）上記（３）に記載のデータ管理装置（１）であって、前記副索引検索部（７１）は、当該副索引検索部（７１）の検索条件に合致しない候補オブジェクト識別子（候補ＲＯＷＩＤ）の値を格納する非該当オブジェクト識別子範囲情報（非該当ＲＯＷＩＤ範囲リスト８１）を管理し、前記候補オブジェクト識別子が前記比較対象オブジェクト識別子と一致しない場合には、当該候補オブジェクト識別子の値を含む範囲を前記非該当オブジェクト識別子範囲情報（８１）に設定する。
【０１６８】
副索引検索部（７１）では、候補ＲＯＷＩＤ毎に比較対象ＲＯＷＩＤと一致するか否かを判定する度に、比較対象ＲＯＷＩＤと一致しない候補ＲＯＷＩＤの値の範囲を非該当ＲＯＷＩＤ範囲リスト８１へ格納することができる。
【０１６９】
また、（５）上記（４）に記載のデータ管理装置であって、前記主索引検索部（６１）は、前記候補オブジェクト識別子の値が前記非該当オブジェクト識別子範囲情報（８１）に含まれるか否かを判定し、前記候補オブジェクト識別子の値が前記非該当オブジェクト識別子範囲情報（８１）に含まれる場合には、前記副索引検索部（７１）の処理を省略して前記候補オブジェクト識別子を第２の検索条件に一致しないと判定する。
【０１７０】
上記構成により、主索引検索部（空間索引検索部６１）では非該当ＲＯＷＩＤ範囲リスト８１により、候補ＲＯＷＩＤが副索引検索部（文字列索引検索部７１）での検索条件に該当しないことが判定できるので、副索引検索部の処理を省略（禁止）することで、検索処理の高速化を図ることができる。無駄な副索引検索部の処理を禁止することで、検索処理の負荷を削減することができ、計算機資源の少ない計算機でも、高速な検索処理を実現することが可能となる。
【０１７１】
また、（６）上記（１）に記載のデータ管理装置（１）であって、前記第２のオブジェクト管理情報（３５）は、前記オブジェクトノードが対応するオブジェクト識別子（ＲＯＷＩＤ）の値の昇順又は降順でソートされる。
【０１７２】
上記構成により、非該当ＲＯＷＩＤ範囲リスト８１の検索及び判定処理を高速化することができる。
【０１７３】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【０１７４】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、又は、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０１７５】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０１７６】
１  データ管理装置
２０  データＡ主索引部
２１  索引ツリー
２２  オブジェクトテーブル
２３  空間データ索引部
２４  空間索引ツリー
２５  空間オブジェクトテーブル
３０  データＢ副索引部
３１  索引ツリー
３２  オブジェクトテーブル
３３  文字列データ索引部
３４  文字列索引ツリー
３５  文字列オブジェクトテーブル
４０  データＮ副索引部
４１  索引ツリー
４２  オブジェクトテーブル
５０  オブジェクト検索部
５１  データＮ索引検索部
６１  空間索引検索部
６２  検索起点設定部
６３  空間条件判定部
７１  文字列索引検索部
７２  検索初期設定部
７３  文字条件判定部
８１  非該当ＲＯＷＩＤ範囲リスト
８２  概略判定リスト
９０  オブジェクト詳細テーブル
９１  中央処理装置
９２  主記憶装置
９３  二次記憶装置
９４  入力装置
９５  出力装置
【図１】
2020135530.tif 000003
【図２】
2020135530.tif 000004
【図３Ａ】
2020135530.tif 000005
【図３Ｂ】
2020135530.tif 000006
【図４Ａ】
2020135530.tif 000007
【図４Ｂ】
2020135530.tif 000008
【図５】
2020135530.tif 000009
【図６】
2020135530.tif 000010
【図７Ａ】
2020135530.tif 000011
【図７Ｂ】
2020135530.tif 000012
【図８Ａ】
2020135530.tif 000013
【図８Ｂ】
2020135530.tif 000014
【図９】
2020135530.tif 000015
【図１０】
2020135530.tif 000016
【図１１】
2020135530.tif 000017
【図１２Ａ】
2020135530.tif 000018
【図１２Ｂ】
2020135530.tif 000019
【図１３】
2020135530.tif 000020
【図１４】
2020135530.tif 000021