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