(57)【特許請求の範囲】
【請求項１】
１以上の属性値を有する１以上のレコードを含む２以上の各データソースを定義する情報であり、データソースの識別子であるソース識別子と、データソースの属性識別子であるソース属性識別子を含む１以上のソース属性定義情報とを有する情報であるソース層定義情報と、
検索条件に基づく検索の対象のテーブルであり、１以上の属性値を有する１以上のレコードを含むテーブルであるユーザテーブルを定義する情報であり、当該ユーザテーブルを識別するユーザテーブル識別子と、ユーザテーブルの属性識別子であるユーザ属性識別子を含む１以上のユーザ属性定義情報とを有する情報であるユーザ層定義情報と、
前記検索条件に基づいて、前記２以上の各データソースに対して発行する検索命令を生成し、当該検索命令に対応する検索結果を取得し、当該２以上の検索結果を用いて、前記検索条件に対応する統合データを作成するための情報である変換ルール定義情報と、を有するデータ辞書を参照して、情報を検索する検索装置であり、
前記ユーザテーブルに対する検索条件を受け付ける条件受付部と、
前記データ辞書を参照して、前記検索条件に対応する２以上のデータソースを決定し、前記変換ルール定義情報を用いて、前記２以上の各データソースごとに、検索命令を生成し、当該検索命令に基づいた検索結果を取得し、前記変換ルール定義情報と前記ユーザ層定義情報とを用いて、前記２以上の各データソースに対応する検索結果を統合し、前記検索条件に対応する統合データを取得する検索部と、
前記検索部が取得した前記統合データを出力する結果出力部とを具備する検索装置。
【請求項２】
前記変換ルール定義情報は、
前記２以上のデータソースのうちの１以上のデータソースを用いて構成される変換ビューを定義する１以上の変換ビュー情報を有し、
前記変換ビュー情報は、
１以上のビュー属性値を有する１以上のレコードを含み得る変換ビューを定義する情報であり、ビュー属性値に対応するビュー属性識別子と、ビュー属性値の取得方法を特定するビュー属性値元情報とを有する１以上のビュー属性定義情報を有し、
前記ユーザ属性定義情報は、
前記１以上の変換ビューの１以上のビュー属性値を用いたユーザ属性値の取得方法を特定するユーザ属性値元情報を有し、
前記検索部は、
前記検索条件に含まれる１以上のユーザ属性識別子を取得し、前記１以上の各ユーザ属性識別子に対応するユーザ属性値元情報を取得し、当該ユーザ属性値元情報に対応する１以上のビュー属性識別子を取得し、当該１以上の各ビュー属性識別子に対応するソース識別子を前記ビュー属性定義情報から取得するソース決定手段と、
前記検索条件と前記ビュー属性値元情報とを用いて、前記ソース決定手段が取得した２以上の各ソース識別子で識別されるデータソースごとに検索命令を生成する命令生成手段と、
前記２以上の各データソースごとに、前記検索命令に基づいた検索結果を取得するソース検索手段と、
前記検索条件と前記ユーザ層定義情報とを用いて、前記ソース検索手段が取得した前記２以上の各データソースごとの検索結果を統合した統合データを取得する統合手段とを具備する、請求項１記載の検索装置。
【請求項３】
前記１以上のビュー属性値元情報のうちのいずれかのビュー属性値元情報は、
２以上のいずれかのデータソースのソース属性識別子または１以上のいずれかの変換ビューのビュー属性識別子のうちの１以上の属性識別子と、当該１以上の属性識別子に対応する属性値をパラメータとする演算式またはプログラム識別子とを有し、
前記検索部は、
前記ビュー属性値元情報に対応するビュー属性値を取得する場合に、前記ビュー属性値元情報が有する１以上の各属性識別子に対応する属性値をデータソースまたは変換ビューから取得し、当該取得した１以上の属性値を前記演算式または前記プログラム識別子で識別されるプログラムに与えて、当該演算式または当該プログラムを実行し、前記ビュー属性値を取得する、請求項２記載の検索装置。
【請求項４】
前記変換ルール定義情報は、
２以上の変換ビュー情報を有し、かつ当該２以上の変換ビュー情報に基づいて取得された２以上の検索結果を結合する方式を特定する結合方式識別子を有し、
前記統合手段は、
前記結合方式識別子により特定される結合方式に従って、前記２以上の検索結果を結合し、統合データを取得する請求項２または請求項３記載の検索装置。
【請求項５】
前記変換ルール定義情報は、
「ＵＮＩＯＮ」「ＣＨＯＩＣＥ」「ＬＯＯＫＵＰ」の３以上の結合方式識別子のうちの２以上の結合方式識別子の中の一の結合方式識別子を有し、
前記「ＵＮＩＯＮ」は、前記２以上の検索結果に対して、キー項目でグループ化し、非キー項目の２以上の属性値を集約することにより、一のレコードを構成する併合処理により前記２以上の検索結果を結合することを示す情報であり、
前記「ＣＨＯＩＣＥ」は、優先順位に従い、前記２以上の検索結果の中から１以上の検索結果に含まれるキー項目の属性値を選択し、かつ非キー項目の２以上の属性値を集約して、一のレコードを構成する選択処理により前記２以上の検索結果を結合することを示す情報であり、
前記「ＬＯＯＫＵＰ」は、参照条件に従い、前記２以上の検索結果のうちの一の検索結果のキー項目の属性値に、当該一の検索結果とは異なる他の検索結果に含まれるキー項目の属性値であり、前記一の検索結果に含まれないキー項目の属性値を付加し、かつ非キー項目の２以上の属性値を集約して、一のレコードを構成する補完処理により前記２以上の検索結果を結合することを示す情報である、請求項４記載の検索装置。
【請求項６】
前記１以上のユーザ属性値元情報のうちのいずれかのユーザ属性値元情報は、
１以上のいずれかの変換ビューのビュー属性識別子または２以上のいずれかのデータソースのソース属性識別子のうちの１以上の属性識別子と、当該１以上の属性識別子に対応する属性値をパラメータとする演算式またはプログラム識別子とを有し、
前記検索部は、
前記ユーザ属性値元情報に対応するユーザ属性値を取得する場合に、前記ユーザ属性値元情報が有する１以上の各属性識別子に対応する属性値を変換ビューまたはデータソースから取得し、当該取得した１以上の属性値を前記演算式または前記プログラム識別子で識別されるプログラムに与えて、当該演算式または当該プログラムを実行し、前記ユーザ属性値を取得する、請求項２から請求項５いずれか一項に記載の検索装置。
【請求項７】
前記ソース層定義情報は、
データソースに対する検索命令を生成するための命令元情報を有し、
前記２以上の各データソースに対応する命令元情報には、少なくとも２種類以上の異なる命令元情報が存在し、
前記検索部は、
前記２以上の各データソースに対する命令元情報に従って、前記２以上の各データソースから情報を取得するための検索命令を生成し、当該検索命令に基づいた検索結果を取得し、当該２以上の検索結果を統合し、前記統合データを取得する、請求項１から請求項６いずれか一項に記載の検索装置。
【請求項８】
前記２種類以上の異なる命令元情報は、ＳＱＬ文の検索命令を生成するための情報、および検索モジュールを生成するための情報を含み、
前記検索部は、
前記２以上の各データソースに対する命令元情報に従って、ＳＱＬ文に対応するデータソースに対しては、前記命令元情報に従ったＳＱＬ文である検索命令を生成し、検索モジュールに対応するデータソースに対しては、前記命令元情報に従った検索モジュールのインターフェイスである検索命令を生成し、前記２以上の各データソースごとに、検索命令に基づいた検索結果を取得し、当該２以上の検索結果を統合し、前記統合データを取得する、請求項７記載の検索装置。
【請求項９】
前記ソース層定義情報は、
前記２以上の各データソースにアクセスするための接続情報を有し、
前記検索部は、
前記接続情報を用いて、当該接続情報に対応するデータソースにアクセスし、前記検索命令に基づいた検索結果を当該データソースから取得し、当該２以上の検索結果を統合し、前記統合データを取得する、請求項１から請求項８いずれか一項に記載の検索装置。
【請求項１０】
前記２以上のデータソースのうち、少なくとも１以上のデータソースに対して、データソースが有する２以上のレコードのうちの１以上の各レコードごと、および各レコードの１以上の各属性ごとに、属性値が存在する位置を特定する属性位置情報を有する配列インデックスが格納されており、
前記検索部は、
前記検索条件が有する属性識別子に対応する属性位置情報を、前記配列インデックスから取得し、当該属性位置情報を用いて、前記検索条件が有する前記属性識別子に対応する属性値を前記データソースから取得し、当該属性値を有する統合データを構成する、請求項１から請求項９いずれか一項に記載の検索装置。
【請求項１１】
１以上の属性値を有する１以上のレコードを含む２以上の各データソースを定義する情報であり、データソースの識別子であるソース識別子と、データソースの属性識別子であるソース属性識別子を含む１以上のソース属性定義情報とを有する情報であるソース層定義情報と、検索条件に基づく検索の対象のテーブルであり、１以上の属性値を有する１以上のレコードを含むテーブルであるユーザテーブルを定義する情報であり、当該ユーザテーブルを識別するユーザテーブル識別子と、ユーザテーブルの属性識別子であるユーザ属性識別子を含む１以上のユーザ属性定義情報とを有する情報であるユーザ層定義情報と、前記検索条件に基づいて、前記２以上の各データソースに対して発行する検索命令を生成し、当該検索命令に対応する検索結果を取得し、当該２以上の検索結果を用いて、前記検索条件に対応する統合データを作成するための情報である変換ルール定義情報と、を有するデータ辞書と、条件受付部と、検索部と、結果出力部とにより実現される検索方法であって、
前記条件受付部が、前記ユーザテーブルに対する検索条件を受け付ける条件受付ステップと、
前記検索部が、前記データ辞書を参照して、前記検索条件に対応する２以上のデータソースを決定し、前記変換ルール定義情報を用いて、前記２以上の各データソースごとに、検索命令を生成し、当該検索命令に基づいた検索結果を取得し、前記変換ルール定義情報と前記ユーザ層定義情報とを用いて、前記２以上の各データソースに対応する検索結果を統合し、前記検索条件に対応する統合データを取得する検索ステップと、
前記結果出力部が、前記検索ステップで取得された前記統合データを出力する結果出力ステップとを具備する検索方法。
【請求項１２】
１以上の属性値を有する１以上のレコードを含む２以上の各データソースを定義する情報であり、データソースの識別子であるソース識別子と、データソースの属性識別子であるソース属性識別子を含む１以上のソース属性定義情報とを有する情報であるソース層定義情報と、検索条件に基づく検索の対象のテーブルであり、１以上の属性値を有する１以上のレコードを含むテーブルであるユーザテーブルを定義する情報であり、当該ユーザテーブルを識別するユーザテーブル識別子と、ユーザテーブルの属性識別子であるユーザ属性識別子を含む１以上のユーザ属性定義情報とを有する情報であるユーザ層定義情報と、前記検索条件に基づいて、前記２以上の各データソースに対して発行する検索命令を生成し、当該検索命令に対応する検索結果を取得し、当該２以上の検索結果を用いて、前記検索条件に対応する統合データを作成するための情報である変換ルール定義情報と、を有するデータ辞書と２以上のデータソースとにアクセス可能なコンピュータを、
前記ユーザテーブルに対する検索条件を受け付ける条件受付部と、
前記データ辞書を参照して、前記検索条件に対応する２以上のデータソースを決定し、前記変換ルール定義情報を用いて、前記２以上の各データソースごとに、検索命令を生成し、当該検索命令に基づいた検索結果を取得し、前記変換ルール定義情報と前記ユーザ層定義情報とを用いて、前記２以上の各データソースに対応する検索結果を統合し、前記検索条件に対応する統合データを取得する検索部と、
前記検索部が取得した前記統合データを出力する結果出力部として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報を検索する検索装置等に関するものである。
【背景技術】
【０００２】
従来、少ない資源で高速に複数表の結合演算を実行するリレーショナルデータベースのＤＢＭＳにおける表結合処理方法の技術があった（特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０００−１７２７１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術においては、２以上のデータソースから情報を適切に検索し、当該検索結果を統合することが困難であった。
【課題を解決するための手段】
【０００５】
本第一の発明の検索装置は、１以上の属性値を有する１以上のレコードを含む２以上の各データソースを定義する情報であり、データソースの識別子であるソース識別子と、データソースの属性識別子であるソース属性識別子を含む１以上のソース属性定義情報とを有する情報であるソース層定義情報と、検索条件に基づく検索の対象のテーブルであり、１以上の属性値を有する１以上のレコードを含むテーブルであるユーザテーブルを定義する情報であり、ユーザテーブルを識別するユーザテーブル識別子と、ユーザテーブルの属性識別子であるユーザ属性識別子を含む１以上のユーザ属性定義情報とを有する情報であるユーザ層定義情報と、検索条件に基づいて、２以上の各データソースに対して発行する検索命令を生成し、検索命令に対応する検索結果を取得し、２以上の検索結果を用いて、検索条件に対応する統合データを作成するための情報である変換ルール定義情報と、を有するデータ辞書を参照して、情報を検索する検索装置であり、ユーザテーブルに対する検索条件を受け付ける条件受付部と、データ辞書を参照して、検索条件に対応する２以上のデータソースを決定し、変換ルール定義情報を用いて、２以上の各データソースごとに、検索命令を生成し、検索命令に基づいた検索結果を取得し、変換ルール定義情報とユーザ層定義情報とを用いて、２以上の各データソースに対応する検索結果を統合し、検索条件に対応する統合データを取得する検索部と、検索部が取得した統合データを出力する結果出力部とを具備する検索装置である。
【０００６】
かかる構成により、２以上のデータソースから情報を適切に検索し、当該検索結果を統合できる。
【０００７】
また、本第二の発明の検索装置は、第一の発明に対して、変換ルール定義情報は、２以上のデータソースのうちの１以上のデータソースを用いて構成される変換ビューを定義する１以上の変換ビュー情報を有し、変換ビュー情報は、１以上のビュー属性値を有する１以上のレコードを含み得る変換ビューを定義する情報であり、ビュー属性値に対応するビュー属性識別子と、ビュー属性値の取得方法を特定するビュー属性値元情報とを有する１以上のビュー属性定義情報を有し、ユーザ属性定義情報は、１以上の変換ビューの１以上のビュー属性値を用いたユーザ属性値の取得方法を特定するユーザ属性値元情報を有し、検索部は、検索条件に含まれる１以上のユーザ属性識別子を取得し、１以上の各ユーザ属性識別子に対応するユーザ属性値元情報を取得し、ユーザ属性値元情報に対応する１以上のビュー属性識別子を取得し、１以上の各ビュー属性識別子に対応するソース識別子をビュー属性定義情報から取得するソース決定手段と、検索条件とビュー属性値元情報とを用いて、ソース決定手段が取得した２以上の各ソース識別子で識別されるデータソースごとに検索命令を生成する命令生成手段と、２以上の各データソースごとに、検索命令に基づいた検索結果を取得するソース検索手段と、検索条件とユーザ層定義情報とを用いて、ソース検索手段が取得した２以上の各データソースごとの検索結果を統合した統合データを取得する統合手段とを具備する、検索装置である。
【０００８】
かかる構成により、２以上のデータソースから情報を適切に検索し、当該検索結果を統合できる。
【０００９】
また、本第三の発明の検索装置は、第二の発明に対して、１以上のビュー属性値元情報のうちのいずれかのビュー属性値元情報は、２以上のいずれかのデータソースのソース属性識別子または１以上のいずれかの変換ビューのビュー属性識別子のうちの１以上の属性識別子と、１以上の属性識別子に対応する属性値をパラメータとする演算式またはプログラム識別子とを有し、検索部は、ビュー属性値元情報に対応するビュー属性値を取得する場合に、ビュー属性値元情報が有する１以上の各属性識別子に対応する属性値をデータソースまたは変換ビューから取得し、当該取得した１以上の属性値を演算式またはプログラム識別子で識別されるプログラムに与えて、演算式またはプログラムを実行し、ビュー属性値を取得する、検索装置である。
【００１０】
かかる構成により、２以上のデータソースから情報を適切に検索し、当該検索結果を統合できる。
【００１１】
また、本第四の発明の検索装置は、第二または第三の発明に対して、変換ルール定義情報は、２以上の変換ビュー情報を有し、かつ２以上の変換ビュー情報に基づいて取得された２以上の検索結果を結合する方式を特定する結合方式識別子を有し、統合手段は、結合方式識別子により特定される結合方式に従って、２以上の検索結果を結合し、統合データを取得する検索装置である。
【００１２】
かかる構成により、２以上のデータソースから情報を適切に検索し、当該検索結果を適切に統合できる。
【００１３】
また、本第五の発明の検索装置は、第四の発明に対して、変換ルール定義情報は、「ＵＮＩＯＮ」「ＣＨＯＩＣＥ」「ＬＯＯＫＵＰ」の３以上の結合方式識別子のうちの２以上の結合方式識別子の中の一の結合方式識別子を有し、「ＵＮＩＯＮ」は、２以上の検索結果に対して、キー項目でグループ化し、非キー項目の２以上の属性値を集約することにより、一のレコードを構成する併合処理により２以上の検索結果を結合することを示す情報であり、「ＣＨＯＩＣＥ」は、優先順位に従い、２以上の検索結果の中から１以上の検索結果に含まれるキー項目の属性値を選択し、かつ非キー項目の２以上の属性値を集約して、一のレコードを構成する選択処理により２以上の検索結果を結合することを示す情報であり、「ＬＯＯＫＵＰ」は、参照条件に従い、２以上の検索結果のうちの一の検索結果のキー項目の属性値に、当該一の検索結果とは異なる他の検索結果に含まれるキー項目の属性値であり、一の検索結果に含まれないキー項目の属性値を付加し、かつ非キー項目の２以上の属性値を集約して、一のレコードを構成する補完処理により２以上の検索結果を結合することを示す情報である、検索装置である。
【００１４】
かかる構成により、２以上のデータソースから情報を適切に検索し、当該検索結果を適切に統合できる。
【００１５】
また、本第六の発明の検索装置は、第二から第五いずれか１つの発明に対して、１以上のユーザ属性値元情報のうちのいずれかのユーザ属性値元情報は、１以上のいずれかの変換ビューのビュー属性識別子または２以上のいずれかのデータソースのソース属性識別子のうちの１以上の属性識別子と、１以上の属性識別子に対応する属性値をパラメータとする演算式またはプログラム識別子とを有し、検索部は、ユーザ属性値元情報に対応するユーザ属性値を取得する場合に、ユーザ属性値元情報が有する１以上の各属性識別子に対応する属性値を変換ビューまたはデータソースから取得し、取得した１以上の属性値を演算式またはプログラム識別子で識別されるプログラムに与えて、演算式またはプログラムを実行し、ユーザ属性値を取得する、検索装置である。
【００１６】
かかる構成により、２以上のデータソースから情報を適切に検索し、当該検索結果を統合できる。
【００１７】
また、本第七の発明の検索装置は、第一から第六いずれか１つの発明に対して、ソース層定義情報は、データソースに対する検索命令を生成するための命令元情報を有し、２以上の各データソースに対応する命令元情報には、少なくとも２種類以上の異なる命令元情報が存在し、検索部は、２以上の各データソースに対する命令元情報に従って、２以上の各データソースから情報を取得するための検索命令を生成し、検索命令に基づいた検索結果を取得し、２以上の検索結果を統合し、統合データを取得する、検索装置である。
【００１８】
かかる構成により、２以上のデータソースから情報を適切に検索し、当該検索結果を統合できる。
【００１９】
また、本第八の発明の検索装置は、第七の発明に対して、２種類以上の異なる命令元情報は、ＳＱＬ文の検索命令を生成するための情報、および検索モジュールを生成するための情報を含み、検索部は、２以上の各データソースに対する命令元情報に従って、ＳＱＬ文に対応するデータソースに対しては、命令元情報に従ったＳＱＬ文である検索命令を生成し、検索モジュールに対応するデータソースに対しては、命令元情報に従った検索モジュールのインターフェイスである検索命令を生成し、２以上の各データソースごとに、検索命令に基づいた検索結果を取得し、２以上の検索結果を統合し、統合データを取得する、検索装置である。
【００２０】
かかる構成により、２以上のデータソースから情報を適切に検索し、当該検索結果を統合できる。
【００２１】
また、本第九の発明の検索装置は、第一から第八いずれか１つの発明に対して、ソース層定義情報は、２以上の各データソースにアクセスするための接続情報を有し、検索部は、接続情報を用いて、接続情報に対応するデータソースにアクセスし、検索命令に基づいた検索結果をデータソースから取得し、２以上の検索結果を統合し、統合データを取得する、検索装置である。
【００２２】
かかる構成により、２以上のデータソースから情報を適切に検索し、当該検索結果を統合できる。
【００２３】
また、本第十の発明の検索装置は、第一から第九いずれか１つの発明に対して、２以上のデータソースのうち、少なくとも１以上のデータソースに対して、データソースが有する２以上のレコードのうちの１以上の各レコードごと、および各レコードの１以上の各属性ごとに、属性値が存在する位置を特定する属性位置情報を有する配列インデックスが格納されており、検索部は、検索条件が有する属性識別子に対応する属性位置情報を、配列インデックスから取得し、属性位置情報を用いて、検索条件が有する属性識別子に対応する属性値をデータソースから取得し、属性値を有する統合データを構成する、検索装置である。
【００２４】
かかる構成により、情報検索を高速に行える。
【発明の効果】
【００２５】
本発明による検索装置によれば、２以上のデータソースから情報を適切に検索し、当該検索結果を統合できる。
【図面の簡単な説明】
【００２６】
【図１】実施の形態１における検索システムＡの概念図
【図２】同検索システムＡのブロック図
【図３】同検索システムＡを構成する検索装置１のブロック図
【図４】同検索装置１の動作例について説明するフローチャート
【図５】同インデックス生成処理の例について説明するフローチャート
【図６】同ソース・インデックス生成処理の例について説明するフローチャート
【図７】同配列ラベル・インデックス生成処理の例について説明するフローチャート
【図８】同配列インデックス生成処理の例について説明するフローチャート
【図９】同レコード・インデックス生成処理の例について説明するフローチャート
【図１０】同２次インデックス生成処理の例について説明するフローチャート
【図１１】同検索処理の例について説明するフローチャート
【図１２】同データソースの例を示す図
【図１３】同インデックスの生成処理例、検索処理例を説明する図
【図１４】同検索処理例を説明する図
【図１５】実施の形態２における検索システムＢの概念図
【図１６】同検索システムＢのブロック図
【図１７】同検索装置４のブロック図
【図１８】同検索装置４の動作例について説明するフローチャート
【図１９】同命令生成処理の例について説明するフローチャート
【図２０】同統合処理の例について説明するフローチャート
【図２１】同結合方式識別子処理の例について説明するフローチャート
【図２２】同結合方式識別子処理の例について説明するフローチャート
【図２３】同データソースの例を示す図
【図２４】同ソース層定義情報の例を示す図
【図２５】同ソース層定義情報の例を示す図
【図２６】同ソース層定義情報の例を示す図
【図２７】同データソース固有情報の例を示す図
【図２８】同販売ビューの変換ビュー情報を示す図
【図２９】同仕入ビューの変換ビュー情報を示す図
【図３０】同ユーザ層定義情報の例を示す図
【図３１】同検索装置４の動作例を説明する図
【図３２】上記実施の形態におけるコンピュータシステムの概観図
【図３３】同コンピュータシステムのブロック図
【発明を実施するための形態】
【００２７】
以下、検索装置等の実施形態について図面を参照して説明する。なお、実施の形態において同じ符号を付した構成要素は同様の動作を行うので、再度の説明を省略する場合がある。
【００２８】
（実施の形態１）
本実施の形態において、１種類以上のインデックスを用いて、データソースに対して情報検索を行う検索装置を具備する検索システムについて説明する。なお、１種類以上のインデックスは、例えば、後述する配列インデックス、後述する配列ラベル・インデックス、後述するレコード・インデックス、後述する２次インデックス、後述するソース・インデックスである。
【００２９】
また、本実施の形態において、データソースを用いて、当該データソースに対応する１種類以上のインデックスを生成する検索装置を具備する検索システムについて説明する。
【００３０】
さらに、本実施の形態において、インデックスを自動更新する検索装置を具備する検索システムについて説明する。
【００３１】
図１は、本実施の形態における検索システムＡの概念図である。検索システムＡは、例えば、検索装置１、１または２以上のデータソース管理装置２、１または２以上の端末装置３を備える。
【００３２】
検索装置１は、データソースから情報を検索する装置である。データソース管理装置２は、１または２以上のデータソースが格納されている装置である。端末装置３は、情報を検索するユーザが使用する端末である。
【００３３】
検索装置１、データソース管理装置２は、例えば、いわゆるサーバであり、例えば、クラウドサーバ、ＡＳＰサーバ等である。なお、検索装置１、データソース管理装置２の種類は問わない。また、検索装置１は、スタンドアロンの装置でも良い。かかる場合、検索システムＡは、データソース管理装置２や端末装置３を有さなくても良い。また、かかる場合、データソースは、検索装置１に格納されている。
【００３４】
さらに、検索装置１と１以上のデータソース管理装置２とは、インターネットやＬＡＮ等のネットワークにより、通信可能である。また、検索装置１と端末装置３とは、インターネットやＬＡＮ等のネットワークにより、通信可能である。
【００３５】
図２は、本実施の形態における検索システムＡのブロック図である。図３は、検索システムＡを構成する検索装置１のブロック図である。
【００３６】
検索装置１は、格納部１１、受付部１２、処理部１３、および出力部１４を備える。格納部１１は、データソース格納部１１１、インデックス格納部１１２を備える。インデックス格納部１１２は、配列インデックス格納部１１２１、配列ラベル・インデックス格納部１１２２、レコード・インデックス格納部１１２３、２次インデックス格納部１１２４、およびソース・インデックス格納部１１２５を備える。受付部１２は、条件受付部１２１を備える。処理部１３は、インデックス生成部１３１、検索部１３２、およびインデックス更新部１３３を備える。インデックス生成部１３１は、配列インデックス生成部１３１１、配列ラベル・インデックス生成部１３１２、レコード・インデックス生成部１３１３、２次インデックス生成部１３１４、およびソース・インデックス生成部１３１５を備える。出力部１４は、結果出力部１４１を備える。
【００３７】
データソース管理装置２は、データソース格納部１１１を備える。
【００３８】
端末装置３は、端末格納部３１、端末受付部３２、端末処理部３３、端末送信部３４、端末受信部３５、および端末出力部３６を備える。
【００３９】
検索装置１を構成する格納部１１には、各種の情報が格納される。各種の情報は、例えば、後述するデータソース、後述する１以上の種類のインデックスである。
【００４０】
データソース格納部１１１には、１または２以上のデータソースが格納される。なお、検索装置１は、データソース格納部１１１が存在しなくても良い。かかる場合、検索対象のデータソースは、データソース管理装置２に格納されている。
【００４１】
データソースは、検索対象のデータの集合である。データは、情報と言っても良い。データソースは、通常、一つのファイルである。ただし、データソースは、例えば、一つのデータベース、データベース内の一つの表などでも良い。データソースは、通常、１または２以上のレコードを有する。レコードは、例えば、行やタップル等と言っても良い。レコード間は、例えば、第一デリミタにより区切られているなど、その区切りは認識可能である。第一デリミタは、例えば、リターンコード、ＴＡＢコード、スペース等であるが、問わない。データソースは、検索対象以外のデータを有しても良い。検索対象以外のデータは、例えば、項目ラベル、属性識別子である。項目ラベルは、項目のラベルであるが、項目名でも良い。項目は、例えば、キー項目と明細項目とを有する。キー項目は、キー項目値に対する識別子である。また、１レコード内に、２以上のキー項目が存在しても良い。明細項目は、キー項目を含む項目である。なお、キー項目や明細項目も、属性識別子である、と考えても良い。つまり、キー項目値や明細項目値も、レコードを構成する属性値である、と考えても良い。属性識別子は、属性を識別する情報である。属性識別子は、例えば、属性名、属性のＩＤである。レコードは、通常、２以上の属性値を有する。レコードは、キー項目値や明細項目値も有しても良い。ただし、レコードは、一つの属性値でも良い。レコードにおける属性値の間は、例えば、第二デリミタにより区切られているなど、その区切りは認識可能である。第二デリミタは、例えば、カンマ「，」、コロン「：」、セミコロン「；」、スペース、ＴＡＢコード等であるが、問わない。データソースは、ソース識別子に対応付いている。ソース識別子は、データソースを識別する情報であり、例えば、ファイル名、ファイルのＩＤである。なお、キー項目値は、例えば、予め決められている。なお、予め決められていることは、通常、ユーザの指定により、インデックスの生成時には、決まっていることを意味する。
【００４２】
データソースの中の属性値は、通常、固定長ではなく、可変長である。また、データソースの中のレコードも、通常、固定長ではなく、可変長である。ただし、データソースの中の属性値やレコードは、固定長でも良い。
【００４３】
データソースは、１以上のソース属性値に対応付いていることは好適である。ソース属性値は、データソースの属性値である。ソース属性値は、例えば、最終更新時情報、更新者識別子、サイズ、種類識別子である。最終更新時情報は、データソースの最終更新時を特定する情報であり、例えば、年月日時分秒、月日時分である。更新者識別子は、データソースの更新者（通常、最終更新者）を識別する情報である。サイズは、データソースのデータサイズであり、例えば、バイト数、ビット数である。種類識別子は、データソースの種類を特定する情報であり、例えば、「ファイル」「ＲＤＢ」「表」である。「ファイル」はデータソースがファイルであることを示す。「ＲＤＢ」はデータソースがＲＤＢ（リレーショナルデータベース）であることを示す。「表」はデータソースが表形式の情報であることを示す。
【００４４】
インデックス格納部１１２には、１または２以上の種類のインデックスが格納される。インデックスとは、データソースから所望の情報を検索するために参照される情報（通常、索引）である。インデックスは、例えば、後述する配列インデックス、後述する配列ラベル・インデックス、後述するレコード・インデックス、後述する２次インデックス、後述するソース・インデックスである。
【００４５】
１種類以上の各インデックスは、例えば、ファイルである。ただし、インデックスは、ＲＤＢ等のデータベース内の情報でも良く、その物理的な構造は問わない。データベース内の情報は、例えば、表である。
【００４６】
なお、インデックスには、生成時情報が対応付いていることは好適である。生成時情報は、インデックスが生成された時を特定する情報であり、例えば、年月日時分秒、月日時分である。
【００４７】
配列インデックス格納部１１２１には、配列インデックスが格納される。配列インデックス格納部１１２１には、通常、データソースごとに、配列インデックスが格納される。つまり、配列インデックスは、通常、データソースを識別するソース識別子に対応付いている。なお、検索対象のデータソースが一つである場合、配列インデックスは、ソース識別子に対応付いている必要はない。
【００４８】
配列インデックスは、レコード内の属性値の位置を特定するための情報であるである。  配列インデックスは、データソースが有するレコードごとの情報である１以上の配列インデックスレコードを有する。配列インデックスレコードは、各レコードの各属性ごとの属性位置情報を有する。属性位置情報は、属性値が存在する位置を特定する情報である。属性位置情報は、通常、属性値のレコード内におけるオフセットである。ただし、属性位置情報は、データソース内におけるオフセット等でも良い。属性位置情報は、例えば、レコードを識別するレコード識別子、および属性識別子に対応付いている。
【００４９】
配列インデックスは、すべてのレコードに対応する一部の属性値の属性位置情報を有することは好適であるが、データソースが有するすべてのレコードに対応するすべての属性値の属性位置情報を有しても良いし、一部のレコードに対応するすべての属性値の属性位置情報を有しても良いし、一部のレコードに対応する一部の属性値の属性位置情報を有しても良い。
【００５０】
配列インデックスが、一部の属性値の属性位置情報のみを有する場合、データソースのレコード内の属性値の並びの順に、配列インデックスは属性位置情報を有する。
【００５１】
配列ラベル・インデックス格納部１１２２には、配列ラベル・インデックスが格納される。配列ラベル・インデックス格納部１１２２には、通常、データソースごとに、配列ラベル・インデックスが格納される。つまり、配列ラベル・インデックスは、通常、ソース識別子に対応付いている。なお、検索対象のデータソースが一つである場合、配列ラベル・インデックスは、ソース識別子に対応付いている必要はない。
【００５２】
配列ラベル・インデックスは、データソースのレコードにおける属性の順番を特定するための情報である。配列ラベル・インデックスは、データソースが有するレコードごとの情報である１以上の配列ラベル・インデックスレコードを有する。配列ラベル・インデックスレコードは、レコード内における属性の順番を示す情報である。配列ラベル・インデックスレコードは、例えば、属性識別子と属性順番情報との組である。２以上の各配列ラベル・インデックスレコードは、例えば、レコード内の順番に配置された属性識別子でも良い。配列ラベル・インデックスは、レコードにおけるすべての属性の順番を特定する情報であることは好適である。配列ラベル・インデックスにおいて、属性識別子はソートされていることは好適である。
【００５３】
レコード・インデックス格納部１１２３には、レコード・インデックスが格納される。レコード・インデックス格納部１１２３には、通常、データソースごとに、レコード・インデックスが格納される。つまり、レコード・インデックスは、通常、ソース識別子に対応付いている。なお、検索対象のデータソースが一つである場合、レコード・インデックスは、ソース識別子に対応付いている必要はない。
【００５４】
レコード・インデックスは、データソースのレコードに対応するインデックスである。レコード・インデックスは、データソースのレコードの位置を特定するための１以上のレコード・インデックスレコードを有する。レコード・インデックスレコードは、キー項目値あるいは２以上のキー項目値の組合せと、レコード位置情報とを有する。レコード・インデックスレコードは、キー項目値とレコード位置情報とレコード・インデックスレコード位置情報の組でも良い。
また、同じレコード内の異なるキー項目値、あるいはキー項目値の組合せとレコード位置情報とを有する、別のレコード・インデックスを有することは好適である。
【００５５】
キー項目値は、レコードに含まれる属性値であり、キーとなる属性値である。キー項目値は、レコードを識別可能なユニークな情報であることは好適であるが、ユニークな情報でなくても良い。
【００５６】
レコード位置情報は、キー項目値を含むレコードの位置を特定する情報である。レコード位置情報は、例えば、レコードの位置を特定するデータソースの中のオフセットである。レコード位置情報は、例えば、レコードの先頭のオフセットである。レコード位置情報は、例えば、レコードの最後の情報のオフセットでも良い。
【００５７】
レコード・インデックスレコード位置情報は、レコード・インデックスにおけるレコード・インデックスレコードの位置を特定する情報である。レコード・インデックスレコード位置情報は、例えば、レコード・インデックスにおけるレコード・インデックスレコードのオフセットである。
【００５８】
なお、レコード・インデックスにおいて、キー項目値がソートされていることは好適である。
【００５９】
また、レコード・インデックスレコードと配列インデックスレコードとは、対応付いていることは好適である。レコード・インデックスレコードと配列インデックスレコードとは、例えば、キー項目値により対応付いている。
【００６０】
２次インデックス格納部１１２４には、２次インデックスが格納される。２次インデックス格納部１１２４には、通常、データソースごとに、２次インデックスが格納される。つまり、２次インデックスは、通常、ソース識別子に対応付いている。なお、検索対象のデータソースが一つである場合、２次インデックスは、ソース識別子に対応付いている必要はない。
【００６１】
２次インデックスは、レコード・インデックスに高速にアクセスするためのインデックスである。２次インデックスは、データソースが有する２以上のレコードのうちの一部である１以上の各レコードに対応する情報である。２次インデックスは、レコードごとの２次インデックスレコードを有する。２次インデックスレコードは、キー項目値とレコード・インデックスレコード位置情報との組である。レコード・インデックスレコード位置情報は、レコード・インデックス内における箇所であり、レコード位置情報が存在する箇所を特定する情報である。キー項目値は、レコードが有するキー項目値である。
【００６２】
なお、２次インデックスにおけるキー項目値は、ソートされていることは好適である。
【００６３】
ソース・インデックス格納部１１２５には、ソース・インデックスが格納される。ソース・インデックスは、データソースごとのインデックスである。ソース・インデックスは、例えば、データソースごとのソース・インデックスレコードの集合である。
【００６４】
ソース・インデックスレコードは、例えば、ソース識別子と最小キー項目値と最大キー項目値との組である。最小キー項目値は、ソース識別子で識別されるデータソースが有する最小のキー項目値である。最大キー項目値は、ソース識別子で識別されるデータソースが有する最大のキー項目値である。かかる場合、通常、２以上の各データソースに、異なるレコードが格納されている。
【００６５】
ソース・インデックスレコードは、例えば、ソース識別子と最小属性識別子と最大属性識別子との組である。最小属性識別子は、ソース識別子で識別されるデータソースが有する最小の属性識別子である。最大属性識別子は、ソース識別子で識別されるデータソースが有する最大の属性識別子である。かかる場合、通常、２以上の各データソースに、異なる属性の属性値が格納されている。
【００６６】
ソース・インデックスレコードは、例えば、ソース識別子と最小キー項目値と最大キー項目値と最小属性識別子と最大属性識別子との組である。かかる場合、通常、２以上の各データソースに、一部のレコードの一部の属性の属性値が格納されている。
【００６７】
受付部１２は、各種の指示や情報を受け付ける。各種の指示や情報とは、例えば、後述する検索条件、データソース、データソースを構成する一部の情報である。
【００６８】
ここで、受け付けとは、通常、端末装置３からの受信であるが、キーボードやマウス、タッチパネルなどの入力デバイスから入力された情報の受け付け、光ディスクや磁気ディスク、半導体メモリなどの記録媒体から読み出された情報の受け付けなどを含む概念であっても良い。
【００６９】
条件受付部１２１は、検索条件を受け付ける。検索条件は、例えば、１または２以上の属性識別子を含む。検索条件は、例えば、１または２以上のキー項目値を含む。検索条件は、例えば、１以上の属性識別子および１以上のキー項目値を含む。
【００７０】
処理部１３は、各種の処理を行う。各種の処理は、例えば、インデックス生成部１３１、検索部１３２、インデックス更新部１３３が行う処理である。
【００７１】
処理部１３は、受付部１２がデータソースを受け付けた場合に、当該データソースをデータソース格納部１１１に蓄積する。その際、処理部１３は、図示しない時計から最終更新時情報を取得し、当該最終更新時情報を当該データソースに対応付ける。
【００７２】
処理部１３は、受付部１２がデータソースを構成する一部の情報を受け付けた場合、当該一部の情報を用いて、データソースを更新する。その際、処理部１３は、図示しない時計から最終更新時情報を取得し、当該最終更新時情報を当該データソースに対応付ける。
【００７３】
インデックス生成部１３１は、１または２以上の各データソースからインデックスを生成する。
【００７４】
配列インデックス生成部１３１１は、１以上の各データソースごとに、配列インデックスを生成し、配列インデックス格納部１１２１に蓄積する。
【００７５】
配列インデックス生成部１３１１は、データソースにおけるレコードごと、および１以上の属性値ごとに、属性位置情報を取得する。
【００７６】
配列インデックス生成部１３１１は、データソースにおけるすべての各レコードごとに、一部の各属性値の属性位置情報を有する配列インデックスレコードを取得し、当該１以上の配列インデックスレコードを有する配列インデックスを構成し、配列インデックス格納部１１２１に蓄積することは好適である。ただし、配列インデックス生成部１３１１は、データソースにおけるすべての各レコードごとに、すべての各各属性値の属性位置情報を有する配列インデックスレコードを取得し、当該１以上の配列インデックスレコードを有する配列インデックスを構成し、配列インデックス格納部１１２１に蓄積しても良い。
【００７７】
配列インデックスレコードは、レコードにおけるすべての属性値のうちの一部の属性値の属性位置情報のみを有する情報であることは好適である。なお、かかる一部の属性値の選択方法は問わない。一部の属性値は、例えば、所定の値ごと（例えば、１番目、５番目、９番目等の４つごと）に選択されることは好適であるが、ランダムに所定数だけ選択されても良い。
【００７８】
配列インデックス生成部１３１１は、データソースにおける２以上のレコードのうちの１以上の各レコードごと、および１以上の各属性値ごとに、属性位置情報を取得する。そして、配列インデックス生成部１３１１は、レコードごと、および属性値ごとの属性位置情報を有する配列インデックスを生成し、配列インデックス格納部１１２１に蓄積する。
【００７９】
配列インデックス生成部１３１１は、例えば、取得した属性位置情報を、レコード識別子またはキー項目値、および属性値識別子に対応付くように、配列インデックス格納部１１２１に蓄積する。
【００８０】
配列インデックス生成部１３１１は、通常、データソースを走査し、第一デリミタごとにレコードを認識し、当該レコードを走査し、第二デリミタごとに属性値を認識し、例えば、当該レコードの先頭から、各第二デリミタの次の位置を、各属性値の属性位置情報として取得する。
【００８１】
配列ラベル・インデックス生成部１３１２は、１以上の各データソースごとに、配列ラベル・インデックスを生成し、配列ラベル・インデックス格納部１１２２に蓄積する。
【００８２】
配列ラベル・インデックス生成部１３１２は、例えば、データソースから、２以上の各属性ごとに、属性値識別子と属性順番情報とを取得し、当該属性値識別子と属性順番情報との組である配列ラベル・インデックスレコードを取得し、当該２以上の配列ラベル・インデックスレコードを有する配列ラベル・インデックスを構成し、当該配列ラベル・インデックスを配列ラベル・インデックス格納部１１２２に蓄積する。
【００８３】
なお、配列ラベル・インデックス生成部１３１２は、属性値識別子キーとして配列ラベル・インデックスレコードをソートし、配列ラベル・インデックスを構成することは好適である。
【００８４】
また、配列インデックスレコードが、すべての属性値の属性位置情報を有する場合、配列ラベル・インデックスは不要である。
【００８５】
レコード・インデックス生成部１３１３は、データソースを参照し、データソースの２以上の各レコードのキー項目値とレコード位置情報とを有するレコード・インデックスレコードを、レコードごとに取得する。そして、レコード・インデックス生成部１３１３は、レコードごとのレコード・インデックスレコードの集合を有するレコード・インデックスを生成し、レコード・インデックス格納部１１２３に蓄積する。
【００８６】
レコード・インデックス生成部１３１３は、１以上の各レコード・インデックスレコードに、レコード・インデックス内におけるレコード・インデックスレコードの位置を特定するレコード・インデックスレコード位置情報を取得し、当該レコード・インデックスレコード位置情報を有するレコード・インデックスレコードを構成することは好適である。
【００８７】
なお、レコード・インデックス生成部１３１３は、キー項目値をキーとして該レコード・インデックスレコードをソートし、レコード・インデックスを構成することは好適である。
【００８８】
２次インデックス生成部１３１４は、データソースごとに、データソースが有する２以上のレコードのうちの一部である１以上の各レコードごとに、レコード・インデックスレコード位置情報とレコードのキー項目値との組である２次インデックスレコードを取得し、当該１以上の２次インデックスレコードを有する２次インデックスを構成し、２次インデックス格納部１１２４に蓄積する。
【００８９】
また、配列インデックスの属性値位置情報がデータソース内における位置を特定する情報である場合、レコード・インデックスは無くても良い。
【００９０】
２次インデックス生成部１３１４は、例えば、データソースごとに、データソースに対応するレコード・インデックスを参照し、当該レコード・インデックスが有する一部のレコードであり、２以上の各レコードが有するレコード・インデックスレコード位置情報とキー項目値との組である２次インデックスレコードを取得し、２以上の２次インデックスレコードを有する２次インデックスを生成し、２次インデックス格納部１１２４に蓄積する。
【００９１】
２次インデックスレコードは、一部のレコード・インデックスレコードに対応するが、その一部のレコード・インデックスレコードの選択方法は問わない。一部のレコード・インデックスレコードは、例えば、所定の値ごと（例えば、１番目、５番目、９番目等の４つごと）に選択されることは好適であるが、ランダムに所定数だけ選択されても良い。
【００９２】
なお、２次インデックスは、レコードの検索を高速にするが、無くても良い。
【００９３】
ソース・インデックス生成部１３１５は、２以上の各データソースごとに、ソース・インデックスレコードを取得し、２以上のソース・インデックスレコードを有するソース・インデックスを生成し、ソース・インデックス格納部１１２５に蓄積する。なお、ソース・インデックスレコードは、例えば、ソース識別子と最小キー項目値と最大キー項目値との組である。ソース・インデックスレコードは、例えば、ソース識別子と最小属性識別子と最大属性識別子との組である。ソース・インデックスレコードは、例えば、ソース識別子と最小キー項目値と最大キー項目値と最小属性識別子と最大属性識別子との組である。
【００９４】
なお、データソースが一つである場合、ソース・インデックス生成部１３１５は、不要である。
【００９５】
検索部１３２は、検索条件が有する属性識別子に対応する属性位置情報を、配列インデックスから取得し、当該属性位置情報を用いて、検索条件が有する属性識別子に対応する属性値を、キー項目値と２以上の属性値とを有する１または２以上のレコードを含むデータソースから取得する。
【００９６】
検索部１３２は、例えば、条件受付部１２１が受け付けた検索条件が有する属性識別子で識別される属性値の前に配置されている属性値を識別する属性識別子に対応する第一の属性位置情報と、検索条件が有する属性識別子で識別される属性値の後に配置されている属性値を識別する属性識別子に対応する第二の属性位置情報とを、配列インデックスから取得する。次に、検索部１３２は、当該第一の属性位置情報が特定する位置と、当該第二の属性位置情報が特定する位置の間に存在する属性値であり、検索条件が有する属性識別子に対応する属性値を、データソースから取得する。
【００９７】
検索部１３２は、例えば、条件受付部１２１が受け付けた検索条件が有する属性識別子に対応する属性順番情報を配列ラベル・インデックスから取得する。次に、検索部１３２は、当該属性順番情報を用いて、検索条件が有する属性識別子に対応する属性位置情報を、配列インデックスから取得する。次に、検索部１３２は、当該属性位置情報を用いて、検索条件が有する属性識別子に対応する属性値を、データソースから取得する。
【００９８】
検索部１３２は、例えば、条件受付部１２１が受け付けた検索条件が有する属性識別子に対応する属性順番情報を配列ラベル・インデックスから取得する。検索部１３２は、当該属性順番情報が示す順番の前に配置されている属性値を識別する属性識別子に対応する第一の属性位置情報と、当該属性順番情報が示す順番の後に配置されている属性値を識別する属性識別子に対応する第二の属性位置情報とを、配列インデックスから取得する。次に、検索部１３２は、当該第一の属性位置情報が特定する位置と、当該第二の属性位置情報が特定する位置の間に存在する属性値であり、検索条件が有する属性識別子に対応する属性値を、データソースから取得する。
【００９９】
検索部１３２は、例えば、検索条件が有するキー項目値と対になるレコード位置情報をレコード・インデックスから取得する。次に、検索部１３２は、当該レコード位置情報が特定する位置に対応するレコードを決定し、当該レコードの中の属性値であり、検索条件が有する属性識別子に対応する属性値を、データソースから取得する。なお、検索条件において属性識別子が示されない場合、検索条件が有する属性識別子は、すべての属性識別子である、と考えても良い。
【０１００】
検索部１３２は、例えば、検索条件が有するキー項目値を挟む２つのキー項目値を２次インデックスから取得する。次に、検索部１３２は、取得した２つの各キー項目値と対になる第一のレコード・インデックスレコード位置情報と第二のレコード・インデックスレコード位置情報とを、２次インデックスから取得する。次に、検索部１３２は、当該第一のレコード・インデックスレコード位置情報と当該第二のレコード・インデックスレコード位置情報との間のレコード・インデックスレコードを検索し、検索条件が有するキー項目値を含むレコード・インデックスレコードを決定し、当該レコード・インデックスレコードの中のレコード位置情報を取得する。次に、検索部１３２は、当該レコード位置情報が特定する位置に対応するレコードの中の属性値であり、検索条件が有する属性識別子に対応する属性値を、データソースから取得する。なお、検索部１３２は、検索条件が有する属性識別子に対応する属性値の属性位置情報を、配列インデックスを用いて取得し、当該属性位置情報が特定する位置の属性値をデータソースから取得することは好適である。
【０１０１】
また、レコード・インデックスにおいて、キー項目値がソートされている場合、検索部１３２は、二分探索により、検索条件が有するキー項目値を含むレコード・インデックスレコードを決定することは好適であるが、シーケンシャルサーチでも良い。
【０１０２】
検索部１３２は、例えば、検索条件が有するキー項目値と一致する、またはキー項目値を間に挟む最小キー項目値と最大キー項目値と対になるソース識別子を、ソース・インデックスから取得する。次に、検索部１３２は、当該ソース識別子により識別されるデータソースから、検索条件が有する属性識別子に対応する属性位置情報を、配列インデックスから取得する。次に、検索部１３２は、当該属性位置情報を用いて、レコードの中の属性値であり、検索条件が有する属性識別子に対応する属性値を取得する。
【０１０３】
検索部１３２は、例えば、検索条件が有する属性識別子と一致する、または属性識別子を間に挟む最小属性識別子と最大属性識別子と対になるソース識別子を、ソース・インデックスから取得する。検索部１３２は、当該ソース識別子により識別されるデータソースに対応する配列インデックスから、検索条件が有する属性識別子に対応する属性位置情報を取得する。検索部１３２は、当該属性位置情報を用いて、当該ソース識別子により識別されるデータソースの中のレコードの中の属性値であり、検索条件が有する属性識別子に対応する属性値を取得する。
【０１０４】
検索部１３２は、例えば、検索条件が有するキー項目値と検索条件が有する属性識別子とに対応するソース識別子を、ソース・インデックスから取得する。検索部１３２は、当該ソース識別子により識別されるデータソースに対応する２次インデックスから、検索条件が有するキー項目値を挟む２つのキー項目値を２次インデックスから取得する。次に、検索部１３２は、取得した２つの各キー項目値と対になる第一のレコード・インデックスレコード位置情報と第二のレコード・インデックスレコード位置情報とを、２次インデックスから取得する。次に、検索部１３２は、当該第一のレコード・インデックスレコード位置情報と当該第二のレコード・インデックスレコード位置情報との間のレコード・インデックスレコードを検索し、検索条件が有するキー項目値を含むレコード・インデックスレコードを決定し、当該レコード・インデックスレコードの中のレコード位置情報を取得する。また、検索部１３２は、検索条件が有する属性識別子に対応する属性順番情報を配列ラベル・インデックスから取得する。次に、検索部１３２は、当該属性順番情報を用いて、検索条件が有する属性識別子に対応する属性位置情報を、配列インデックスから取得する。次に、検索部１３２は、取得したレコード位置情報により特定されるレコードの中の属性値であり、当該属性位置情報が特定する属性値をデータソースから取得する。
【０１０５】
インデックス更新部１３３は、予め決められた条件を満たす場合に、データソースから取得した最終更新時情報が示す最終更新時が、１以上の各種類のインデックスに対応する生成時情報が示す生成時より後か否かを判断し、後である場合に、インデックス生成部１３１を動作させて、１以上の各種類のインデックスを構成する。また、インデックス更新部１３３は、通常、構成した１以上の各種類のインデックスを、インデックス格納部１１２の古いインデックスに上書きする。なお、１以上の各種類のインデックスは、配列インデックス、配列ラベル・インデックス、レコード・インデックス、２次インデックス、ソース・インデックスのうちの１種類以上である。また、予め決められた条件は、例えば、ユーザからの指示を受け付けたこと、予め決められた時刻になったこと、データソースが更新されたことである。
【０１０６】
出力部１４は、各種の情報を取得する。各種の情報は、例えば、後述する検索結果である。なお、ここでの出力とは、通常、端末装置３への送信であるが、ディスプレイへの表示、プロジェクターを用いた投影、プリンタでの印字、記録媒体への蓄積、他の処理装置や他のプログラムなどへの処理結果の引渡しなどを含む概念であっても良い。
【０１０７】
結果出力部１４１は、検索部１３２が取得した属性値を含む検索結果を出力する。検索結果は、通常、属性値を有する。
【０１０８】
データソース管理装置２は、１以上のデータソースを管理する。データソース管理装置２は、データソース格納部１１１を具備する。
【０１０９】
端末装置３を構成する端末格納部３１には、各種の情報が格納される。各種の情報は、例えば、検索条件、データソースである。
【０１１０】
端末受付部３２は、各種の指示や情報を受け付ける。各種の指示や情報は、例えば、検索条件、データソース、データソースの一部の情報である。
【０１１１】
なお、ここでの受け付けとは、キーボードやマウス、タッチパネルなどの入力デバイスから入力された情報の受け付け、有線もしくは無線の通信回線を介して送信された情報の受信、光ディスクや磁気ディスク、半導体メモリなどの記録媒体から読み出された情報の受け付けなどを含む概念である。
【０１１２】
端末処理部３３は、各種の処理を行う。各種の処理とは、例えば、端末受付部３２が受け付けた指示や情報を、送信するデータ構造の指示や情報にする処理である。各種の処理とは、例えば、端末受信部３５が受信した情報を、出力するデータ構造の情報にする処理である。
【０１１３】
端末送信部３４は、各種の情報や指示を送信する。端末送信部３４は、通常、各種の情報や指示を検索装置１に送信する。各種の情報や指示は、例えば、検索条件、データソースである。
【０１１４】
端末受信部３５は、各種の情報を受信する。端末受信部３５は、各種の情報を検索装置１から受信する。各種の情報は、例えば、検索結果である。
【０１１５】
端末出力部３６は、各種の情報を出力する。各種の情報は、例えば、検索結果である。
【０１１６】
格納部１１、データソース格納部１１１、インデックス格納部１１２、配列インデックス格納部１１２１、配列ラベル・インデックス格納部１１２２、レコード・インデックス格納部１１２３、２次インデックス格納部１１２４、ソース・インデックス格納部１１２５、および端末格納部３１は、不揮発性の記録媒体が好適であるが、揮発性の記録媒体でも実現可能である。
【０１１７】
格納部１１等に情報が記憶される過程は問わない。例えば、記録媒体を介して情報が格納部１１等で記憶されるようになってもよく、通信回線等を介して送信された情報が格納部１１等で記憶されるようになってもよく、あるいは、入力デバイスを介して入力された情報が格納部１１等で記憶されるようになってもよい。
【０１１８】
受付部１２、条件受付部１２１、および端末受信部３５は、通常、無線または有線の通信手段で実現されるが、放送を受信する手段で実現されても良い。
【０１１９】
処理部１３、インデックス生成部１３１、検索部１３２、インデックス更新部１３３、配列インデックス生成部１３１１、配列ラベル・インデックス生成部１３１２、レコード・インデックス生成部１３１３、２次インデックス生成部１３１４、ソース・インデックス生成部１３１５、および端末処理部３３は、通常、プロセッサやメモリ等から実現され得る。処理部１３等の処理手順は、通常、ソフトウェアで実現され、当該ソフトウェアはＲＯＭ等の記録媒体に記録されている。但し、ハードウェア（専用回路）で実現しても良い。なお、プロセッサは、ＣＰＵ、ＭＰＵ、ＧＰＵ等であり、その種類は問わない。
【０１２０】
出力部１４、結果出力部１４１、および端末送信部３４は、通常、無線または有線の通信手段で実現されるが、放送手段で実現されても良い。
【０１２１】
端末受付部３２は、タッチパネルやキーボード等の入力手段のデバイスドライバーや、メニュー画面の制御ソフトウェア等で実現され得る。
【０１２２】
端末出力部３６は、ディスプレイやスピーカー等の出力デバイスを含むと考えても含まないと考えても良い。端末出力部３６は、出力デバイスのドライバーソフトまたは、出力デバイスのドライバーソフトと出力デバイス等で実現され得る。
【０１２３】
次に、検索システムＡの動作例について説明する。まず、検索装置１の動作例について、図４のフローチャートを用いて説明する。
【０１２４】
（ステップＳ４０１）インデックス生成部１３１は、インデックスを生成するタイミングであるか否かを判断する。インデックスを生成するタイミングであればステップＳ４０２に行き、インデックスを生成するタイミングでなければステップＳ４０６に行く。
【０１２５】
（ステップＳ４０２）インデックス生成部１３１は、カウンタｉに１を代入する。
【０１２６】
（ステップＳ４０３）インデックス生成部１３１は、インデックスを生成する対象のｉ番目のデータソースが存在するか否かを判断する。ｉ番目のデータソースが存在する場合はステップＳ４０４に行き、ｉ番目のデータソースが存在しない場合はステップＳ４０１に戻る。
【０１２７】
（ステップＳ４０４）インデックス生成部１３１は、ｉ番目のデータソースに対応するインデックスを生成する。インデックス生成処理の例について、図５のフローチャートを用いて説明する。
【０１２８】
（ステップＳ４０５）インデックス生成部１３１は、カウンタｉを１、インクリメントする。ステップＳ４０３に戻る。
【０１２９】
（ステップＳ４０６）インデックス更新部１３３は、インデックスを更新するタイミングであるか否かを判断する。インデックスを更新するタイミングであればステップＳ４０７に行き、インデックスを更新するタイミングでなければステップＳ４１４に行く。
【０１３０】
（ステップＳ４０７）インデックス更新部１３３は、カウンタｉに１を代入する。
【０１３１】
（ステップＳ４０８）インデックス更新部１３３は、ｉ番目のデータソースが存在するか否かを判断する。ｉ番目のデータソースが存在する場合はステップＳ４０９に行き、ｉ番目のデータソースが存在しない場合はステップＳ４０１に戻る。
【０１３２】
（ステップＳ４０９）インデックス更新部１３３は、ｉ番目のデータソースの属性値である最終更新時情報を取得する。
【０１３３】
（ステップＳ４１０）インデックス更新部１３３は、ｉ番目のデータソースに対応するインデクス（例えば、配列インデックス）の生成時情報を配列インデックス格納部１１２１から取得する。
【０１３４】
（ステップＳ４１１）インデックス更新部１３３は、ステップＳ４０９で取得した最終更新時情報が示す時が、ステップＳ４１０で取得した生成時情報が示す時より新しいか否かを判断する。新しい場合はステップＳ４１２に行き、新しくない場合はステップＳ４１３に行く。
【０１３５】
（ステップＳ４１２）インデックス更新部１３３は、インデックス生成部１３１に動作の指示をする。その結果、インデックス生成部１３１は、インデックスを生成し、ｉ番目のデータソースに対応付けて、インデックスを蓄積する。かかる処理により、ｉ番目のデータソースに対応するインデックスが更新される。なお、インデックス生成処理の例は、図５のフローチャートである。
【０１３６】
（ステップＳ４１３）カウンタｉを１、インクリメントする。ステップＳ４０８に戻る。
【０１３７】
（ステップＳ４１４）条件受付部１２１は、検索条件を受け付けたか否かを判断する。検索条件を受け付けた場合はステップＳ４１５に行き、検索条件を受け付けなかった場合はステップＳ４０１に戻る。
【０１３８】
（ステップＳ４１５）検索部１３２は、検索条件を用いて検索を行う。かかる検索処理の例について、図１１フローチャートを用いて説明する。
【０１３９】
（ステップＳ４１６）結果出力部１４１は、ステップＳ４１５で取得された検索結果を出力する。ステップＳ４０１に戻る。
【０１４０】
なお、図４のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
【０１４１】
次に、ステップＳ４０４のインデックス生成処理の例について、図５のフローチャートを用いて説明する。
【０１４２】
（ステップＳ５０１）ソース・インデックス生成部１３１５は、ソース・インデックスを生成する。かかるソース・インデックス生成処理の例について、図６フローチャートを用いて説明する。
【０１４３】
（ステップＳ５０２）配列ラベル・インデックス生成部１３１２は、配列ラベル・インデックスを生成する。かかる配列ラベル・インデックス生成処理の例について、図７フローチャートを用いて説明する。
【０１４４】
（ステップＳ５０３）配列インデックス生成部１３１１は、配列インデックスを生成する。かかる配列インデックス生成処理の例について、図８フローチャートを用いて説明する。
【０１４５】
（ステップＳ５０４）レコード・インデックス生成部１３１３は、レコード・インデックスを生成する。かかるレコード・インデックス生成処理の例について、図９フローチャートを用いて説明する。
【０１４６】
（ステップＳ５０５）２次インデックス生成部１３１４は、２次インデックスを生成する。かかる２次インデックス生成処理の例について、図１０フローチャートを用いて説明する。
【０１４７】
なお、図５のフローチャートにおいて、例えば、レコード・インデックスと配列インデックスとは、レコードごとに、一緒に生成されても良い。つまり、各種のインデックスの生成の手順や順序等は問わない。
【０１４８】
次に、ステップＳ５０１のソース・インデックス生成処理の例について、図６フローチャートを用いて説明する。
【０１４９】
（ステップＳ６０１）ソース・インデックス生成部１３１５は、２以上の各データソースに、異なるレコードが存在するか否かを判断する。異なるレコードが存在する場合はステップＳ６０２に行き、異なるレコードが存在しない場合はステップＳ６０４に行く。
【０１５０】
（ステップＳ６０２）ソース・インデックス生成部１３１５は、インデックスの生成の対象のデータソースを参照し、当該データソースの最小キー項目値を取得する。
【０１５１】
（ステップＳ６０３）ソース・インデックス生成部１３１５は、インデックスの生成の対象のデータソースを参照し、当該データソースの最大キー項目値を取得する。
【０１５２】
（ステップＳ６０４）ソース・インデックス生成部１３１５は、２以上の各データソースに、異なる属性の属性値が存在するか否かを判断する。異なる属性の属性値が存在する場合はステップＳ６０５に行き、異なる属性の属性値が存在しない場合はステップＳ６０７に行く。
【０１５３】
（ステップＳ６０５）ソース・インデックス生成部１３１５は、インデックスの生成の対象のデータソースを参照し、当該データソースの最小属性識別子取得する。
【０１５４】
（ステップＳ６０６）ソース・インデックス生成部１３１５は、インデックスの生成の対象のデータソースを参照し、当該データソースの最大属性識別子取得する。
【０１５５】
（ステップＳ６０７）ソース・インデックス生成部１３１５は、インデックスの生成の対象のデータソースのソース識別子を取得する。
【０１５６】
（ステップＳ６０８）ソース・インデックス生成部１３１５は、ソース・インデックスレコードを構成する。ソース・インデックスレコードは、例えば、最小キー項目値と最大キー項目値とを有する。ソース・インデックスレコードは、例えば、最小属性識別子と最大属性識別子とを有する。ソース・インデックスレコードは、例えば、最小キー項目値と最大キー項目値と最小属性識別子と最大属性識別子とを有する。ソース・インデックスレコードは、ソース識別子に対応している。なお、ソース識別子に対応していることは、ソース識別子を有することでも良いことは言うまでもない。
【０１５７】
（ステップＳ６０９）ソース・インデックス生成部１３１５は、ステップＳ６０８で構成したソース・インデックスレコードをソース・インデックス格納部１１２５に追記する。上位処理にリターンする。
【０１５８】
次に、ステップＳ５０２の配列ラベル・インデックス生成処理の例について、図７フローチャートを用いて説明する。
【０１５９】
（ステップＳ７０１）配列ラベル・インデックス生成部１３１２は、カウンタｉに１を代入する。
【０１６０】
（ステップＳ７０２）配列ラベル・インデックス生成部１３１２は、インデックスの生成の対象のデータソースのｉ番目の属性の属性識別子を取得する。
【０１６１】
なお、配列ラベル・インデックス生成部１３１２は、例えば、インデックスの生成の対象のデータソースの中の１行目のレコードのｉ番目の属性の属性識別子を取得する。配列ラベル・インデックス生成部１３１２は、例えば、格納部１１に格納されているデータソーススキーマ情報からｉ番目の属性の属性識別子を取得しても良い。なお、データソーススキーマ情報とは、データソースの構造を特定する情報であり、例えば、２以上の属性識別子を有する。
【０１６２】
（ステップＳ７０３）配列ラベル・インデックス生成部１３１２は、ステップＳ７０２でｉ番目の属性の属性識別子を取得できたか否かを判断する。取得できた場合はステップＳ７０４に行き、取得できなかった場合は上位処理にリターンする。
【０１６３】
（ステップＳ７０４）配列ラベル・インデックス生成部１３１２は、ステップＳ７０２で取得したｉ番目の属性の属性識別子と、ｉ（属性順番情報）とを有する配列ラベル・インデックスレコードを構成する。なお、配列ラベル・インデックスレコードは、配列ラベル・インデックスを構成する情報である。
【０１６４】
（ステップＳ７０５）配列ラベル・インデックス生成部１３１２は、ステップＳ７０４で構成した配列ラベル・インデックスレコードを、インデックスの生成の対象のデータソースに対応付けて、配列ラベル・インデックス格納部１１２２に追記する。
【０１６５】
（ステップＳ７０６）配列ラベル・インデックス生成部１３１２は、カウンタｉを１、インクリメントする。ステップＳ７０２に戻る。
【０１６６】
なお、図７のフローチャートにおいて、配列ラベル・インデックスレコードを、属性識別子をキーとしてソートし、配列ラベル・インデックスを構成することは好適である。
【０１６７】
次に、ステップＳ５０３の配列インデックス生成処理の例について、図８フローチャートを用いて説明する。
【０１６８】
（ステップＳ８０１）配列インデックス生成部１３１１は、カウンタｉに１を代入する。
【０１６９】
（ステップＳ８０２）配列インデックス生成部１３１１は、インデックスの生成の対象のデータソースの中に、ｉ番目のレコードが存在するか否かを判断する。ｉ番目のレコードが存在する場合はステップＳ８０３に行き、ｉ番目のレコードが存在しない場合は上位処理にリターンする。
【０１７０】
（ステップＳ８０３）配列インデックス生成部１３１１は、カウンタｊに１を代入する。
【０１７１】
（ステップＳ８０４）配列インデックス生成部１３１１は、インデックスの生成の対象のデータソースに、ｊ番目の属性が存在するか否かを判断する。ｊ番目の属性が存在する場合はステップＳ８０５に行き、ｊ番目の属性が存在しない場合はステップＳ８０９に行く。
【０１７２】
（ステップＳ８０５）配列インデックス生成部１３１１は、ｊ番目の属性を配列インデックスに使用するか否かを判断する。ｊ番目の属性を配列インデックスに使用する場合はステップＳ８０６に行き、使用しない場合はステップＳ８０８に行く
【０１７３】
（ステップＳ８０６）配列インデックス生成部１３１１は、ｉ番目のレコードのｊ番目の属性の属性値の属性位置情報を、インデックスの生成の対象のデータソースから取得する。
【０１７４】
（ステップＳ８０７）配列インデックス生成部１３１１は、ステップＳ８０６で取得した属性位置情報を、配列インデックスレコードのバッファに追記する。
【０１７５】
（ステップＳ８０８）配列インデックス生成部１３１１は、カウンタｊを１、インクリメントする。ステップＳ８０４に戻る。
【０１７６】
（ステップＳ８０９）配列インデックス生成部１３１１は、配列インデックスレコードのバッファの配列インデックスレコードを、配列インデックス格納部１１２１に追記する。
【０１７７】
（ステップＳ８１０）配列インデックス生成部１３１１は、カウンタｉを１、インクリメントする。ステップＳ８０２に戻る。
【０１７８】
次に、ステップＳ５０４のレコード・インデックス生成処理の例について、図９フローチャートを用いて説明する。
【０１７９】
（ステップＳ９０１）レコード・インデックス生成部１３１３は、カウンタｉに１を代入する。
【０１８０】
（ステップＳ９０２）レコード・インデックス生成部１３１３は、インデックスの生成の対象のデータソースの中に、ｉ番目のレコードが存在するか否かを判断する。ｉ番目のレコードが存在する場合はステップＳ９０３に行き、ｉ番目のレコードが存在しない場合は上位処理にリターンする。
【０１８１】
（ステップＳ９０３）レコード・インデックス生成部１３１３は、インデックスの生成の対象のデータソースを参照し、ｉ番目のレコードのレコード位置情報を取得する。
【０１８２】
（ステップＳ９０４）レコード・インデックス生成部１３１３は、インデックスの生成の対象のデータソースを参照し、ｉ番目のレコードのキー項目値を取得する。
【０１８３】
（ステップＳ９０５）レコード・インデックス生成部１３１３は、ｉ番目のレコード・インデックスレコードの、レコード・インデックス内における位置情報であるレコード・インデックスレコード位置情報を取得する。
【０１８４】
（ステップＳ９０６）レコード・インデックス生成部１３１３は、ステップＳ９０３で取得したレコード位置情報、ステップＳ９０４で取得したキー項目値、およびステップＳ９０５で取得したレコード・インデックスレコード位置情報を有するｉ番目のレコード・インデックスレコードを構成する。
【０１８５】
（ステップＳ９０７）レコード・インデックス生成部１３１３は、ステップＳ９０６で構成したレコード・インデックスレコードを、レコード・インデックス格納部１１２３に追記する。
【０１８６】
（ステップＳ９０８）レコード・インデックス生成部１３１３は、カウンタｉを１、インクリメントする。ステップ９０２に戻る。
【０１８７】
なお、図９のフローチャートにおいて、レコード・インデックス生成部１３１３は、キー項目値をキーとして、レコード・インデックスレコードをソートすることは好適である。かかる場合、レコード・インデックス生成部１３１３は、レコード・インデックスレコードごとに、ソートされた状態のレコード・インデックスレコード位置情報を取得することは言うまでもない。
【０１８８】
次に、ステップＳ５０５の２次インデックス生成処理の例について、図１０フローチャートを用いて説明する。
【０１８９】
（ステップＳ１００１）２次インデックス生成部１３１４は、カウンタｉに１を代入する。
【０１９０】
（ステップＳ１００２）２次インデックス生成部１３１４は、レコード・インデックスの中に、ｉ番目のレコード・インデックスレコードが存在するか否かを判断する。ｉ番目のレコード・インデックスレコードが存在する場合はステップＳ１００３に行き、存在しない場合は上位処理にリターンする。
【０１９１】
（ステップＳ１００３）２次インデックス生成部１３１４は、ｉ番目のレコード・インデックスレコードを、２次インデックスに使用するか否かを判断する。２次インデックスに使用する場合はステップＳ１００４に行き、２次インデックスに使用しない場合はステップＳ１００６に行く。
【０１９２】
なお、２次インデックス生成部１３１４は、すべてのレコード・インデックスレコードのうちの一部のレコード・インデックスレコードを使用する。２次インデックス生成部１３１４は、例えば、すべてのレコード・インデックスレコードの番号をＮ（Ｎは２以上の自然数）で割った場合の余りの値がＭ（Ｍは整数，０＜＝Ｍ＜Ｎ−１）の番号に対応するレコード・インデックスレコードを使用する、と判断する。また、２次インデックス生成部１３１４は、例えば、予め決められている一部のレコード・インデックスレコードを使用する、と判断する。
【０１９３】
（ステップＳ１００４）２次インデックス生成部１３１４は、ｉ番目のレコード・インデックスレコードから、キー項目値とレコード・インデックスレコード位置情報とを取得し、当該情報を有する２次インデックスレコードを構成する。
【０１９４】
（ステップＳ１００５）２次インデックス生成部１３１４は、ステップＳ１００４で構成した２次インデックスレコードを２次インデックス格納部１１２４に追記する。
【０１９５】
（ステップＳ１００６）２次インデックス生成部１３１４は、カウンタｉを１、インクリメントする。ステップ１００２に戻る。
【０１９６】
なお、図１０のフローチャートにおいて、２次インデックスレコードは、キー項目値をキーとしてソートされていることは好適である。
【０１９７】
次に、ステップＳ４１５の検索処理の例について、図１１フローチャートを用いて説明する。
【０１９８】
（ステップＳ１１０１）検索部１３２は、受け付けられた検索条件に対応する１以上の属性識別子と１以上のキー項目値を取得する。なお、１以上の属性識別子は、検索結果として取得する属性値を特定する。１以上のキー項目値は、検索結果として情報を取得する対象のレコードを特定する。つまり、検索部１３２は、ここで取得した１以上のキー項目値のレコードの中の属性値であり、ここで取得した１以上の各属性識別子で識別される属性値を取得することとなる。
【０１９９】
（ステップＳ１１０２）検索部１３２は、ソース・インデックスを参照し、ステップＳ１１０１で取得した１以上の属性識別子と１以上のキー項目値に対応する１以上のソース識別子を取得する。ここで、検索部１３２は、取得した１以上の各ソース識別子に、当該ソース識別子で識別されるデータソースに含まれる属性値の１以上の属性識別子と、当該ソース識別子で識別されるデータソースに含まれるレコードの１以上のキー項目値とを対応付ける。
【０２００】
（ステップＳ１１０３）検索部１３２は、カウンタｉに１を代入する。
【０２０１】
（ステップＳ１１０４）検索部１３２は、ステップＳ１１０２で取得した１以上のソース識別子の中に、ｉ番目のソース識別子が存在するか否かを判断する。ｉ番目のソース識別子が存在する場合はステップＳ１１０５に行き、存在しない場合はステップＳ１１１８に行く。
【０２０２】
（ステップＳ１１０５）検索部１３２は、カウンタｊに１を代入する。
【０２０３】
（ステップＳ１１０６）検索部１３２は、ステップＳ１１０２でｉ番目のソース識別子に対応付けられた１以上のキー項目値の中に、ｊ番目のキー項目値が存在するか否かを判断する。ｊ番目のキー項目値が存在する場合はステップＳ１１０７に行き、存在しない場合はステップＳ１１１７に行く。
【０２０４】
（ステップＳ１１０７）検索部１３２は、ｉ番目のソース識別子に対応する２次インデックスを参照し、ｊ番目のキー項目値に対応する第一のレコード・インデックスレコード位置情報と第二のレコード・インデックスレコード位置情報とを取得する。なお、第一のレコード・インデックスレコード位置情報は、ｊ番目のキー項目値より小さなキー項目値のうちの最大のキー項目値と対になるレコード・インデックスレコード位置情報である。第二のレコード・インデックスレコード位置情報が、ｊ番目のキー項目値より大きなキー項目値のうちの最小のキー項目値と対になるレコード・インデックスレコード位置情報である。また、ここで、検索部１３２は、ｊ番目のキー項目値と対になる一つのレコード・インデックスレコード位置情報を２次インデックスから取得する場合もあり得る。
【０２０５】
（ステップＳ１１０８）ステップＳ１１０７で第一のレコード・インデックスレコード位置情報と第二のレコード・インデックスレコード位置情報とを取得した場合、検索部１３２は、当該第一のレコード・インデックスレコード位置情報と第二のレコード・インデックスレコード位置情報との間のレコード・インデックスレコードを検索し（例えば、二分探索、またはシーケンシャルサーチ）、ｊ番目のキー項目値を検出する。次に、検索部１３２は、当該ｊ番目のキー項目値と対になるレコード位置情報を、レコード・インデックスから取得する。
【０２０６】
また、ステップＳ１１０７で一つのレコード・インデックスレコード位置情報を取得した場合、検索部１３２は、当該レコード・インデックスレコード位置情報と対になるレコード位置情報を、レコード・インデックスから取得する。
【０２０７】
（ステップＳ１１０９）検索部１３２は、カウンタｋに１を代入する。
【０２０８】
（ステップＳ１１１０）検索部１３２は、ｉ番目のソース識別子に対応するｋ番目の属性識別子が存在するか否かを判断する。ｋ番目の属性識別子が存在する場合はステップＳ１１１１に行き、存在しない場合はステップＳ１１１６に行く。
【０２０９】
（ステップＳ１１１１）検索部１３２は、ｉ番目のソース識別子に対応する配列ラベル・インデックスを参照し、ｋ番目の属性識別子と対になる属性順番情報を、当該配列ラベル・インデックスから取得する。
【０２１０】
（ステップＳ１１１２）検索部１３２は、ｉ番目のソース識別子に対応する配列インデックスを参照し、当該配列インデックス内に、ステップＳ１１１１で取得した属性順番情報と一致する属性順番情報が存在するか否かを判断する。属性順番情報と一致する属性順番情報が存在する場合は、検索部１３２は、当該属性順番情報と対になり、かつｊ番目のキー項目値と対になる属性位置情報を当該配列インデックスから取得する。
【０２１１】
属性順番情報と一致する属性順番情報が存在しない場合は、検索部１３２は、当該属性順番情報を挟む２つの属性順番情報を取得する。つまり、検索部１３２は、当該属性順番情報より小さい値の属性順番情報であり、当該属性順番情報との差が最も小さい第一の属性順番情報を取得する。また、検索部１３２は、当該属性順番情報より大きい値の属性順番情報であり、当該属性順番情報との差が最も小さい第二の属性順番情報を取得する。なお、第一の属性順番情報と第二の属性順番情報とは、当該属性順番情報を挟む情報である。次に、検索部１３２は、第一の属性順番情報と対になり、かつｊ番目のキー項目値と対になる属性位置情報を当該配列インデックスから取得する。また、検索部１３２は、第二の属性順番情報と対になり、かつｊ番目のキー項目値と対になる属性位置情報を当該配列インデックスから取得する。
【０２１２】
（ステップＳ１１１３）ステップＳ１１１２で一つの属性位置情報を取得した場合は、検索部１３２は、ステップＳ１１０８で取得したｊ番目のキー項目値と対になるレコード位置情報が示す位置のレコードの中から、ステップＳ１１１２で取得した一つの属性位置情報が示す位置の属性値を、ｉ番目のソース識別子で識別されるデータソースから取得する。
【０２１３】
また、ステップＳ１１１２で２つの属性位置情報を取得した場合は、検索部１３２は、ステップＳ１１０８で取得したｊ番目のキー項目値と対になるレコード位置情報が示す位置のレコードの中から、２つの各属性位置情報が特定する位置の属性値を、例えば、シーケンシャルサーチにより検査し、ｋ番目の属性識別子と対になる属性順番情報の順番に存在する属性値を、ｉ番目のソース識別子で識別されるデータソースから取得する。
【０２１４】
（ステップＳ１１１４）検索部１３２は、ｊ番目のキー項目値とｋ番目の属性識別子とに対応付けて、ステップＳ１１１３で取得した属性値を、図示しないバッファに一時蓄積する。
【０２１５】
（ステップＳ１１１５）検索部１３２は、カウンタｋを１、インクリメントする。ステップ１１１０に戻る。
【０２１６】
（ステップＳ１１１６）検索部１３２は、カウンタｊを１、インクリメントする。ステップ１１０６に戻る。
【０２１７】
（ステップＳ１１１７）検索部１３２は、カウンタｉを１、インクリメントする。ステップ１１０４に戻る。
【０２１８】
（ステップＳ１１１８）検索部１３２は、図示しないバッファに一時蓄積された１以上の属性値を含む検索結果を構成する。上位処理にリターンする。なお、検索結果の構成方法は問わない。検索結果に含まれる属性値に対応する属性識別子は、属性値に対応付くことが明示される態様で、検索結果に含まれることは好適である。また、検索結果は、ｊ番目のキー項目値を含むことは好適である。
【０２１９】
次に、データソース管理装置２の動作例について説明する。データソース管理装置２は、検索装置１からのアクセスに応じて、データソース格納部１１１のデータソースを読み出し、検索装置１に送信する。なお、かかる場合、データソース管理装置２は、データソースの一部のみを読み出し、送信しても良い。
【０２２０】
次に、端末装置３の動作例について説明する。端末装置３の端末受付部３２は、検索条件を受け付ける。次に、端末処理部３３は、送信する検索条件を構成する。次に、端末送信部３４は、当該検索条件を検索装置１に送信する。そして、検索条件の送信に応じて、端末受信部３５は、検索結果を受信する。次に、端末処理部３３は、受信された検索結果を用いて、出力する検索結果を構成する。次に、端末出力部３６は、当該検索結果を出力する。
【０２２１】
以下、本実施の形態における検索システムＡの具体的な動作例について説明する。
【０２２２】
今、検索装置１のデータソース格納部１１１、またはデータソース管理装置２のデータソース格納部１１１に、図１２に示す３つのデータソース（１２０１、１２０２、１２０３）を含む３以上のデータソースが格納されている、とする。なお、３つの各データソースは、ここでは、１つのファイルである、とする。
【０２２３】
そして、図１２のデータソースは、ヘッダー・レコード、ラベル・レコード、多数のレコードを有する。ラベル・レコード、および各レコードは、第一デリミタにより区切られている。また、第一デリミタは、ここでは、例えば、リターンコードである。
【０２２４】
ヘッダー・レコードは、ファイルのいわゆるヘッダーであり、１以上のソース属性値を有する。ソース属性値は、ここでは、ソース識別子、レポート番号、最終更新時情報である。ソース識別子は、図１２では、Ｆｉｌｅ  Ｎａｍｅであり、値は「Ｆｉｌｅ１」である。レポート番号は、当該データソースの出所を識別するための番号で、値は「Ａ１２３４５」である。最終更新時情報は、図１２では、Ｄａｔｅであり、値は「ＸＸＸＸ−ＸＸ−ＸＸ」である。
【０２２５】
ラベル・レコードは、例えば、ファイルの１行目である。なお、ヘッダー・レコードがファイルの１行目である場合は、ラベル・レコードは、ファイルの２行目である。ラベル・レコードは、項目ラベルの集合と、属性識別子の集合である。項目ラベルは、キー項目のラベルまたは明細項目のラベルである。キー項目は、レコードのキーとなる属性であり、ここでは「ＰＩＤ（パーソナルＩＤ）」である。「ＰＩＤ」は、ユーザを識別するＩＤである。明細項目は、「ＰＩＤ」に対応するユーザの属性値で、ここでは、明細項目は、「Ｎｏ．」「Ａｇｅ」を含む。「Ｎｏ．」は、レコードＩＤであり、その値は、図１２の１２０１の［１］［２］［３］等である。また、「Ｎｏ．」の下の（Ｐｏｓ．）は、各レコードのレコード位置情報（ここでは、データソース内のレコードの先頭のオフセット）である。「Ａｇｅ」は、ユーザの年齢である。属性識別子は、図１２では、「ＴｅｓｔＢ」「ＴｅｓｔＥ」「ＴｅｓｔＣ」等である。図１２では、属性識別子の下に属性順番情報が記載されている。属性順番情報は、属性識別子の下の［１］［２］［３］等である。
【０２２６】
図１２の各レコードは、キー項目値、明細項目値、属性値を有する。キー項目値は、キー項目の値であり、ここでは、各ユーザのＰＩＤ（例えば、２３６，０２９）である。なお、どの値をキー項目値とするかはインデックス生成のためのパラメータとして指定できることが好適であり、他の値（例えば、「Ａｇｅ」「ＰＩＤとＡｇｅの組」）でも良く、また２以上のキー項目値を持つことも可能である。明細項目値は、ここでは、例えば、「Ｎｏ．」の値、「Ａｇｅ」の値である。「Ｎｏ．」の値は、ここでは、［１］［２］等である。「Ｎｏ．」の値（［１］［２］［３］等）の下に存在する値（例えば、（１）（１２１）（２４１）等）は、各レコードのレコード位置情報である。
【０２２７】
レコード識別子［１］に対応するレコードの属性値は、０．１１、０．４、０．５７等である。また、図１２において、属性値（０．１１、０．４、０．５７等）の下には、各属性値の属性値位置情報（（５７）（６２）（７３）等）が表記されている。
【０２２８】
ここでのデータソースは、遺伝子・ゲノム情報の集合を含む、とする。また、一般的な遺伝子・ゲノム情報を取り扱うデータでは、遺伝子の塩基配列やタンパク質のアミノ酸配列などのデータが含むまれ、１レコードの長さが、例えば、数ＧＢになることもある。また、１レコードの中の属性値の数が膨大になり、データサイズは巨大になる場合が多い。また、遺伝子・ゲノム情報を取り扱うデータは、フラットファイル（一般的なテキストファイル）に比較的単純なレイアウトで保存・流通されているケースが多く、本具体例におけるデータソース（図１２参照）は、その例である。
【０２２９】
かかる状況で、以下の３つの具体例について説明する。具体例１は、インデックスの生成処理の例である。具体例２は、ソース・インデックスが最小キー項目値と最大キー項目値との組を有し、最小属性識別子と最大属性識別子との組を有さない場合における検索処理の例である。具体例３は、ソース・インデックスが最小キー項目値と最大キー項目値と最小属性識別子と最大属性識別子との組を有する場合における検索処理の例である。
【０２３０】
（具体例１）
検索装置１のインデックス生成部１３１が、各種のインデックスの生成処理の例について、図１３を用いて説明する。ここでは、キー項目は「ＰＩＤ」である、とする。
（１）ソース・インデックス生成処理
【０２３１】
ソース・インデックス生成部１３１５は、ファイル「データソース１３０１」にアクセスし、データソース１３０１のソース識別子（ここでは、ファイル名）「ｆｉｌｅ１」を取得する。また、ソース・インデックス生成部１３１５は、データソース１３０１をオープンする。次に、ソース・インデックス生成部１３１５は、データソース１３０１のＰＩＤの中の最小のＰＩＤである最小キー項目値「０２９」と最大のＰＩＤである最大キー項目値「４５１」とを取得する。なお、データソース１３０１において、ＰＩＤがソートされている場合は、ソース・インデックス生成部１３１５は、最初のＰＩＤと最後のＰＩＤとを取得する。ＰＩＤがソートされていない場合は、ソース・インデックス生成部１３１５は、シーケンシャルにＰＩＤを検査し、最小キー項目値と最大キー項目値とをデータソース１３０１から取得する。
【０２３２】
また、ソース・インデックス生成部１３１５は、データソース１３０１のラベル・レコードの属性値識別子の中の最小属性識別子「ＴｅｓｔＡ」と最大属性識別子「ＴｅｓｔＥ」とを取得する。なお、データソース１３０１において、属性識別子がソートされている場合は、ソース・インデックス生成部１３１５は、ラベル・レコードから、最初の属性識別子と最後の属性識別子とを取得する。属性識別子がソートされていない場合は、ソース・インデックス生成部１３１５は、シーケンシャルに属性識別子を検査し、最小属性識別子と最大属性識別子とをラベル・レコードから取得する。
【０２３３】
次に、ソース・インデックス生成部１３１５は、取得したソース識別子、最小キー項目値、最大キー項目値、最小属性識別子、および最大属性識別子から、ソース・インデックスレコード「ｆｉｌｅ１，０２９，４５１，ＴｅｓｔＡ，ＴｅｓｔＥ」を構成し、ソース・インデックス格納部１１２５に蓄積する。
【０２３４】
ソース・インデックス生成部１３１５は、他のデータソース（ファイル「ｆｉｌｅ２」「ｆｉｌｅ３」等）に対しても、同様に、ソース・インデックスレコードを構成し、ソース・インデックス格納部１１２５に蓄積する。
【０２３５】
以上の処理により、図１３の１３０２のソース・インデックスがソース・インデックス格納部１１２５に蓄積される。
（２）配列ラベル・インデックス生成処理
【０２３６】
配列ラベル・インデックス生成部１３１２は、ファイル「データソース１３０１」にアクセスし、データソース１３０１のソース識別子（ファイル名）「ｆｉｌｅ１」を取得する。また、ソース・インデックス生成部１３１５は、データソース１３０１をオープンする。
【０２３７】
次に、配列ラベル・インデックス生成部１３１２は、データソース１３０１のラベル・インデックス内に配置されている順に、属性識別子をその順番である属性順番情報と共に取得する。そして、属性識別子ごとに、属性識別子と属性順番情報との組である配列ラベル・インデックスレコードを構成する。
【０２３８】
次に、配列ラベル・インデックス生成部１３１２は、属性識別子をキーとして配列ラベル・インデックスレコードを、例えば、昇順にソートする。そして、配列ラベル・インデックス生成部１３１２は、ソートされた配列ラベル・インデックスレコードを、配列ラベル・インデックス格納部１１２２に蓄積する。
【０２３９】
配列ラベル・インデックス生成部１３１２は、他のデータソース（ファイル「ｆｉｌｅ２」「ｆｉｌｅ３」等）に対しても、同様に、配列ラベル・インデックスを構成し、配列ラベル・インデックス格納部１１２２に蓄積する。
【０２４０】
以上の処理により、図１３の１３０３の配列ラベル・インデックスが配列ラベル・インデックス格納部１１２２に蓄積される。
（３）配列インデックス生成処理
【０２４１】
配列インデックス生成部１３１１は、ファイル「データソース１３０１」にアクセスし、データソース１３０１のソース識別子（ファイル名）「ｆｉｌｅ１」を取得する。また、ソース・インデックス生成部１３１５は、データソース１３０１をオープンする。
【０２４２】
配列インデックス生成部１３１１は、例えば、１番目、４番目、７番目といった具合に、所定数（ここでは、３つ）飛ばしで、データソース１３０１の属性順番情報を取得する。また、配列インデックス生成部１３１１は、例えば、レコードごとに、第二デリミタを検出しながら、取得した各属性順番情報の順番の属性値まで、ファイルポインタを進め、例えば、その順番の属性値のレコード内でのオフセットである属性位置情報を取得する。次に、配列インデックス生成部１３１１は、データソース１３０１のレコードごとに、レコードのＰＩＤに対応付けて、属性順番情報が示す順番に、取得した属性位置情報を連結し、配列インデックスレコードを構成する。
【０２４３】
次に、配列インデックス生成部１３１１は、例えば、対応するＰＩＤをキーとして、配列インデックスレコードを、例えば、昇順にソートし、配列インデックスを構成し、配列インデックス格納部１１２１に蓄積する。
【０２４４】
また、配列インデックス生成部１３１１は、他のデータソース（ファイル「ｆｉｌｅ２」「ｆｉｌｅ３」等）に対しても、同様に、配列インデックスを構成し、配列インデックス格納部１１２１に蓄積する。
【０２４５】
以上の処理により、図１３の１３０４の配列インデックスが配列インデックス格納部１１２１に蓄積される。
（４）レコード・インデックス生成処理
【０２４６】
レコード・インデックス生成部１３１３は、ファイル「データソース１３０１」にアクセスし、データソース１３０１のソース識別子（ファイル名）「ｆｉｌｅ１」を取得する。また、ソース・インデックス生成部１３１５は、データソース１３０１をオープンする。
【０２４７】
レコード・インデックス生成部１３１３は、データソース１３０１におけるレコードごとに、キー項目値と、データソース１３０１内におけるレコードのオフセットであるレコード位置情報とを、データソース１３０１から取得し、レコード・インデックスレコードを構成する。
【０２４８】
そして、レコード・インデックス生成部１３１３は、キー項目値をキーとして、例えば、昇順に、キー項目値とレコード位置情報との組をソートする。次に、レコード・インデックス生成部１３１３は、レコード・インデックスにおける各レコード・インデックスレコードの位置情報（Ｐｏｓ．）を取得する。かかる位置情報（Ｐｏｓ．）は、レコード・インデックスレコード位置情報である。
【０２４９】
なお、ここで、レコード・インデックスレコード位置情報（Ｐｏｓ．）は、当該位置情報（Ｐｏｓ．）とキー項目値とレコード位置情報との組と配列インデックスレコードとを有するレコードの位置情報（Ｐｏｓ．）であることは好適である。つまり、レコード・インデックスレコードと配列インデックスレコードとは、データソースのレコードごとに、連絡されていることは好適である。
【０２５０】
次に、レコード・インデックス生成部１３１３は、データソース１３０１におけるレコードごとのレコード・インデックスレコードをレコード・インデックス格納部１１２３に蓄積する。
【０２５１】
また、レコード・インデックス生成部１３１３は、他のデータソース（ファイル「ｆｉｌｅ２」「ｆｉｌｅ３」等）に対しても、同様に、レコード・インデックスを構成し、レコード・インデックス格納部１１２３に蓄積する。
【０２５２】
以上の処理により、図１３の１３０５のレコード・インデックスがレコード・インデックス格納部１１２３に蓄積される。
（５）２次インデックス生成処理
【０２５３】
２次インデックス生成部１３１４は、レコード・インデックス格納部１１２３のレコード・インデックスを読み出す。
【０２５４】
次に、２次インデックス生成部１３１４は、例えば、１番目、４番目、７番目といった具合に、所定数（ここでは、３つ）飛ばしで、レコード・インデックスレコードに含まれるキー項目値（ここでは、ＰＩＤ）とレコード・インデックスレコード位置情報（Ｐｏｓ．）との組である２次インデックスレコードを取得する。
【０２５５】
次に、２次インデックス生成部１３１４は、取得した２次インデックスレコードを２次インデックス格納部１１２４に追記する。なお、２次インデックスにおいて、ＰＩＤをキーとして、２次インデックスレコードはソートされている。
【０２５６】
また、２次インデックス生成部１３１４は、他のデータソース（ファイル「ｆｉｌｅ２」「ｆｉｌｅ３」等）に対しても、同様に、２次インデックスを構成し、２次インデックス格納部１１２４に蓄積する。
【０２５７】
以上の処理により、図１３の１３０６の２次インデックスが２次インデックス格納部１１２４に蓄積される。
【０２５８】
（具体例２）
今、データソース管理装置２のデータソース格納部１１１、または検索装置１のデータソース格納部１１１に、図１４の１４０１のデータソースが格納されている、とする。
【０２５９】
かかる場合、ユーザは、端末装置３に、検索条件「Ｓｅｌｅｃｔ  ＰＩＤ，Ａｇｅ，Ｔｅｓｔ，ＴｅｓｔＶａｌｕｅ  ｆｒｏｍ  データソース  ｗｈｅｒｅ  ＰＩＤ＝１５５  ＡＮＤ  Ｔｅｓｔ＝ＴｅｓｔＣ」を入力した、とする。なお、「ＰＩＤ，Ａｇｅ，Ｔｅｓｔ，ＴｅｓｔＶａｌｕｅ」の「Ｔｅｓｔ」は属性値識別子であり、「ＴｅｓｔＶａｌｕｅ」は属性値である、とする。
【０２６０】
すると、端末装置３の端末受付部３２は、かかる検索条件を受け付ける。次に、端末処理部３３は、送信する検索条件を構成する。次に、端末送信部３４は、当該検索条件を検索装置１に送信する。
【０２６１】
次に、検索装置１の条件受付部１２１は、検索条件「Ｓｅｌｅｃｔ  ＰＩＤ，Ａｇｅ，Ｔｅｓｔ，ＴｅｓｔＶａｌｕｅ  ｆｒｏｍ  データソース  ｗｈｅｒｅ  ＰＩＤ＝１５５  ＡＮＤ  Ｔｅｓｔ＝ＴｅｓｔＣ」を受信する。
【０２６２】
次に、検索装置１の検索部１３２は、以下のように「ＰＩＤ＝１５５  ＡＮＤ  Ｔｅｓｔ＝ＴｅｓｔＣ」に合致するレコードの中の「ＰＩＤ」、「Ａｇｅ」、属性識別子「ＴｅｓｔＣ」、およびＴｅｓｔＣの属性値を取得する。
【０２６３】
つまり、まず、検索部１３２は、検索条件に含まれる「ＰＩＤ＝１５５」を取得する。また、検索部１３２は、検索条件に含まれる属性値識別子「ＴｅｓｔＣ」を取得する（図１４の１４０６）。
【０２６４】
次に、検索部１３２は、ソース・インデックス（１４０２）を参照し、取得した「ＰＩＤ＝１５５」を、Ｍｉｎ（最小キー項目値）とＭａｘ（最大キー項目値）の間に挟む、ソース・インデックスレコードを検知し、当該ソース・インデックスレコードが有するソース識別子「Ｆｉｌｅ１」を取得する。
【０２６５】
また、検索部１３２は、ソース識別子「Ｆｉｌｅ１」に対応する２次インデックス（１４０３）を参照し、「ＰＩＤ＝１５５」を間に挟むＰＩＤ「０２９」と「２３６」とを検知し、当該ＰＩＤ「０２９」と「２３６」と対になるレコード・インデックスレコード位置情報（１）と（１５１）とを、２次インデックス（１４０３）から取得する。
【０２６６】
次に、検索部１３２は、ソース識別子「Ｆｉｌｅ１」に対応するレコード・インデックス（１４０４）を参照し、レコード・インデックスレコード位置情報（１）と（１５１）の間を、例えば、「ＰＩＤ＝１５５」をキーとして二分探索し、「ＰＩＤ＝１５５」を含むレコード・インデックスレコードを検出する。そして、検索部１３２は、当該レコード・インデックスレコードから、「ＰＩＤ＝１５５」と対になるレコード位置情報（２４１）を取得する。なお、検索部１３２は、二分探索ではなく、シーケンシャルサーチして、「ＰＩＤ＝１５５」を含むレコード・インデックスレコードを検出しても良い。
【０２６７】
次に、検索部１３２は、取得したレコード位置情報（２４１）と、レコード・インデックスレコード位置情報（１０１）とを、図示しないバッファに一時蓄積する。
【０２６８】
次に、検索部１３２は、ソース識別子「Ｆｉｌｅ１」に対応する配列ラベル・インデックス（１４０５）を参照し、検索条件に含まれる属性識別子「ＴｅｓｔＣ」をキーとして、当該配列ラベル・インデックスを二分探索し、属性識別子「ＴｅｓｔＣ」を検知し、当該属性識別子「ＴｅｓｔＣ」と対になる属性順番情報（３）を取得する。なお、ここで、検索部１３２は、二分探索ではなく、シーケンシャルサーチして、属性順番情報（３）を取得しても良い。
【０２６９】
次に、検索部１３２は、ソース識別子「Ｆｉｌｅ１」に対応する配列インデックスを参照し、配列インデックスの中の、属性順番情報（３）を間に挟む、第一の属性順番情報（１）と第二の属性順番情報（４）とを取得する。
【０２７０】
次に、検索部１３２は、図示しないバッファのレコード・インデックスレコード位置情報（１０１）に対応し、第一の属性順番情報（１）に対応する属性値位置情報（５４）をレコード・インデックスから取得し、図示しないバッファに一時蓄積する。また、検索部１３２は、当該レコード・インデックスレコード位置情報（１０１）に対応し、第二の属性順番情報（４）に対応する属性値位置情報（８４）をレコード・インデックスから取得し、図示しないバッファに一時蓄積する。
【０２７１】
次に、検索部１３２は、ソース識別子「Ｆｉｌｅ１」で識別されるデータソースにアクセスし、当該ファイルをオープンする。
【０２７２】
次に、検索部１３２は、図示しないバッファから、レコード位置情報（２４１）と属性値位置情報（５４）と属性値位置情報（８４）とを取得し、当該レコード位置情報（２４１）が特定する位置のレコードの中の、属性値位置情報（５４）と属性値位置情報（８４）との間の属性値であり、属性順番情報（３）に対応する属性値「０．３８１」を、当該ファイルから取得する。また、検索部１３２は、レコード位置情報（２４１）が特定する位置のレコードの中の、Ａｇｅ「６２」を当該ファイルから取得する。
【０２７３】
そして、検索部１３２は、ＰＩＤ「１５５」、Ａｇｅ「６２」、属性値識別子「ＴｅｓｔＣ」、属性値「０．３８１」を有する検索結果を構成する。
【０２７４】
次に、結果出力部１４１は、構成された検索結果を、端末装置３に送信する。なお、かかる検索結果は、例えば、図１４の１４０７である。
【０２７５】
次に、端末装置３の端末受信部３５は、検索結果を受信する。次に、端末処理部３３は、受信された検索結果を用いて、出力する検索結果を構成する。次に、端末出力部３６は、当該検索結果を出力する。
【０２７６】
（具体例３）
今、データソース管理装置２のデータソース格納部１１１、または検索装置１のデータソース格納部１１１に、図１３の１３０１のデータソースが格納されている、とする。
【０２７７】
かかる場合、ユーザは、端末装置３に、検索条件「Ｓｅｌｅｃｔ  ＰＩＤ，Ａｇｅ，Ｔｅｓｔ，ＴｅｓｔＶａｌｕｅ  ｆｒｏｍ  データソース  ｗｈｅｒｅ  ＰＩＤ＝１５５  ＡＮＤ  Ｔｅｓｔ＝ＴｅｓｔＣ」を入力した、とする。
【０２７８】
すると、端末装置３の端末受付部３２は、かかる検索条件を受け付ける。次に、端末処理部３３は、送信する検索条件を構成する。次に、端末送信部３４は、当該検索条件を検索装置１に送信する。
【０２７９】
次に、検索装置１の条件受付部１２１は、検索条件「Ｓｅｌｅｃｔ  ＰＩＤ，Ａｇｅ，Ｔｅｓｔ，ＴｅｓｔＶａｌｕｅ  ｆｒｏｍ  データソース  ｗｈｅｒｅ  ＰＩＤ＝１５５  ＡＮＤ  Ｔｅｓｔ＝ＴｅｓｔＣ」を受信する。
【０２８０】
次に、検索装置１の検索部１３２は、以下のように「ＰＩＤ＝１５５  ＡＮＤ  Ｔｅｓｔ＝ＴｅｓｔＣ」に合致するレコードの中の「ＰＩＤ」、「Ａｇｅ」、属性識別子「ＴｅｓｔＣ」、およびＴｅｓｔＣの属性値を取得する。
【０２８１】
つまり、まず、検索部１３２は、検索条件に含まれる「ＰＩＤ＝１５５」を取得する。また、検索部１３２は、検索条件に含まれる属性値識別子「ＴｅｓｔＣ」を取得する。
【０２８２】
次に、検索部１３２は、ソース・インデックス（１３０２）を参照し、取得した「ＰＩＤ＝１５５」および「ＴｅｓｔＣ」に対応するソース識別子「Ｆｉｌｅ１」を取得する。
【０２８３】
その後、検索部１３２は、具体例２で説明した処理と同様の処理により、検索結果を得る。
【０２８４】
次に、結果出力部１４１は、構成された検索結果を、端末装置３に送信する。なお、かかる検索結果は、例えば、図１３の１３０７である。
【０２８５】
次に、検索条件の送信に応じて、端末受信部３５は、検索結果を受信する。次に、端末処理部３３は、受信された検索結果を用いて、出力する検索結果を構成する。次に、端末出力部３６は、当該検索結果を出力する。
【０２８６】
以上、本実施の形態によれば、大きいデータサイズのデータソースから、所望の属性値を高速に検索できる。
【０２８７】
また、本実施の形態によれば、特に、１レコードの長さが非常に長いデータソースに対して、所望の属性値を高速に検索できる。
【０２８８】
また、本実施の形態によれば、情報検索を高速に行うためのインデックスを自動生成できる。
【０２８９】
また、本実施の形態によれば、特に、１レコードの長さが非常に長いデータソースに対して、情報検索を高速に行うためのインデックスを自動生成できる。
【０２９０】
さらに、本実施の形態によれば、最新の状態のインデックスを保持できる。
【０２９１】
さらに、本実施の形態における処理は、ソフトウェアで実現しても良い。そして、このソフトウェアをソフトウェアダウンロード等により配布しても良い。また、このソフトウェアをＣＤ−ＲＯＭなどの記録媒体に記録して流布しても良い。なお、このことは、本明細書における他の実施の形態においても該当する。なお、本実施の形態における検索装置１を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、キー項目値と２以上の属性値とを有する２以上のレコードを含むデータソースが格納されるデータソース格納部と、２以上のレコードのうちの１以上の各レコードごと、および各レコードの１以上の各属性ごとに、属性値が存在する位置を特定する属性位置情報を有する配列インデックスが格納される配列インデックス格納部とにアクセス可能なコンピュータを、属性識別子を含む検索条件を受け付ける条件受付部と、前記検索条件が有する属性識別子に対応する属性位置情報を、前記配列インデックスから取得し、当該属性位置情報を用いて、前記検索条件が有する前記属性識別子に対応する属性値を、前記データソースから取得する検索部と、前記検索部が取得した前記属性値を含む検索結果を出力する結果出力部として機能させるためのプログラムである。
【０２９２】
（実施の形態２）
本実施の形態において、３層のスキーマ構造を有するデータ辞書を用いて、２以上のデータソースから情報を取得し、当該情報を統合して、出力する検索装置を具備する検索システムについて説明する。
【０２９３】
図１５は、本実施の形態における検索システムＢの概念図である。検索システムＢは、検索装置４、１または２以上のデータソース管理装置２、および１または２以上の端末装置３を備える。
【０２９４】
検索装置４は、データソースから情報を検索する装置である。検索装置４は、例えば、いわゆるサーバであり、例えば、クラウドサーバ、ＡＳＰサーバ等である。なお、検索装置４の種類は問わない。
【０２９５】
なお、１または２以上の各データソース管理装置２は、通常、検索装置４とは異なる装置である。
【０２９６】
さらに、検索装置４と１以上のデータソース管理装置２とは、インターネットやＬＡＮ等のネットワークにより、通信可能である。また、検索装置４と端末装置３とは、インターネットやＬＡＮ等のネットワークにより、通信可能である。
【０２９７】
図１６は、本実施の形態における検索システムＢのブロック図である。図１７は、検索装置４のブロック図である。
【０２９８】
検索装置４は、格納部４１、受付部１２、処理部４３、および出力部４４を備える。格納部４１は、インデックス格納部１１２、および辞書格納部４１１を備える。処理部４３は、インデックス生成部１３１、検索部４３２、およびインデックス更新部１３３を備える。検索部４３２は、ソース決定手段４３２１、命令生成手段４３２２、ソース検索手段４３２３、および統合手段４３２４を備える。出力部４４は、結果出力部４４１を備える。
【０２９９】
データソース管理装置２を構成するデータソース格納部１１１のデータソースは、１または２以上のテーブルを有する。データソースは、１ファイルでも良いが、２以上のファイルから構成されていても良い。テーブルは、１ファイルでも良いが、一ファイルの中に複数のテーブルが存在しても良い。データソースやテーブルの構造は種々あり得、問わない。
【０３００】
また、データソースは、例えば、リレーショナルデータベース、オブジェクト指向データベース、ＸＭＬデータベース、ＮｏＳＱＬデータベース、ファイル・データソース、データウェアハウス、データマート、ディレクトリ管理システム、リアルタイム測定データ、オンライン・データサービス、ストリーミング・データサービスのうちのいずれかであり、その種類は問わない。
【０３０１】
検索装置４を構成する格納部４１には、各種の情報が格納される。各種の情報は、例えば、上述した１以上の種類のインデックス、後述するデータ辞書の各種の情報である。
【０３０２】
辞書格納部４１１には、データ辞書が格納される。データ辞書は、ユーザが入力する検索条件を用いて、２以上のデータソースから情報を取得し、当該情報を統合するための情報の集合である。データ辞書は、ソース層定義情報、ユーザ層定義情報、変換ルール定義情報を有する。つまり、データ辞書は、３層の情報を有する。
【０３０３】
ソース層定義情報は、データソースのスキーマを定義する情報である。ソース層定義情報は、例えば、ソース識別子と１以上のソース属性定義情報とを有する。ソース層定義情報は、例えば、ソース識別子とテーブル識別子と１以上のソース属性定義情報とを有する。
【０３０４】
ソース属性定義情報は、データソースにおけるテーブルの属性を定義する情報である。ソース属性定義情報は、ソース属性識別子を有する。ソース属性識別子は、データソースにおけるテーブルの属性を識別する情報であり、例えば、属性名、ＩＤである。ソース属性定義情報は、データソースにおけるテーブルの属性の１以上の属性値を有しても良い。属性の１以上の属性値は、例えば、データタイプ、サイズである。
【０３０５】
ソース層定義情報は、テーブルに対応する情報である。データソースに一つのテーブルのみが存在する場合、ソース層定義情報は、データソースに対応する情報である。
【０３０６】
ソース層定義情報は、データソース固有情報を有することは好適である。データソース固有情報は、各データソースに固有の情報である。データソース固有情報は、例えば、命令元情報、接続情報を有する。
【０３０７】
命令元情報は、データソースに対する検索命令を生成するための情報である。命令元情報は、検索命令を構成するための情報である。２以上の各データソースに対応する命令元情報は、異なる種類であることは好適である。また、２種類以上の異なる各命令元情報は、例えば、ＳＱＬ文の検索命令を生成するための情報、検索モジュールを生成するための情報、検索先のＵＲＬを含む構文を示すＵＲＬ構文を含むことは好適である。
【０３０８】
命令元情報は、例えば、データソースに対して発行するＳＱＬ文を構成するための情報である。命令元情報は、例えば、データソースに対してアクセスする際に使用するモジュールのＡＰＩを特定する情報である。命令元情報は、例えば、ＵＲＬ構文であり、例えば、ＵＲＬとエンドポイント（テーブル識別子）とを有する文字列である。
【０３０９】
接続情報は、データソースにアクセスするための情報である。接続情報は、例えば、ＩＰアドレス、ＵＲＬを含む。接続情報は、例えば、データソースにログインするためのログイン情報を含む。ログイン情報は、例えば、ユーザ識別子、パスワードを含む。接続情報は、例えば、データソースのドライバー識別情報、ＡＰＩキーを含む。
【０３１０】
ユーザ層定義情報は、ユーザテーブルのスキーマを定義する情報である。ユーザテーブルは、ユーザが入力する検索条件に基づく検索の対象である。ユーザテーブルは、通常、ビューであり、当該ビューは、１以上のレコードを含む。また、かかるレコードは、１以上の属性値を有する。レコードは、１以上のキー項目値を有することは好適である。
【０３１１】
ユーザ層定義情報は、例えば、ユーザテーブル識別子と１以上のユーザ属性定義情報とを有する。ユーザテーブル識別子は、ユーザテーブルを識別する情報であり、例えば、テーブル名、ＩＤである。ユーザ属性定義情報は、ユーザテーブルの属性を定義する情報である。ユーザ属性定義情報は、ユーザ属性識別子を含む。ユーザ属性識別子は、ユーザテーブルの属性を識別する情報である。ユーザ属性識別子は、例えば、属性名、属性のＩＤである。
【０３１２】
ユーザ属性定義情報は、通常、ユーザ属性値元情報を有する。ユーザ属性値元情報は、ユーザ属性値の取得方法を特定する情報である。ユーザ属性値元情報は、１以上の変換ビューの１以上のビュー属性値を用いた情報である。ユーザ属性値元情報は、例えば、ビュー識別子とビュー属性識別子とを有する。ユーザ属性値元情報は、例えば、ユーザテーブル識別子とユーザ属性識別子とを有しても良い。
【０３１３】
ユーザ属性値元情報は、演算式等を有しても良い。演算式等とは、演算式またはプログラム識別子である。ユーザ属性値元情報が演算式等を有する場合、ユーザ属性値元情報は、１以上のいずれかの変換ビューのビュー識別子または２以上のいずれかのデータソースのソース識別子のうちの１または２以上の識別子と、当該１または２以上の各識別子と対になる属性識別子を有する。なお、１以上の各識別子と対になる属性識別子は、１以上のいずれかの変換ビューのビュー属性識別子または２以上のいずれかのデータソースのソース属性識別子のうちの１以上の属性識別子である。そして、演算式またはプログラム識別子は、１以上の属性識別子に対応する１以上の属性値をパラメータとして受け付け、実行される、演算式またはプログラムの識別子である。プログラム識別子は、例えば、モジュール名、関数名、メソッド名である。
【０３１４】
変換ルール定義情報は、検索部４３２が、受け付けられた検索条件に基づいて、２以上の各データソースに対して発行する検索命令を生成し、当該検索命令に対応する検索結果を取得し、当該検索条件に対応する統合データを作成するための情報である。
【０３１５】
変換ルール定義情報は、１以上の変換ビュー情報を有する。変換ビュー情報は、２以上のデータソースのうちの１以上のデータソースを用いて構成される変換ビューを定義する情報である。なお、変換ビューとは、ユーザテーブルと１以上のデータソースとの対応関係を表すビューである。変換ビューは、１以上のビュー属性値を有する１以上のレコードを含み得る。１以上のビュー属性値は、キー項目値を含むことは好適である。変換ビューは、通常、ユーザの直接的な検索対象にはならない情報である。また、一の変換ビュー情報は、通常、一のデータソースに対応する。
【０３１６】
変換ビュー情報は、１以上のビュー属性定義情報を有する。変換ビュー情報は、通常、ビュー識別子を有する。ビュー属性定義情報は、変換ビューの属性を定義する情報である。ビュー属性定義情報は、ビュー属性識別子とビュー属性定義情報とを有する。ビュー属性識別子は、変換ビューの属性を識別する情報である。ビュー属性識別子は、例えば、変換ビューの属性名、変換ビューの属性のＩＤである。
【０３１７】
ビュー属性値元情報は、ビュー属性値の取得方法を特定する情報である。ビュー属性値元情報は、例えば、ビュー属性値の取得元のデータソースのソース識別子とソース属性識別子とを有する。
【０３１８】
ビュー属性値元情報は、２以上のいずれかのデータソースのソース属性識別子または１以上のいずれかの変換ビューのビュー属性識別子のうちの１以上の属性識別子と、当該１以上の属性識別子に対応する属性値をパラメータとする演算式等とを有する。演算式等とは、演算式またはプログラム識別子である。プログラム識別子は、０あるいは１以上の属性値をパラメータとして実行可能であり、ビュー属性値を取得するプログラムの識別情報である。なお、与える属性値が０であるプログラムは、例えば、本日の日付を取得する「ＴＯＤＡＹ（）」、現在時刻を取得する「ＴＩＭＥ（）」である。
【０３１９】
変換ルール定義情報は、結合方式識別子を有しても良い。結合方式識別子は、２以上の変換ビュー情報に基づいて取得された２以上の検索結果を結合する方式を特定する情報である。結合方式識別子は、例えば、「ＵＮＩＯＮ」「ＣＨＯＩＣＥ」「ＬＯＯＫＵＰ」である。変換ルール定義情報が含み得る２以上の結合方式識別子は、「ＵＮＩＯＮ」「ＣＨＯＩＣＥ」「ＬＯＯＫＵＰ」のうちの２以上であることは好適である。また、変換ルール定義情報が含み得る結合方式識別子は、「ＵＮＩＯＮ」「ＣＨＯＩＣＥ」「ＬＯＯＫＵＰ」を含む３以上であることは好適である。
【０３２０】
「ＵＮＩＯＮ」は、併合処理を特定する情報である。併合処理は、２以上の検索結果に対して、１または２以上のキー項目でグループ化し、１または２以上の各非キー項目の２以上の属性値を集約することにより、一のレコードを構成する処理である。
【０３２１】
なお、２以上の属性値を集約することは、２以上の属性値に対して、所定の演算を行い、一つの値を取得することである。所定の演算とは、例えば、合計値の算出（ＳＵＭ）、平均値の算出（Ａｖｅｒａｇｅ）、最大値の取得（ＭＡＸ）、最小値の取得（ＭＩＮ）、中央値の取得（ＭＥＤＩＡＮ）、標準偏差の算出等である。
【０３２２】
「ＣＨＯＩＣＥ」は、選択処理を特定する情報である。選択処理は、優先順位に従い、２以上の検索結果の中から１以上の検索結果を選択し、かつ１または２以上の各非キー項目の２以上の属性値を集約して、一のレコードを構成する処理である。なお、優先順位とは、２以上の変換ビューまたは２以上のデータソースからの検索結果に対する優先順位であり、例えば、格納部４１に格納されている。変換ルール定義情報は、優先順位を含んでも良い。
【０３２３】
「ＬＯＯＫＵＰ」は、補完処理を特定する情報である。補完処理は、参照条件に従い参照する一の検索結果と、参照される他の検索結果とを特定し、２以上の検索結果のうちの参照する一の検索結果のキー項目の属性値に、参照される他の検索結果に含まれるキー項目の属性値であり、一の検索結果に含まれないキー項目の属性値を付加し、かつ１または２以上の各非キー項目の２以上の属性値を集約して、一のレコードを構成する処理である。なお、参照条件とは、検索結果から取得する１以上の各属性値を特定する情報であり、例えば、１以上の属性識別子である。
【０３２４】
処理部４３は、各種の処理を行う。各種の処理は、例えば、インデックス生成部１３１、検索部４３２、インデックス更新部１３３が行う処理である。
【０３２５】
検索部４３２は、辞書格納部４１１を参照して、受付部１２が受け付けた検索条件に対応する２以上のデータソースを決定する。なお、２以上のデータソースを決定することは、２以上のソース識別子を取得することである。また、２以上のデータソースの決定は、まとめて行われる必要はない。
【０３２６】
そして、検索部４３２は、変換ルール定義情報を用いて、決定した２以上の各データソースごとに、検索命令を生成し、当該検索命令に基づいた検索結果を取得する。そして、検索部４３２は、変換ルール定義情報とユーザ層定義情報とを用いて、取得した２以上の各データソースに対応する検索結果を統合し、検索条件に対応する統合データを取得する。
【０３２７】
検索部４３２は、例えば、ビュー属性値元情報に対応するビュー属性値を取得する場合に、ビュー属性値元情報が有する１または２以上の各属性識別子に対応する属性値をデータソースまたは変換ビューから取得する。次に、検索部４３２は、当該取得した１または２以上の属性値を演算式またはプログラム識別子で識別されるプログラムに与えて、当該演算式またはプログラムを実行し、ビュー属性値を取得する。ビュー属性値元情報が有する１以上の各属性識別子は、ソース属性識別子またはビュー属性識別子である。また、ビュー属性値元情報が有する１以上の各属性識別子に対応する属性値は、ソース属性値またはビュー属性値である。
【０３２８】
検索部４３２は、例えば、ユーザ属性値元情報に対応するユーザ属性値を取得する場合に、ユーザ属性値元情報が有する１または２以上の各属性識別子に対応する属性値をデータソースまたは変換ビューから取得する。次に、検索部４３２は、当該取得した１以上の属性値を演算式またはプログラム識別子で識別されるプログラムに与えて、演算式またはプログラムを実行し、ユーザ属性値を取得する。なお、ユーザ属性値元情報が有する１以上の各属性識別子は、ソース属性識別子またはビュー属性識別子である。また、ユーザ属性値元情報が有する１以上の各属性識別子に対応する属性値は、ソース属性値またはビュー属性値である。
【０３２９】
検索部４３２は、例えば、２以上の各データソースに対する命令元情報に従って、２以上の各データソースから情報を取得するための検索命令を生成する。次に、検索部４３２は、２以上の各データソースに対する検索命令に基づいた検索結果を、対応するデータソースから取得する。次に、検索部４３２は、変換ルール定義情報とユーザ層定義情報とを用いて、２以上の各データソースに対応する検索結果を統合し、検索条件に対応する統合データを取得する。
【０３３０】
検索部４３２は、例えば、２以上の各データソースに対する命令元情報に従って、ＳＱＬ文に対応するデータソースに対しては、命令元情報に従ったＳＱＬ文である検索命令を生成する。また、検索部４３２は、例えば、検索モジュールに対応するデータソースに対しては、命令元情報に従った検索モジュールのインターフェイスである検索命令を生成する。そして、検索部４３２は、２以上の各データソースごとに、各検索命令に基づいた検索結果を取得する。次に、検索部４３２は、変換ルール定義情報とユーザ層定義情報とを用いて、２以上の各データソースに対応する検索結果を統合し、検索条件に対応する統合データを取得する。
【０３３１】
検索部４３２は、例えば、２以上の各データソースに対する接続情報を用いて、接続情報に対応するデータソースにアクセスし、検索命令に基づいた検索結果をデータソースから取得する。次に、検索部４３２は、変換ルール定義情報とユーザ層定義情報とを用いて、２以上の各データソースに対応する検索結果を統合し、検索条件に対応する統合データを取得する。
【０３３２】
検索部４３２は、例えば、変換ルール定義情報が有する結合方式識別子を取得し、当該結合方式識別子により特定される結合方式に従って、２以上の検索結果を結合し、統合データを取得する。
【０３３３】
検索部４３２は、検索条件が有する属性識別子に対応する属性位置情報を、配列インデックスから取得し、属性位置情報を用いて、検索条件が有する属性識別子に対応する属性値をデータソースから取得し、属性値を有する統合データを構成する。なお、検索対象のデータソースが実施の形態１で説明した構造を有するデータソースである場合、検索部４３２が当該データソースから情報を取得する場合、検索部４３２は、検索部１３２と同じ動作をする。つまり、検索部４３２は、インデックス格納部１１２の１種類以上のインデックス情報を用いて、当該データソースから情報を取得する。かかる検索部４３２の検索処理は、実施の形態１における検索部１３２の処理として説明したので、ここでの説明は省略する。
【０３３４】
ソース決定手段４３２１は、検索条件に含まれる１以上のユーザ属性識別子を取得し、当該１以上の各ユーザ属性識別子に対応するユーザ属性値元情報を取得する。次に、ソース決定手段４３２１は、当該１以上の各ユーザ属性値元情報に対応する１以上のビュー属性識別子を取得する。次に、ソース決定手段４３２１は、当該１以上の各ビュー属性識別子に対応するソース識別子をビュー属性定義情報から取得する。なお、ソース決定手段４３２１は、取得したソース識別子に対してユニーク処理を行い、１または２以上のユニークなソース識別子を取得することは好適である。
【０３３５】
命令生成手段４３２２は、検索条件とビュー属性値元情報とを用いて、ソース決定手段４３２１が取得した２以上の各ソース識別子で識別されるデータソースごとに検索命令を生成する。
【０３３６】
命令生成手段４３２２は、２以上の各データソースに対する命令元情報に従って、データソースごとに検索命令を生成する。
【０３３７】
命令元情報が、ＳＱＬ文の構文情報を含む場合、命令生成手段４３２２は、検索条件に基づいて、当該ＳＱＬ文の構文情報に従ったＳＱＬ文を生成する。
【０３３８】
命令元情報が、検索モジュールのインターフェイスの構文情報を含む場合、命令生成手段４３２２は、検索条件に基づいて、当該検索モジュールのインターフェイスの構文情報に従った検索モジュールを実行するための文字列である検索命令を生成する。
【０３３９】
命令元情報が、ＵＲＬ構文である場合、命令生成手段４３２２は、検索条件に基づいて、
ＵＲＬ構文が有するＵＲＬとエンドポイント（テーブル識別子）に加えて、検索条件が有する条件部とを有する文字列である検索命令を生成する。
【０３４０】
ソース検索手段４３２３は、２以上の各データソースごとに、命令生成手段４３２２が取得した検索命令に基づいた検索結果を取得する。ソース検索手段４３２３は、例えば、２以上の各検索命令を実行し、対応するデータソースから検索結果を取得する。
【０３４１】
統合手段４３２４は、検索条件およびユーザ層定義情報を用いて、ソース検索手段４３２３が取得した２以上の各データソースごとの検索結果を統合した統合データを取得する。
【０３４２】
統合手段４３２４は、例えば、辞書格納部４１１に格納されている変換ルール定義情報が有する結合方式識別子により特定される結合方式に従って、２以上の検索結果を結合し、統合データを取得する。  
【０３４３】
結合方式識別子が「ＵＮＩＯＮ」である場合、統合手段４３２４は、優先順位に従い、２以上の検索結果の中から１以上の検索結果を選択し、かつ１または２以上の各非キー項目の２以上の属性値を集約して、一のレコードを構成する併合処理を行う。
【０３４４】
結合方式識別子が「ＣＨＯＩＣＥ」である場合、統合手段４３２４は、優先順位に従い、２以上の検索結果の中から１以上の検索結果に含まれるキー項目の属性値を選択し、かつ非キー項目の２以上の属性値を集約して、一のレコードを構成する選択処理を行う。なお、優先順位は、２以上の変換ビューまたは２以上のデータソースの中から優先する１以上の変換ビューまたは１以上のデータソースを特定する情報である。また、優先順位は、格納部４１に格納されている。
【０３４５】
結合方式識別子が「ＬＯＯＫＵＰ」である場合、統合手段４３２４は、参照条件に従い、参照する一の検索結果と、参照される他の検索結果とを特定し、２以上の検索結果のうちの参照する一の検索結果のキー項目の属性値に、参照される他の検索結果に含まれるキー項目の属性値であり、一の検索結果に含まれないキー項目の属性値を付加し、かつ１または２以上の各非キー項目の２以上の属性値を集約して、一のレコードを構成する補完処理を行う。なお、参照条件とは、参照する一の検索結果と、参照される他の検索結果とを特定する情報である。参照条件は、例えば、「＜参照ビュー識別子＞識別子１  ＜非参照ビュー識別子＞識別子２」である。また、参照条件は、格納部４１に格納されている。
【０３４６】
出力部４４は、各種の情報を出力する。各種の情報とは、例えば、統合データである。また、ここでの出力とは、通常、端末装置３への送信であるが、ディスプレイへの表示、プロジェクターを用いた投影、プリンタでの印字、音出力、記録媒体への蓄積、他の処理装置や他のプログラムなどへの処理結果の引渡しなどを含む概念であっても良い。
【０３４７】
結果出力部４４１は、検索部４３２が取得した統合データを出力する。
【０３４８】
次に、検索システムＢを構成する検索装置４の動作例について、図１８のフローチャートを用いて説明する。ここで、検索装置４の処理のうち、インデックスを生成する処理は、実施の形態１で説明したので、ここでの説明は省略する。ここでは、検索装置４が行う検索処理について説明する。
【０３４９】
（ステップＳ１８０１）条件受付部１２１は、検索条件を受け付けたか否かを判断する。検索条件を受け付けた場合はステップＳ１８０２に行き、検索条件を受け付けなかった場合はステップＳ１８０１に戻る。
【０３５０】
（ステップＳ１８０２）ソース決定手段４３２１は、ステップＳ１８０１で受け付けられた検索条件に含まれるユーザテーブル識別子を取得する。このユーザテーブル識別子は、検索対象のユーザテーブルの識別子である。
【０３５１】
（ステップＳ１８０３）ソース決定手段４３２１は、ステップＳ１８０１で受け付けられた検索条件に含まれる１以上のユーザ属性識別子を取得する。
【０３５２】
なお、かかるユーザ属性識別子は、検索条件の中の条件部、抽出部、その他部等のうちのいずれの箇所に存在していても良い。条件部とは、検索条件の中の条件を記載した箇所である。抽出部とは、検索条件の中の、統合データを構成する属性値を記載した箇所である。その他部は、条件部、抽出部以外の箇所である。
【０３５３】
検索条件が「ＳＥＬＥＣＴ  商品ＩＤ，  商品名，  ＳＵＭ（販売数量），  ＳＵＭ（販売金額），  ＳＵＭ（仕入金額），  ＳＵＭ（売上利益）  ＦＲＯＭ  商品別売上利益  ＷＨＥＲＥ  商品ＩＤ＝１１０３  ＧＲＯＵＰ  ＢＹ  商品ＩＤ，  商品名」である場合、条件部は「商品ＩＤ＝１１０３」、抽出部は「商品ＩＤ，  商品名，  ＳＵＭ（販売数量），  ＳＵＭ（販売金額），  ＳＵＭ（仕入金額），  ＳＵＭ（売上利益）」、その他部は「ＧＲＯＵＰ  ＢＹ」句の「商品ＩＤ，  商品名」である。
【０３５４】
（ステップＳ１８０４）ソース決定手段４３２１は、カウンタｉに１を代入する。
【０３５５】
（ステップＳ１８０５）ソース決定手段４３２１は、ステップＳ１８０３で取得したユーザ属性識別子の中で、ｉ番目のユーザ属性識別子が存在するか否かを判断する。ｉ番目のユーザ属性識別子が存在する場合はステップＳ１８０６に行き、ｉ番目のユーザ属性識別子が存在しない場合はステップＳ１８０８に行く。
【０３５６】
（ステップＳ１８０６）ソース決定手段４３２１は、ｉ番目のユーザ属性識別子と対になるユーザ属性値元情報を、ソース層定義情報から取得する。
【０３５７】
（ステップＳ１８０７）ソース決定手段４３２１は、カウンタｉを１、インクリメントする。ステップＳ１８０５に戻る。
【０３５８】
（ステップＳ１８０８）ソース決定手段４３２１は、ステップＳ１８０６で取得したすべてのユーザ属性値元情報からビュー識別子を取得する。なお、１以上のユーザ属性値元情報は、ビュー識別子ではなく、ユーザテーブル識別子を有しても良い。
【０３５９】
（ステップＳ１８０９）ソース決定手段４３２１は、ステップＳ１８０８で取得したビュー識別子に対して、ユニーク処理をし、統合データの取得に必要な１以上の各変換ビューのビュー識別子を取得する。
【０３６０】
（ステップＳ１８１０）ソース決定手段４３２１は、カウンタｊに１を代入する。
【０３６１】
（ステップＳ１８１１）ソース決定手段４３２１は、ステップＳ１８０９で取得したビュー識別子の中で、ｊ番目のビュー識別子が存在するか否かを判断する。ｊ番目のビュー識別子が存在する場合はステップＳ１８１２に行き、ｊ番目のビュー識別子が存在しない場合はステップＳ１８１９に行く。
【０３６２】
（ステップＳ１８１２）ソース決定手段４３２１は、カウンタｋに１を代入する。
【０３６３】
（ステップＳ１８１３）ソース決定手段４３２１は、ステップＳ１８０６で取得したユーザ属性値元情報の中に、ｊ番目のビュー識別子と対になるｋ番目のビュー属性識別子が存在するか否かを判断する。ｋ番目のビュー属性識別子が存在する場合はステップＳ１８１４に行き、ｋ番目のビュー属性識別子が存在しない場合はステップＳ１８１８に行く。なお、ここでのｋ番目のビュー属性識別子は、ユニークなビュー属性識別子である。つまり、同じビュー属性識別子は、本ステップでは取得されない。また、ｋ番目のビュー属性識別子は、ユーザ属性識別子でも良い。
【０３６４】
（ステップＳ１８１４）ソース決定手段４３２１は、ステップＳ１８０６で取得したユーザ属性値元情報の中から、ｊ番目のビュー識別子と対になるｋ番目のビュー属性識別子を取得する。次に、ソース決定手段４３２１は、当該ｋ番目のビュー属性識別子と対になるｋ番目のビュー属性値元情報を、変換ルール定義情報の中のｊ番目のビュー識別子と対になる変換ビュー情報から取得する。
【０３６５】
なお、ｋ番目のビュー属性識別子は、ユーザ属性識別子でも良い。ユーザ属性識別子である場合、ソース決定手段４３２１は、当該ユーザ属性識別子と対になるユーザ属性値元情報を取得し、当該ユーザ属性値元情報に含まれるビュー識別子とビュー属性識別子と対になるビュー属性値元情報を取得する。
【０３６６】
（ステップＳ１８１５）ソース決定手段４３２１は、カウンタｋを１、インクリメントする。ステップＳ１８１３に戻る。
【０３６７】
（ステップＳ１８１６）ソース決定手段４３２１は、ステップＳ１８１４で取得した１以上のビュー属性値元情報を用いて、ｊ番目のビュー識別子に対応する検索命令を生成する。かかる命令生成処理の例について、図１９のフローチャートを用いて説明する。
【０３６８】
（ステップＳ１８１７）ソース検索手段４３２３は、ステップＳ１８１６で生成された検索命令を用いて、ｊ番目のビュー識別子に対応するデータソースから、検索結果を取得する。
【０３６９】
（ステップＳ１８１８）ソース決定手段４３２１は、カウンタｊを１、インクリメントする。ステップＳ１８１１に戻る。
【０３７０】
（ステップＳ１８１９）統合手段４３２４は、ステップＳ１８１７で取得された検索結果を統合し、統合データを取得する。なお、かかる統合処理の例について、図２０のフローチャートを用いて説明する。
【０３７１】
（ステップＳ１８２０）結果出力部４４１は、ステップＳ１８１９で取得された統合データを出力する。ステップＳ１８０１に戻る。
【０３７２】
なお、図１８のフローチャートにおいて、電源オフや処理終了の割り込みにより処理は終了する。
【０３７３】
次に、ステップＳ１８１６の命令生成処理の例について、図１９のフローチャートを用いて説明する。
【０３７４】
（ステップＳ１９０１）命令生成手段４３２２は、Ｓ１８１１のｊ番目のビュー識別子に対応するデータソースのソース層定義情報のデータソース固有情報から、命令元情報を取得する。
【０３７５】
（ステップＳ１９０２）命令生成手段４３２２は、受け付けられた検索条件を解析し、当該検索条件の条件部、抽出部、およびその他部の情報を取得する。
【０３７６】
なお、検索条件を解析する処理は、例えば、ＳＱＬ文の処理ソフトウェア等の公知技術により、実現可能である。
【０３７７】
（ステップＳ１９０３）命令生成手段４３２２は、カウンタｉに１を代入する。
【０３７８】
（ステップＳ１９０４）命令生成手段４３２２は、ステップＳ１９０２で取得した条件部に対応するｉ番目のビュー属性値元情報が存在するか否かを判断する。条件部に対応するｉ番目のビュー属性値元情報が存在する場合はステップＳ１９０５に行き、存在しない場合はステップＳ１９０７に行く。
【０３７９】
（ステップＳ１９０５）命令生成手段４３２２は、ステップＳ１９０２で取得した条件部に対応するｉ番目のビュー属性値元情報が有するソース属性識別子を取得する。
【０３８０】
（ステップＳ１９０６）命令生成手段４３２２は、カウンタｉを１、インクリメントする。ステップＳ１９０４に戻る。
【０３８１】
（ステップＳ１９０７）命令生成手段４３２２は、ステップＳ１９０５で取得した１以上のソース属性識別子と、受け付けられた検索条件の中の条件部とを用いて、ステップＳ１９０１で取得した命令元情報に従って、検索命令の条件部の情報を取得する。
【０３８２】
（ステップＳ１９０８）命令生成手段４３２２は、カウンタｊに１を代入する。
【０３８３】
（ステップＳ１９０９）命令生成手段４３２２は、ステップＳ１９０２で取得した抽出部に対応するｊ番目のビュー属性値元情報が存在するか否かを判断する。抽出部に対応するｊ番目のビュー属性値元情報が存在する場合はステップＳ１９１０に行き、存在しない場合はステップＳ１９１２に行く。
【０３８４】
（ステップＳ１９１０）命令生成手段４３２２は、ステップＳ１９０２で取得した抽出部に対応するｊ番目のビュー属性値元情報が有するソース属性識別子を取得する。
【０３８５】
（ステップＳ１９１１）命令生成手段４３２２は、カウンタｊを１、インクリメントする。ステップＳ１９０９に戻る。
【０３８６】
（ステップＳ１９１２）命令生成手段４３２２は、ステップＳ１９１０で取得した１以上のソース属性識別子と、受け付けられた検索条件の中の抽出部とを用いて、ステップＳ１９０１で取得した命令元情報に従って、検索命令の抽出部の情報を取得する。
【０３８７】
（ステップＳ１９１３）命令生成手段４３２２は、カウンタｋに１を代入する。
【０３８８】
（ステップＳ１９１４）命令生成手段４３２２は、ステップＳ１９０２で取得したその他部に対応するｋ番目のビュー属性値元情報が存在するか否かを判断する。その他部に対応するｋ番目のビュー属性値元情報が存在する場合はステップＳ１９１５に行き、存在しない場合はステップＳ１９１７に行く。
【０３８９】
（ステップＳ１９１５）命令生成手段４３２２は、ステップＳ１９０２で取得したその他部に対応するｋ番目のビュー属性値元情報が有するソース属性識別子を取得する。
【０３９０】
（ステップＳ１９１６）命令生成手段４３２２は、カウンタｋを１、インクリメントする。ステップＳ１９１４に戻る。
【０３９１】
（ステップＳ１９１７）命令生成手段４３２２は、ステップＳ１９１５で取得した１以上のソース属性識別子と、受け付けられた検索条件の中のその他部とを用いて、ステップＳ１９０１で取得した命令元情報に従って、検索命令のその他部の情報を取得する。なお、ここで、その他部の情報を取得しない場合がある。
【０３９２】
（ステップＳ１９１８）命令生成手段４３２２は、ステップＳ１９０７で取得した条件部の情報、ステップＳ１９１２で取得した抽出部の情報、ステップＳ１９１７で取得したその他部の情報を用いて、ステップＳ１９０１で取得した命令元情報に基づいて、検索命令を構成する。上位処理にリターンする。
【０３９３】
なお、ステップＳ１９１７でその他部の情報を取得しなかった場合は、命令生成手段４３２２は、ステップＳ１９０７で取得した条件部の情報、ステップＳ１９１２で取得した抽出部の情報を用いて検索命令を構成する。
【０３９４】
次に、ステップＳ１８１９の統合処理の例について、図２０のフローチャートを用いて説明する。
【０３９５】
（ステップＳ２００１）統合手段４３２４は、カウンタｉに１を代入する。
【０３９６】
（ステップＳ２００２）統合手段４３２４は、結合対象の各検索結果がｉ番目のレコードを含むか否かを判断する。ｉ番目のレコードを含む場合はステップＳ２００３に行き、ｉ番目のレコードを含まない場合は上位処理にリターンする。
【０３９７】
（ステップＳ２００３）統合手段４３２４は、変換ルール定義情報が結合方式識別子を含むか否かを判断する。結合方式識別子を含まない場合はステップＳ２００４に行き、結合方式識別子を含む場合はステップＳ２０１５に行く。
【０３９８】
（ステップＳ２００４）統合手段４３２４は、カウンタｊに１を代入する。
【０３９９】
（ステップＳ２００５）統合手段４３２４は、統合データに使用するｊ番目のユーザ属性識別子が存在するか否かを判断する。ｊ番目のユーザ属性識別子が存在する場合はステップＳ２００４に行き、存在しない場合はステップＳ２０１３に行く。
【０４００】
（ステップＳ２００６）統合手段４３２４は、ｊ番目のユーザ属性識別子と対になるユーザ属性値元情報を、ユーザ層定義情報から取得する。
【０４０１】
（ステップＳ２００７）統合手段４３２４は、ステップＳ２００６で取得したユーザ属性値元情報の中に、演算式等が存在するか否かを判断する。演算式等が存在する場合はステップＳ２００８に行き、存在しない場合はステップＳ２０１１に行く。
【０４０２】
（ステップＳ２００８）統合手段４３２４は、ステップＳ２００６で取得したユーザ属性値元情報の中の１以上のビュー属性識別子を取得する。次に、統合手段４３２４は、Ｓ１８１７で取得された検索結果のｉ番目のレコードから、１以上の各属性識別子に対応する属性値を取得する。なお、１以上の各属性識別子には、１以上のビュー属性識別子が含まれる。１以上の各属性識別子に、１以上のユーザ属性識別子が含まれていても良い。
【０４０３】
（ステップＳ２００９）統合手段４３２４は、ステップＳ２００６で取得したユーザ属性値元情報の中の演算式等を取得する。
【０４０４】
（ステップＳ２０１０）統合手段４３２４は、ステップＳ２００９で取得した演算式等に、ステップＳ２００８で取得した１以上の各属性値を代入し、演算式等を実行し、ユーザ属性値を取得する。ステップＳ２０１０に行く。
【０４０５】
（ステップＳ２０１１）統合手段４３２４は、検索結果のｉ番目のレコードからユーザ属性値を取得する。
【０４０６】
（ステップＳ２０１２）統合手段４３２４は、カウンタｊを１、インクリメントする。ステップＳ２００５に戻る。
【０４０７】
（ステップＳ２０１３）統合手段４３２４は、ステップＳ２００６で取得したユーザ属性値元情報のビュー属性識別子を取得する。次に、統合手段４３２４は、Ｓ１８１７で取得された検索結果のｉ番目のレコードから、当該ビュー属性識別子に対応するビュー属性値を取得し、統合データのレコードを構成する。
【０４０８】
（ステップＳ２０１４）統合手段４３２４は、カウンタｉを１、インクリメントする。ステップＳ２００２に戻る。
【０４０９】
（ステップＳ２０１５）統合手段４３２４は、結合方式識別子処理を行い、検索結果を統合する。結合方式識別子処理の例について、図２１、図２２のフローチャートを用いて説明する。
【０４１０】
（ステップＳ２０１６）統合手段４３２４は、カウンタｉを１、インクリメントする。ステップＳ２００２に戻る。
【０４１１】
次に、ステップＳ２０１２の結合方式識別子処理の例について、図２１、図２２のフローチャートを用いて説明する。なお、ここでの結合方式識別子処理は、着目するｉ番目のレコード（Ｓ２００２のｉ番目のレコード）に対応する処理である。
【０４１２】
（ステップＳ２１０１）統合手段４３２４は、変換ルール定義情報に含まれる結合方式識別子が「ＵＮＩＯＮ」であるか否かを判断する。「ＵＮＩＯＮ」である場合はステップＳ２１０２に行き、「ＵＮＩＯＮ」でない場合はステップＳ２１１３に行く。
【０４１３】
（ステップＳ２１０２）統合手段４３２４は、検索結果から、１以上のキー項目の属性値の集合を取得する。
【０４１４】
（ステップＳ２１０３）統合手段４３２４は、カウンタｉに１を代入する。
【０４１５】
（ステップＳ２１０４）統合手段４３２４は、ｉ番目の非キー項目が存在するか否かを判断する。ｉ番目の非キー項目が存在する場合はステップＳ２１０５に行き、存在しない場合はステップＳ２１０８に行く。
【０４１６】
（ステップＳ２１０５）統合手段４３２４は、ｉ番目の非キー項目に対する全属性値を取得する。
【０４１７】
（ステップＳ２１０６）統合手段４３２４は、ステップＳ２１０５で取得した全属性値を集約して、統合データに含まれるｉ番目の非キー項目に対する属性値を取得する。
【０４１８】
（ステップＳ２１０７）統合手段４３２４は、カウンタｉを１、インクリメントする。ステップＳ２１０４に戻る。
【０４１９】
（ステップＳ２１０８）統合手段４３２４は、ステップＳ２１０２で取得した属性値と、ステップＳ２１０６で取得した属性値とを有するレコードであり、統合データを構成するレコードを構成する。上位処理にリターンする。
【０４２０】
（ステップＳ２１０９）統合手段４３２４は、変換ルール定義情報に含まれる結合方式識別子が「ＣＨＯＩＣＥ」であるか否かを判断する。「ＣＨＯＩＣＥ」である場合はステップＳ２１１０に行き、「ＣＨＯＩＣＥ」でない場合はステップＳ２１１８に行く。
【０４２１】
（ステップＳ２１１０）統合手段４３２４は、格納部４１から優先順位を取得する。
【０４２２】
（ステップＳ２１１１）統合手段４３２４は、ステップＳ２１１０で取得した優先順位を用いて、優先される変換ビューを決定し、当該変換ビューの１以上のキー項目の属性値を取得する。
【０４２３】
（ステップＳ２１１２）統合手段４３２４は、カウンタｉに１を代入する。
【０４２４】
（ステップＳ２１１３）統合手段４３２４は、ｉ番目の非キー項目が存在するか否かを判断する。ｉ番目の非キー項目が存在する場合はステップＳ２１１４に行き、存在しない場合はステップＳ２１１７に行く。
【０４２５】
（ステップＳ２１１４）統合手段４３２４は、ｉ番目の非キー項目に対する全属性値を取得する。
【０４２６】
（ステップＳ２１１５）統合手段４３２４は、ステップＳ２１１４で取得した全属性値を集約して、統合データに含まれるｉ番目の非キー項目に対する属性値を取得する。
【０４２７】
（ステップＳ２１１６）統合手段４３２４は、カウンタｉを１、インクリメントする。ステップＳ２１１３に戻る。
【０４２８】
（ステップＳ２１１７）統合手段４３２４は、ステップＳ２１１１で取得した属性値と、ステップＳ２１１５で取得した属性値とを有するレコードであり、統合データを構成するレコードを構成する。上位処理にリターンする。
【０４２９】
（ステップＳ２１１８）統合手段４３２４は、変換ルール定義情報に含まれる結合方式識別子が「ＬＯＯＫＵＰ」であるか否かを判断する。「ＬＯＯＫＵＰ」である場合はステップＳ２１１９に行き、「ＬＯＯＫＵＰ」でない場合は上位処理にリターンする。
【０４３０】
（ステップＳ２１１９）統合手段４３２４は、格納部４１から参照条件を取得する。
【０４３１】
（ステップＳ２１２０）統合手段４３２４は、参照条件を参照する側の変換ビューを決定する。そして、統合手段４３２４は、当該変換ビューの１以上のキー項目の属性値を取得する。
【０４３２】
（ステップＳ２１２１）統合手段４３２４は、参照条件を参照される側の変換ビューを決定する。そして、統合手段４３２４は、参照条件を参照する側の変換ビューの１以上のキー項目の属性値であり、参照する側の変換ビューの属性値の集合に含まれない属性値を取得する。
【０４３３】
（ステップＳ２１２２）統合手段４３２４は、カウンタｉに１を代入する。
【０４３４】
（ステップＳ２１２３）統合手段４３２４は、ｉ番目の非キー項目が存在するか否かを判断する。ｉ番目の非キー項目が存在する場合はステップＳ２１２４に行き、存在しない場合はステップＳ２１２７に行く。
【０４３５】
（ステップＳ２１２４）統合手段４３２４は、ｉ番目の非キー項目に対する全属性値を取得する。
【０４３６】
（ステップＳ２１２５）統合手段４３２４は、ステップＳ２１２４で取得した全属性値を集約して、統合データに含まれるｉ番目の非キー項目に対する属性値を取得する。
【０４３７】
（ステップＳ２１２６）統合手段４３２４は、カウンタｉを１、インクリメントする。ステップＳ２１２３に戻る。
【０４３８】
（ステップＳ２１２７）統合手段４３２４は、ステップＳ２１２０とステップＳ２１２１とステップＳ２１２５で取得した属性値とを有するレコードであり、統合データを構成するレコードを構成する。上位処理にリターンする。
【０４３９】
以下、本実施の形態における検索システムＢの具体的な動作例について説明する。ここでの動作例は、検索装置４が、２つの各データソース管理装置２に格納されているデータソースから検索結果を取得し、当該検索結果を統合して、統合データを取得する処理の例である。ここでは、２つのデータソース管理装置２は、検索装置４とは異なる装置であり、かつ２つのデータソース管理装置２は、各々、異なる装置である、とする。
【０４４０】
そして、第一のデータソース管理装置２のデータソース格納部１１１には、図２３の２３０１に示す販売データベースが格納されている、とする。販売データベースは、販売テーブル（２３０１１）と商品テーブル（２３０１２）とを有する。販売テーブル（２３０１１）は、「商品ＩＤ」「顧客ＩＤ」「販売単価」「販売数量」を有する１以上のレコードを管理する。商品テーブル（２３０１２）は、「商品ＩＤ」「商品名」「商品分類」を有する１以上のレコードを管理する。
【０４４１】
また、第二のデータソース管理装置２のデータソース格納部１１１には、図２３の２３０２に示す仕入データベースが格納されている、とする。仕入データベースは、ここでは、仕入テーブル（２３０２１）を有する。仕入テーブル（２３０２１）は、「商品ＩＤ」「仕入先」「仕入単価」を有する１以上のレコードを管理する。
【０４４２】
また、検索装置４の辞書格納部４１１には、図２４から図３０に示す３層の定義情報を有するデータ辞書が格納されている。かかるデータ辞書は、例えば、検索装置４を運用する管理者が入力した情報である。
【０４４３】
図２４は、ソース層定義情報に含まれる販売テーブル（２３０１１）のスキーマを定義する情報である。図２４は、ソース識別子「販売データベース」、テーブル識別子「販売テーブル」と１以上のソース属性定義情報とを有する。ソース属性定義情報は、図２４の表の「ＩＤ」により識別される。ソース属性定義情報は、ここでは、「ソース属性識別子」「データタイプ」「サイズ」を有する。なお、販売データベースは、例えば、リレーショナルデータベースである。
【０４４４】
図２５は、ソース層定義情報に含まれる商品テーブル（２３０１２）のスキーマを定義する情報である。図２５は、ソース識別子「販売データベース」、テーブル識別子「商品テーブル」と１以上のソース属性定義情報とを有する。ソース属性定義情報は、図２５の表の「ＩＤ」により識別される。ソース属性定義情報は、ここでは、「ソース属性識別子」「データタイプ」「サイズ」を有する。
【０４４５】
図２６は、ソース層定義情報に含まれる仕入テーブル（２３０２１）のスキーマを定義する情報である。図２６は、ソース識別子「仕入データベース」、テーブル識別子「仕入テーブル」と１以上のソース属性定義情報とを有する。ソース属性定義情報は、図２６の表の「ＩＤ」により識別される。ソース属性定義情報は、ここでは、「ソース属性識別子」を有する。なお、仕入データベースは、例えば、実施の形態１で説明したファイルである。
【０４４６】
図２７は、ソース層定義情報に含まれるデータソース固有情報である。図２７の２７０１は、販売データベースのデータソース固有情報である。２７０２は、仕入データベースのデータソース固有情報である。
【０４４７】
図２８は、変換ビューの一つである販売ビューの変換ビュー情報である。変換ビュー情報は、変換ルール定義情報に含まれる。この変換ビュー情報は、ビュー識別子「販売ビュー」と１以上のビュー属性定義情報とを有する。ビュー属性定義情報は、図２８の表の「ＩＤ」により識別される。
【０４４８】
図２８の「ＩＤ＝１」のビュー属性定義情報は、ビュー属性識別子「商品ＩＤ」を取得する場合に、ソース識別子「販売テーブル」のソース属性識別子「商品ＩＤ」の属性値を取得しても良いし、ソース識別子「商品テーブル」のソース属性識別子「商品ＩＤ」の属性値を取得しても良いことを示す。つまり、ソース識別子「販売テーブル」のソース属性識別子「商品ＩＤ」と対になる情報と、当該「商品ＩＤ」と同じ属性値である、ソース識別子「商品テーブル」のソース属性識別子「商品ＩＤ」と対になる情報とが、同じ商品に関する情報であることを示す。
【０４４９】
図２８の「ＩＤ＝６」のビュー属性定義情報は、ビュー属性値「販売金額」を取得する場合に、演算式等「Ｐ１×Ｐ２」が示すように、パラメータＰ１とパラメータＰ２とを乗算することを意味する。また、図２８の「ＩＤ＝６」において、パラメータＰ１が、ソース識別子「販売テーブル」のソース属性識別子「販売単価」の属性値であることを示す。また、パラメータＰ２が、ソース識別子「販売テーブル」のソース属性識別子「販売数量」の属性値であることを示す。
【０４５０】
図２９は、変換ビューの一つである仕入ビューの変換ビュー情報である。変換ビュー情報は、変換ルール定義情報に含まれる。この変換ビュー情報は、ビュー識別子「仕入ビュー」と１以上のビュー属性定義情報とを有する。ビュー属性定義情報は、図２９の表の「ＩＤ」により識別される。
【０４５１】
図３０は、ユーザ層定義情報に含まれるユーザテーブルのスキーマを定義する情報である。ユーザ層定義情報は、ユーザテーブル識別子「商品売上利益表」と１以上のユーザ属性定義情報とを有する。ユーザ属性定義情報は、図３０の表の「ＩＤ」により識別される。
【０４５２】
図３０の「ＩＤ＝１」のユーザ属性定義情報は、ユーザ属性識別子「商品ＩＤ」を取得する場合に、ビュー識別子「販売ビュー」のビュー属性識別子「商品ＩＤ」の属性値を取得しても良いし、ビュー識別子「仕入ビュー」のビュー属性識別子「商品ＩＤ」の属性値を取得しても良いことを示す。つまり、ビュー識別子「販売ビュー」のビュー属性識別子「商品ＩＤ」と対になる情報と、当該「商品ＩＤ」と同じ属性値である、ビュー識別子「仕入ビュー」のビュー属性識別子「商品ＩＤ」と対になる情報とが、同じ商品に関する情報であることを示す。
【０４５３】
また、図３０の「ＩＤ＝７」のビュー属性定義情報の演算式等「Ｐ１×Ｐ２」は、パラメータＰ１とパラメータＰ２とを乗算し、ユーザ属性識別子「仕入金額」の属性値が取得されることを示す。また、パラメータＰ１が、ビュー識別子「販売ビュー」のビュー属性識別子「販売数量」の属性値であることを示す。また、パラメータＰ２が、ビュー識別子「仕入ビュー」のビュー属性識別子「仕入単価」の属性値であることを示す。
【０４５４】
また、図３０の「ＩＤ＝８」のビュー属性定義情報の演算式等「ｓｕｂ（Ｐ１，Ｐ２）」は、関数「ｓｕｂ」（２つのパラメータを減算した結果を返す関数）に、Ｐ１，Ｐ２の２つのパラメータの値を代入し、当該関数を実行することにより、ユーザ属性識別子「売上利益」の属性値が取得されることを示す。また、パラメータＰ１が、ビュー識別子「販売ビュー」のビュー属性識別子「販売金額」の属性値であることを示す。また、パラメータＰ２が、ユーザテーブル識別子「商品売上利益表」のビュー属性識別子「仕入金額」の属性値であることを示す。
【０４５５】
以上の状況において、図３１を参照して、検索装置４の動作例について説明する。まず、ユーザが、端末装置３に検索条件
「ＳＥＬＥＣＴ  商品ＩＤ，商品名，ＳＵＭ（販売数量），ＳＵＭ（販売金額），ＳＵＭ（仕入金額），  ＳＵＭ（売上利益）
【０４５６】
ＦＲＯＭ  商品別売上利益
【０４５７】
ＷＨＥＲＥ  商品ＩＤ＝１１０３
【０４５８】
ＧＲＯＵＰ  ＢＹ  商品ＩＤ，商品名」
を入力した、とする。 次に、端末装置３は、当該検索条件を受け付け、検索装置４に送信する。
【０４５９】
次に、検索装置４の条件受付部１２１は、上記の検索条件（ＳＱＬ文）を受信する。
次に、ソース決定手段４３２１は、検索条件に含まれるユーザテーブル識別子「商品別売上利益」を取得する。また、ソース決定手段４３２１は、検索条件に含まれるユーザ属性識別子「商品ＩＤ」「商品名」「販売数量」「販売金額」「仕入金額」「売上利益」を取得する。
【０４６０】
次に、ソース決定手段４３２１は、取得した各ユーザ属性識別子と対になるユーザ属性定義情報を、図３０のユーザ層定義情報から取得する。
【０４６１】
次に、ソース決定手段４３２１は、取得した各ユーザ属性定義情報が有するビュー識別子を取得し、当該ビュー識別子に対して、ユニーク処理をし、２つのビュー識別子「販売ビュー」「仕入ビュー」を取得する。
【０４６２】
次に、ソース決定手段４３２１は、取得したユーザ属性定義情報の中から、ビュー識別子「販売ビュー」に対応するユーザ属性識別子「商品ＩＤ」「商品名」「販売数量」「販売金額」を取得する。次に、ソース決定手段４３２１は、取得した各ユーザ属性識別子とビュー識別子「販売ビュー」に対応するビュー属性識別子「商品ＩＤ」「商品名」「販売数量」「販売金額」を取得する。
【０４６３】
次に、ソース決定手段４３２１は、図２８の変換ビュー情報を参照して、取得した各ビュー属性識別子と対になるビュー属性値元情報を取得する。
【０４６４】
次に、命令生成手段４３２２は、ビュー識別子「販売ビュー」に対応する命令元情報（２７０１のタグ＜命令元情報＞と対になる情報）を、図２７のデータソース固有情報から取得する。
【０４６５】
次に、命令生成手段４３２２は、受け付けられた検索条件を解析し、当該検索条件の条件部「商品ＩＤ＝１１０３」、抽出部「商品ＩＤ，商品名，ＳＵＭ（販売数量），ＳＵＭ（販売金額），ＳＵＭ（仕入金額），ＳＵＭ（売上利益）」、およびその他部の情報「ＧＲＯＵＰ  ＢＹ  商品ＩＤ，商品名」を取得する。
【０４６６】
次に、命令生成手段４３２２は、条件部「商品ＩＤ＝１１０３」のユーザ属性識別子「商品ＩＤ」から、取得しているユーザ属性値元情報を用いて、「販売ビュー．商品ＩＤ」を取得する。また、命令生成手段４３２２は、「販売ビュー．商品ＩＤ」から、取得しているビュー属性値元情報を用いて、「販売テーブル．商品ＩＤ」を取得する。そして、命令生成手段４３２２は、検索命令の条件部「商品ＩＤ＝１１０３」から、データソースに対して発行する検索命令を構成するための条件部「販売テーブル．商品ＩＤ」を取得する。
【０４６７】
次に、命令生成手段４３２２は、同様に、抽出部「商品ＩＤ，商品名，ＳＵＭ（販売数量），ＳＵＭ（販売金額），ＳＵＭ（仕入金額），ＳＵＭ（売上利益）」の「商品ＩＤ」から、「販売テーブル．商品ＩＤ」を取得する。また、命令生成手段４３２２は、抽出部を構成する「商品名」から「商品テーブル．商品名」を取得する。また、命令生成手段４３２２は、抽出部を構成する「ＳＵＭ（販売数量）」から「ＳＵＭ（販売テーブル．販売数量）」を取得する。また、命令生成手段４３２２は、抽出部を構成する「ＳＵＭ（販売金額）」から「ＳＵＭ（販売テーブル.販売単価×販売テーブル.販売金額）」を取得する。
【０４６８】
次に、命令生成手段４３２２は、その他部の情報「ＧＲＯＵＰ  ＢＹ  商品ＩＤ，商品名」から「ＧＲＯＵＰ  ＢＹ  販売テーブル.商品ＩＤ, 商品テーブル．商品名」を取得する。
【０４６９】
次に、命令生成手段４３２２は、命令元情報の「ＦＲＯＭ  ＄テーブル識別子１＄  ＩＮＮＥＲ  ＪＯＩＮ   ＄テーブル識別子２＄」に含まれる変数「＄テーブル識別子１＄」に対応するテーブル識別子「販売テーブル」、変数「＄テーブル識別子２＄」に対応するテーブル識別子「商品テーブル」を取得する。
【０４７０】
次に、命令生成手段４３２２は、命令元情報の「ＯＮ   ＄テーブル識別子１＄ ． ＄テーブル属性識別子１＄ ＝ ＄テーブル識別子２＄ ． ＄テーブル属性識別子２＄」に含まれる変数「＄テーブル属性識別子１＄」に対応するテーブル属性名「商品ＩＤ」、変数「＄テーブル属性識別子２＄」に対応するテーブル属性名「商品ＩＤ」を取得する。
【０４７１】
次に、命令生成手段４３２２は、命令元情報
「ＳＥＬＥＣＴ  ＄抽出部＄
【０４７２】
ＦＲＯＭ  ＄テーブル識別子１＄  
【０４７３】
ＩＮＮＥＲ  ＪＯＩＮ   ＄テーブル識別子２＄  
【０４７４】
ＯＮ   ＄テーブル識別子１＄ ． ＄テーブル属性識別子＄ ＝ ＄テーブル識別子２＄ ． ＄テーブル属性識別子＄ 
【０４７５】
ＷＨＥＲＥ  ＄条件部＄    ＄その他部＄」の各変数を、取得した文字列に置き替え、
検索命令
「ＳＥＬＥＣＴ  販売テーブル．商品ＩＤ，商品テーブル．商品名，  
【０４７６】
ＳＵＭ（販売テーブル．販売数量），  
【０４７７】
ＳＵＭ（販売テーブル．販売単価×販売テーブル．販売金額）
ＦＲＯＭ  販売テーブル  ＩＮＮＥＲ  ＪＯＩＮ  商品テーブル  
【０４７８】
ＯＮ  販売テーブル．商品ＩＤ＝商品テーブル．商品ＩＤ；
ＷＨＥＲＥ  販売テーブル．商品ＩＤ＝１１０３
ＧＲＯＵＰ  ＢＹ    販売テーブル．商品ＩＤ，商品テーブル．商品名」
を構成する。
【０４７９】
次に、ソース検索手段４３２３は、図２７の２７０１の接続情報「＜JDBC接続URL＞jdbc:oracle:thin:@localhost:1521:AAA  ＜ドライバークラス＞oracle.jdbc.driver.OracleDriver」を取得する。そして、ソース検索手段４３２３は、当該接続情報を用いて、ＳＱＬデータベースである「販売データベース」にアクセスし、生成された上記の検索命令を用いて、ビュー識別子に対応するデータソース「販売データベース」から、検索結果を取得する。そして、ソース検索手段４３２３は、検索結果「＜商品ＩＤ＞１１０３  ＜商品名＞Ipoh Coffee    ＜販売数量＞７０  ＜販売金額＞１４０００」を得る。
【０４８０】
次に、命令生成手段４３２２は、条件部「商品ＩＤ＝１１０３」のユーザ属性識別子「商品ＩＤ」から、取得しているユーザ属性値元情報を用いて、「仕入ビュー．商品ＩＤ」を取得する。また、命令生成手段４３２２は、「仕入ビュー．商品ＩＤ」から、取得しているビュー属性値元情報を用いて、「仕入テーブル．商品ＩＤ」を取得する。そして、命令生成手段４３２２は、検索命令の条件部「商品ＩＤ＝１１０３」から、データソース「仕入データベース」に対して発行する検索命令を構成するための条件部「仕入テーブル．商品ＩＤ」を取得する。
【０４８１】
また、命令生成手段４３２２は、抽出部を構成する「ＳＵＭ（仕入金額）」から「ＳＵＭ（販売テーブル.販売数量×仕入テーブル. 仕入単価）」を取得する。次に、命令生成手段４３２２は、抽出部「ＳＵＭ（販売テーブル.販売数量×仕入テーブル. 仕入単価）」のうちのデータソース「仕入データベース」に対応する情報「仕入テーブル. 仕入単価」を取得する。
【０４８２】
次に、  命令生成手段４３２２は、命令元情報「ベースURL＋ “/” +  エンドポイント」と接続情報のベースＵＲＬ「https://xxx.yyyy-portal.co.jp」（図２７の２７０２）に従って、検索命令「GET https://xxx.yyyy-portal.co.jp/仕入テーブル?  商品ＩＤ＝１１０３」を構成する。
【０４８３】
次に、ソース検索手段４３２３は、図２７の２７０１の接続情報の「＜APIキー＞XXXXXXXX」と、検索命令「GET https://xxx.yyyy-portal.co.jp/仕入テーブル?  商品ＩＤ＝１１０３」とを用いて、仕入データベースの仕入テーブル（２３０２１）を検索し、検索結果「＜商品ＩＤ＞１１０３  ＜仕入単価＞１３０」を得る。
【０４８４】
次に、統合手段４３２４は、検索結果「＜商品ＩＤ＞１１０３  ＜商品名＞Ipoh Coffee    ＜販売数量＞７０  ＜販売金額＞１４０００」と検索結果「＜商品ＩＤ＞１１０３  ＜仕入単価＞１３０」の各属性値を用いて、取得した抽出部「商品ＩＤ，商品名，ＳＵＭ（販売数量），ＳＵＭ（販売金額），ＳＵＭ（仕入金額），ＳＵＭ（売上利益）」に照らして、統合データ「＜商品ＩＤ＞１１０３  ＜商品名＞Ipoh Coffee    ＜販売数量＞７０  ＜販売金額＞１４０００  ＜仕入金額＞９１００  ＜売上利益＞４９００」を得る。
【０４８５】
なお、＜仕入金額＞９１００は、図３０の「ＩＤ＝７」のユーザ属性値元情報を参照し、「販売ビュー．販売数量×仕入ビュー．仕入単価」の演算式の実行により、取得された属性値である。
【０４８６】
また、＜売上利益＞４９００は、図３０の「ＩＤ＝８」のユーザ属性値元情報を参照し、「販売ビュー．販売金額×商品売上利益表．仕入金額」をプログラム「ｓｕｂ（）」に代入し、実行することにより、取得された属性値である。
【０４８７】
そして、結果出力部４４１は、取得された統合データを端末装置３に送信する。
【０４８８】
次に、端末装置３は当該統合データを受信し、出力する。なお、かかる統合データは、「＜商品ＩＤ＞１１０３  ＜商品名＞Ipoh Coffee    ＜販売数量＞７０  ＜販売金額＞１４０００  ＜仕入金額＞９１００  ＜売上利益＞４９００」である。
【０４８９】
以上、本実施の形態によれば、ソース層定義情報、変換ルール定義情報、ユーザ層定義情報という３層の定義情報により、２以上のデータソースから情報を適切に検索し、当該検索結果を統合できる。
【０４９０】
また、本実施の形態によれば、配列インデックスを含むインデクスを使用することにより、情報検索を高速に行える。
【０４９１】
なお、本実施の形態における検索装置４を実現するソフトウェアは、以下のようなプログラムである。つまり、このプログラムは、１以上の属性値を有する１以上のレコードを含む２以上の各データソースを定義する情報であり、データソースの識別子であるソース識別子と、データソースの属性識別子であるソース属性識別子を含む１以上のソース属性定義情報とを有する情報であるソース層定義情報と、検索条件に基づく検索の対象のテーブルであり、１以上の属性値を有する１以上のレコードを含むテーブルであるユーザテーブルを定義する情報であり、当該ユーザテーブルを識別するユーザテーブル識別子と、ユーザテーブルの属性識別子であるユーザ属性識別子を含む１以上のユーザ属性定義情報とを有する情報であるユーザ層定義情報と、前記検索条件に基づいて、前記２以上の各データソースに対して発行する検索命令を生成し、当該検索命令に対応する検索結果を取得し、当該２以上の検索結果を用いて、前記検索条件に対応する統合データを作成するための情報である変換ルール定義情報と、を有するデータ辞書と２以上のデータソースとにアクセス可能なコンピュータを、前記ユーザテーブルに対する検索条件を受け付ける条件受付部と、前記データ辞書を参照して、前記検索条件に対応する２以上のデータソースを決定し、前記変換ルール定義情報を用いて、前記２以上の各データソースごとに、検索命令を生成し、当該検索命令に基づいた検索結果を取得し、前記変換ルール定義情報と前記ユーザ層定義情報とを用いて、前記２以上の各データソースに対応する検索結果を統合し、前記検索条件に対応する統合データを取得する検索部と、前記検索部が取得した前記統合データを出力する結果出力部として機能させるためのプログラムである。
【０４９２】
また、図３２は、本明細書で述べたプログラムを実行して、上述した種々の実施の形態の検索装置４等を実現するコンピュータの外観を示す。上述の実施の形態は、コンピュータハードウェア及びその上で実行されるコンピュータプログラムで実現され得る。図３２は、このコンピュータシステム３００の概観図であり、図３３は、システム３００のブロック図である。
【０４９３】
図３２において、コンピュータシステム３００は、ＣＤ−ＲＯＭドライブを含むコンピュータ３０１と、キーボード３０２と、マウス３０３と、モニタ３０４とを含む。
【０４９４】
図３３において、コンピュータ３０１は、ＣＤ−ＲＯＭドライブ３０１２に加えて、ＭＰＵ３０１３と、ＣＤ−ＲＯＭドライブ３０１２等に接続されたバス３０１４と、ブートアッププログラム等のプログラムを記憶するためのＲＯＭ３０１５と、ＭＰＵ３０１３に接続され、アプリケーションプログラムの命令を一時的に記憶するとともに一時記憶空間を提供するためのＲＡＭ３０１６と、アプリケーションプログラム、システムプログラム、及びデータを記憶するためのハードディスク３０１７とを含む。ここでは、図示しないが、コンピュータ３０１は、さらに、ＬＡＮへの接続を提供するネットワークカードを含んでも良い。
【０４９５】
コンピュータシステム３００に、上述した実施の形態の検索装置４等の機能を実行させるプログラムは、ＣＤ−ＲＯＭ３１０１に記憶されて、ＣＤ−ＲＯＭドライブ３０１２に挿入され、さらにハードディスク３０１７に転送されても良い。これに代えて、プログラムは、図示しないネットワークを介してコンピュータ３０１に送信され、ハードディスク３０１７に記憶されても良い。プログラムは実行の際にＲＡＭ３０１６にロードされる。プログラムは、ＣＤ−ＲＯＭ３１０１またはネットワークから直接、ロードされても良い。
【０４９６】
プログラムは、コンピュータ３０１に、上述した実施の形態の検索装置４等の機能を実行させるオペレーティングシステム（ＯＳ）、またはサードパーティープログラム等は、必ずしも含まなくても良い。プログラムは、制御された態様で適切な機能（モジュール）を呼び出し、所望の結果が得られるようにする命令の部分のみを含んでいれば良い。コンピュータシステム３００がどのように動作するかは周知であり、詳細な説明は省略する。
【０４９７】
なお、上記プログラムにおいて、情報を送信するステップや、情報を受信するステップなどでは、ハードウェアによって行われる処理、例えば、送信ステップにおけるモデムやインターフェースカードなどで行われる処理（ハードウェアでしか行われない処理）は含まれない。
【０４９８】
また、上記プログラムを実行するコンピュータは、単数であってもよく、複数であってもよい。すなわち、集中処理を行ってもよく、あるいは分散処理を行ってもよい。
【０４９９】
また、上記各実施の形態において、一の装置に存在する２以上の通信手段は、物理的に一の媒体で実現されても良いことは言うまでもない。
【０５００】
また、上記各実施の形態において、各処理は、単一の装置によって集中処理されることによって実現されてもよく、あるいは、複数の装置によって分散処理されることによって実現されてもよい。
【０５０１】
本発明は、以上の実施の形態に限定されることなく、種々の変更が可能であり、それらも本発明の範囲内に包含されるものであることは言うまでもない。
【産業上の利用可能性】
【０５０２】
以上のように、本発明にかかる検索装置は、２以上のデータソースから情報を適切に検索し、当該検索結果を統合できるという効果を有し、検索装置等として有用である。
【符号の説明】
【０５０３】
１、４  検索装置
２  データソース管理装置
３  端末装置
１１、４１  格納部
１２  受付部
１３、４３  処理部
１４、４４  出力部
３１  端末格納部
３２  端末受付部
３３  端末処理部
３４  端末送信部
３５  端末受信部
３６  端末出力部
１１１  データソース格納部
１１２  インデックス格納部
１２１  条件受付部
１３１  インデックス生成部
１３２、４３２  検索部
１３３  インデックス更新部
１４１、４４１  結果出力部
４１１  辞書格納部
１１２１  配列インデックス格納部
１１２２  配列ラベル・インデックス格納部
１１２３  レコード・インデックス格納部
１１２５  ソース・インデックス格納部
１３０１  データソース
１３１１  配列インデックス生成部
１３１２  配列ラベル・インデックス生成部
１３１３  レコード・インデックス生成部
１３１５  ソース・インデックス生成部
４３２１  ソース決定手段
４３２２  命令生成手段
４３２３  ソース検索手段
４３２４  統合手段
【要約】
【課題】２以上のデータソースから情報を適切に検索し、当該検索結果を統合することが困難であった。
【解決手段】ソース識別子と１以上のソース属性定義情報とを有する情報であるソース層定義情報と、ユーザテーブル識別子と１以上のユーザ属性定義情報とを有するユーザ層定義情報と、２以上の各データソースに対して発行する検索命令を生成し、検索結果を取得し、統合データを作成するための情報である変換ルール定義情報とを有するデータ辞書４１１を参照して、情報を検索する検索装置４であり、検索条件を受け付ける条件受付部１２１と、データ辞書４１１を参照して、検索条件に対応する２以上のデータソースごとに検索命令を生成し、当該検索命令に基づいた検索結果を取得し、当該検索結果を統合し、統合データを取得する検索部４３２と、検索部４３２が取得した統合データを出力する結果出力部４４１とを具備する検索装置４により、上記課題を解決できる。
【選択図】図１７【図１】
0006974665.tif 000002
【図２】
0006974665.tif 000003
【図３】
0006974665.tif 000004
【図４】
0006974665.tif 000005
【図５】
0006974665.tif 000006
【図６】
0006974665.tif 000007
【図７】
0006974665.tif 000008
【図８】
0006974665.tif 000009
【図９】
0006974665.tif 000010
【図１０】
0006974665.tif 000011
【図１１】
0006974665.tif 000012
【図１２】
0006974665.tif 000013
【図１３】
0006974665.tif 000014
【図１４】
0006974665.tif 000015
【図１５】
0006974665.tif 000016
【図１６】
0006974665.tif 000017
【図１７】
0006974665.tif 000018
【図１８】
0006974665.tif 000019
【図１９】
0006974665.tif 000020
【図２０】
0006974665.tif 000021
【図２１】
0006974665.tif 000022
【図２２】
0006974665.tif 000023
【図２３】
0006974665.tif 000024
【図２４】
0006974665.tif 000025
【図２５】
0006974665.tif 000026
【図２６】
0006974665.tif 000027
【図２７】
0006974665.tif 000028
【図２８】
0006974665.tif 000029
【図２９】
0006974665.tif 000030
【図３０】
0006974665.tif 000031
【図３１】
0006974665.tif 000032
【図３２】
0006974665.tif 000033
【図３３】
0006974665.tif 000034