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