データベースを記録する記録メモリにデータを挿入するとともに、前記記録メモリからデータの検索を行う検索装置であって、前記データの挿入を第1のインデクスに反映する挿入手段と、前記挿入手段によるデータの挿入の終了を検知する検知手段と、前記検知手段によりデータの挿入の終了を検知したことに応じて、前記第1のインデクスよりもインデクスロード領域の空き領域を削減した第2のインデクスを生成する生成手段と、前記生成手段によって生成された第2のインデクスに基づいて検索を実行する検索手段とを有することを特徴とする検索装置。前記生成手段によって前記第2のインデクスが生成された後にデータの挿入が指示された場合に、前記第2のインデクスを無効化する無効化手段をさらに有することを特徴とする請求項1に記載の検索装置。前記無効化手段により前記第2のインデクスが無効化された場合に、前記生成手段は、前記指示されたデータの挿入を反映する第3のインデクスを生成し、前記検知手段によりデータの挿入の終了を検知したことに応じて、前記第1のインデクスに前記第3のインデクスの内容を反映させることを特徴とする請求項2に記載の検索装置。前記検知手段は、前記記録メモリの空き領域が所定サイズよりも小さくなった場合に、前記挿入手段によるデータの挿入が終了したものと検知することを特徴とする請求項1~3の何れか1項に記載の検索装置。前記検知手段は、前記記録メモリのライトプロテクト状態を検知することにより前記挿入手段によるデータの挿入の終了を検知することを特徴とする請求項1~3の何れか1項に記載の検索装置。前記検知手段は、前記記録メモリを前記検索装置から取り出す指示を検知することにより前記挿入手段によるデータの挿入の終了を検知することを特徴とする請求項1~3の何れか1項に記載の検索装置。データベースを記録する記録メモリにデータを挿入するとともに、前記記録メモリからデータの検索を行う検索方法であって、前記データの挿入を第1のインデクスに反映する挿入工程と、前記挿入工程におけるデータの挿入の終了を検知する検知工程と、前記検知工程においてデータの挿入の終了を検知したことに応じて、前記第1のインデクスよりもインデクスロード領域の空き領域を削減した第2のインデクスを生成する生成工程と、前記生成工程において生成された第2のインデクスに基づいて検索を実行する検索工程とを有することを特徴とする検索方法。データベースを記録する記録メモリにデータを挿入するとともに、前記記録メモリからデータの検索を行う検索装置を制御するためのプログラムであって、前記データの挿入を第1のインデクスに反映する挿入工程と、前記挿入工程におけるデータの挿入の終了を検知する検知工程と、前記検知工程においてデータの挿入の終了を検知したことに応じて、前記第1のインデクスよりもインデクスロード領域の空き領域を削減した第2のインデクスを生成する生成工程と、前記生成工程において生成された第2のインデクスに基づいて検索を実行する検索工程とをコンピュータに実行させることを特徴とするプログラム。特許文献1に記載の方法は、高速に検索が可能だが挿入が低速なデータ保持手段に対して、別のデータ保持手段に暫定的に高速にデータを挿入する工夫がなされている。ところが、メモリの容量が乏しい組込み機器に対しては十分に検索性能を向上させることはできない。本発明は前述の問題点に鑑み、メモリの容量が乏しい組込み機器において、挿入性能と検索性能とを両立させることができるようにすることを目的としている。本発明の検索装置は、データベースを記録する記録メモリにデータを挿入するとともに、前記記録メモリからデータの検索を行う検索装置であって、前記データの挿入を第1のインデクスに反映する挿入手段と、前記挿入手段によるデータの挿入の終了を検知する検知手段と、前記検知手段によりデータの挿入の終了を検知したことに応じて、前記第1のインデクスよりもインデクスロード領域の空き領域を削減した第2のインデクスを生成する生成手段と、前記生成手段によって生成された第2のインデクスに基づいて検索を実行する検索手段とを有することを特徴とする。本発明によれば、インデクスのメモリへの常駐効果を改善し、メモリの乏しい組込み機器において、挿入性能と検索性能とを両立させることができる。第1の実施形態以下、図面を参照しながら本発明に好適な第1の実施形態を詳細に説明する。図1は、本実施形態の検索装置100の構成例を示すブロック図である。図1において、CPU101はマイクロプロセッサであり、検索処理、写真登録処理、画面制御処理、写真撮影処理等のための演算、論理判断等を行い、バス106を介してバス106に接続された各デバイスを制御する。バス106は、CPU101の制御対象である各デバイスを指示するアドレス信号、コントロール信号を転送する。また、各デバイス間でデータの転送を行う。入力部102はボタン、タッチパネル等であり、オペレータが各種の指示を行う。表示部103は液晶ディスプレイ等である。撮像部104は撮像センサ等であり、映像を読み取って電子データに変換する。通信部105はネットワークコントローラであり、有線あるいは無線の通信路を介して外部とのデータの交換を行う。ROM107は読出専用の不揮発性メモリであり、CPU101によるブートプログラム、システムの制御プログラム、各種処理で参照される各種初期データ等を記憶する。ブートプログラムはシステム起動時に初期データをRAM108にロードし、CPU101に制御プログラムを実行させる。制御プログラムの内容については、後にフローチャートを参照して詳述する。RAM108は読み書き可能なランダムアクセスメモリであって、各デバイスからの各種データの一次記憶に用いられ、処理に必要なデータを記憶する各種ワーク領域、処理中に必要なスタック、及び処理中に値変更が行われる各種データが格納される。また、後述するデータベース110を構成する各ノードのノードIDと格納される先頭キーとの対応表、データベース110のインデクスが一時的にメモリ中にロードされるインデクスロード領域等もRAM108に格納される。DISK109はSDカード等の記録メモリ、あるいは、ハードディスク等で構成される大量記憶装置であり、大量のデータを記憶する。写真を検索するための撮影日時などの属性情報を記憶するデータベース110や、写真データそのものを記憶するコンテンツ111はDISK109に格納され、必要に応じて随時内容が修正される。なお、CPU101により実行される制御プログラムをDISK109に格納するようにしてもよい。その場合は、必要に応じてRAM108に示す主記憶にロードし、実行することになる。そのようにすることでプログラムを固定化せず途中で修正可能に構成することができ、柔軟なシステムを実現することができる。以上の構成からなる検索装置100は、入力部102等からの各種イベントに応じて作動する。入力部102等からのインタラプトが供給されるとインタラプト信号がCPU101に送られる。それに伴ってイベントが発生し、イベントに応じてCPU101がROM107またはRAM108内に記憶されている各種命令を読み出し、CPU101の実行によって各種の制御が行われる。図2は、本実施形態の検索装置100が効果的となる使用例を説明する図である。図2aは、カメラ201にSDカード202が装着され、写真撮影が行われている状況を示した図である。このとき、SDカード202中のデータベース110の第1のインデクスとして、検索が低速だが挿入が高速なインデクス低速検索高速挿入インデクス、以下、低速検索インデクスとも呼称が存在して使用される。この状況では、データの挿入が起こる写真撮影が頻繁に行われるため、挿入が高速で行われる必要がある。しかし、無限に写真撮影が継続されることはまれであり、通常は、ある時点で撮影が終了する。この撮影終了の判定は、例えば、以下のような場合を判定して行われる。1つ目は、SDカード202の空き領域が所定値以下になった場合である。2つ目は、SDカード202のライトプロテクト状態が設定された場合である。また、3つ目は、カメラ201からSDカード202を取り出そうとした場合である。さらに4つ目は、SDカード202への挿入が所定期間以上行われなくなった場合である。本実施形態では、この状況変化を検知し、第2のインデクスとして、挿入が低速だが検索が高速なインデクス高速検索低速挿入インデクス、以下、高速検索インデクスとも呼称を生成する。これにより、撮影終了後は、SDカード202の検索を高速化できる。具体的には、SDカード202の空き領域が所定値以下であることを判定することにより、それ以上の写真が追加されそうにないSDカードに対して、ユーザが特別な指示をすることなく検索を高速化できる。また、SDカード202のライトプロテクト状態を判定することにより、それ以上の写真が追加されそうにないSDカードに対して、ユーザが特別な指示をすることなく検索を高速化できる。また、カメラ201からのSDカード202取り出し指示を判定することにより、それ以上の写真が追加されそうにないSDカードに対して、ユーザが特別な指示をすることなく検索を高速化できる。また、SDカード202への挿入が所定期間以上行われなくなった状態を検知して判定することにより、それ以上の写真が追加されそうにないSDカードに対して、ユーザが特別な指示をすることなく検索を高速化できる。図2bは、SDカード204が読み出し専用で使用される状況を説明した図である。図2bに示す例では、カメラ以外の機器203にSDカード204が装着されている。この状況では、新規の写真撮影が行われず、データの挿入が行われることはなく、一覧表示、印刷等の写真撮影以外の処理が行われるのみである。この状況では、写真データの検索のみが行われ、高速検索インデクスによって高速に処理される。この場合、データの挿入が行われると処理が低速となるが、実際には写真撮影が行われることはないので問題にならない。一方、SDカード204がカメラに再度装着される場合など、もう一度撮影が開始される場合がある。このようなときは、一旦、高速検索インデクスを無効化使用禁止し、旧インデクスである低速インデクスを復活させて、データを挿入するようにする。このようにすることによって、撮影データ挿入が無い状態での検索を高速化でき、その後の再撮影があってもスムーズに再開することができる。図3は、本実施形態におけるデータベース300の構成例を示した図である。図3aには、データベース300全体の構成を示している。図3aに示すように、データベース300は表301とインデクス群302とから構成されている。また、インデクス群302は更に細分され、低速検索インデクス303、低速検索インデクス追加分304、高速検索インデクス305等から構成されている。図3bは、表301の構成を更に詳細に示した図である。表301は行データの集合として記憶され、行データは行を一意に特定可能なIDRowIDと呼ぶの列306とその他の列307とを対応付けて記憶される。図3cは、インデクスの構成を示す図である。図3cに示すように、インデクスの論理構成は、基本的にはいわゆるB-Treeの構造である。インデクスは複数の固定長のノードで構成され、ノード内に各キーがバランスよく格納されている。各ノードは下位ノードへのリンク308とキー309とからなり、最も上位のノードルートノードから、キーの大小関係を判断してリンクをたどることによって目的のキーを参照することができる。また、最下層のノードリーフノードにはキー310とRowID311とが対応づけられて格納されている。ここで得られたRowID301に従って表301を参照することにより、目的の行データを参照することができる。図4は、本実施形態のデータベース300のノードの物理構成例を示した図である。図4aは、低速検索インデクスの場合のノード402の構成例を示す図である。図4aに示すように、先頭付近にはセルへのリンク401が格納されている。また、末尾付近には実際のセル403が格納されている。各セルは下位ノードへのリンク405とキー406とから構成されている。ノードの末尾のリンク404は、B-Treeの論理構成における末尾の下位ノードへのリンクを意味している。また、セルへのリンク401とセル403との間には空き領域407が配置されている。このように、セルへのリンク401とセル403とが分離された構造になっているのは、キーのソート順にセルを取得できるようにする必要があり、セルを挿入する際にソート順の維持を高速化するためである。セルは一般にデータ長が長いため、セルへのリンクを再配置するだけで、ソート順を維持した高速の挿入処理が可能となる。空き領域407のサイズは任意のサイズに決めることができるが、挿入のことを考えて、通常は全体の半分程度の量を確保しておく。図4bは、高速検索インデクスの場合のノード408の物理構成例を示す図である。高速検索インデクスにおいては基本的に挿入が行われないので、挿入を高速化するための工夫がなされておらず、検索の高速化に特化している。そのため、セルへのリンクを別途用意することはなく、単純にセルのデータだけがキーの順番になるように詰め合わせて構成されている。図5は、本実施形態の検索装置100におけるインデクスロード領域の構成例を示す図である。図5aは、インデクスロード領域の概略構成例を示す図である。インデクスロード領域は、データベース300中のインデクスの各ノードをメモリ上にロードするための領域であり、いわゆるキャッシュメモリの役割を持つ。インデクスロード領域の各領域501はノードサイズと同じ固定長で構成されている。組込み機器では、メモリの断片化を避けるために動的に確保、解放される領域は基本的に固定長で管理され、その時々で必要なノードがオンデマンドでロードされる。一度ロードされたノードは必要がなくなるまでメモリ上に存在し、再度、該当ノードが必要になったときにメモリ上に存在するデータが参照される。これにより高速処理が可能となる。インデクスロード領域には、全ノード数分に対応するほどのメモリが割り当てられないので、インデクスロード領域があふれた場合には、使用されていない古いノードから追放されてメモリ上から消えてしまう。図5bは、低速検索インデクスのノードをロードした状態を説明する図である。図5bに示すように、各ノードはセルへのリンク502、空き領域503、及びセル504から構成されている。空き領域503は、検索のためには不要な領域であるが、固定長単位でアクセスされるので、検索の際にもメモリ上に存在することになる。このように平均的に約半分が空き領域であるので、その分、メモリ常駐できるセル数が少なくなり、メモリの使用効率が下がって相対的に検索速度が低下することになる。図5cは、高速検索インデクスのノードをロードした状態を説明する図である。図5cに示すように、インデクスロード領域は基本的にはすべてセルのデータで占められ、空き領域が存在しないため、検索にとっては、低速検索インデクスに比べてメモリの使用効率が大幅に向上する。すなわち、平均的には倍以上のメモリを実装した場合と等価になり、メモリの乏しい組込み機器においては極めて有利であることが分かる。図6は、本実施形態の検索装置100において、ユーザの操作に応じて生成されるデータベース300のインデクスの状況を説明する図である。図6aは、写真撮影がまだ行われている段階のインデクスの状況を示す図である。図6aに示すように、表601に対応して低速検索インデクス602のみが存在し、低速検索インデクスに基づいて検索が行われる。写真撮影等によるデータの挿入は高速であるが、検索は低速となる。図6bは、写真撮影が終了した段階のインデクスの状況を示す図である。この状況では、撮影終了を検知して高速検索インデクス603が生成される。これ以降の検索は高速検索インデクスに基づいて高速に行われる。図6cは、高速検索インデクスを生成した後に、写真撮影が再開された段階のインデクスの状況を示す図である。写真撮影に基づいて新たなデータが表604に挿入され、インデクスに対応データが挿入される。このとき、高速検索インデクスへの挿入は低速なので行わず、代わりに、第3のインデクスとして低速検索インデクス追加分605にデータが挿入される。このとき、高速検索インデクス606を無効化することによりインデクスを無効化する。これ以降の検索は低速検索インデクス602と低速検索インデクス追加分605とに基づいて行われることになる。図6dは、再撮影後に撮影が終了した段階のインデクスの状況を示す図である。撮影終了を受けて高速検索インデクス608が再生成される。さらに今後の再撮影に備えて低速検索インデクス607に低速検索インデクス追加分605の内容がマージされる。次に、上述の動作について、図7~図11のフローチャートを参照しながら説明する。なお、後述する図7~図11に示す各処理はCPU101の制御により行われる。図7は、本実施形態の検索装置100のCPU101による処理結果を示す処理手順の一例を示すフローチャートである。まず、ステップS701は、システムの初期化処理であり、各種パラメータを初期化したり初期画面を表示部103に表示したりする処理である。次のステップS702は、タッチパネル等の入力部102から何らかのイベントが発生するのを待機する処理である。イベントが発生すると、ステップS703において、CPU101がこのイベントを判別する。その後、ステップS704において、イベントの種類に応じて各種の処理を行う。ステップS704で行う処理としては、図8の説明で後述する検索処理、図9の説明で後述する写真登録処理、図10aの説明で後述するSDカード取り出し処理、図10cの説明で後述するその他の処理がある。なお、その他の処理としては、画面制御処理、写真撮影処理などの処理がある。次のステップS705は、上記の各処理の処理結果や処理終了を通知する画面を各処理の指示に従って表示部103に表示する処理である。例えば、検索結果を出力する画面表示、エラーがあった場合のエラー表示、正常な処理が行われた場合の画面表示など通常広く行われる処理である。図8は、ステップS703の判別結果が検索処理である場合のステップS704における検索処理手順の一例を示すフローチャートである。まず、ステップS801において、どのようなインデクスが存在し、有効あるいは無効であるかを調査する。そして、ステップS802において高速検索インデクスが存在し、かつ有効であるかどうかを判定する。この判定の結果、高速検索インデクスが存在し、かつ有効である場合はステップS803に分岐し、高速検索インデクスが存在しないまたは無効である場合はステップS804に分岐する。ステップS803においては、高速検索インデクスを使用して検索を実行し、検索結果を求める。そして、検索結果を出力し、処理を終了する。一方、ステップS804においては、低速検索インデクスを利用して検索を実行し、検索結果を求める。そして、ステップS805において、図6cに示した低速検索インデクス追加分が存在するかどうかを判定する。この判定の結果、低速検索インデクス追加分が存在しない場合は、そこまでの検索結果を出力し、処理を終了する。一方、ステップS805の判定の結果、低速検索インデクス追加分が存在する場合は、ステップS806において、低速検索インデクス追加分を使用した検索も実行し、検索結果を求める。その後、検索結果を先の低速検索インデクスを使用した検索結果とマージする。これにより低速検索インデクスと低速検索インデクス追加分との両方のインデクスに基づいた検索結果がマージされることになる。そして、マージされた検索結果を出力し、処理を終了する。図8に示すフローチャートの処理が終了すると、図7のステップS705では、検索結果を表示部103に表示することになる。図9は、ステップS703の判別結果が写真登録処理である場合のステップS704における写真登録処理の手順一例を示すフローチャートである。ステップS901において、登録する写真データをコンテンツ111に登録するとともに、検索に使用される属性を表に登録する。そして、ステップS902において、高速検索インデクスが存在するかどうかを判定する。この判定の結果、高速検索インデクスが存在すする場合はステップS904に進み、高速検索インデクス存在しない場合はステップS903に進む。ステップS903においては、属性を低速検索インデクスに登録、すなわち低速検索インデクスに挿入し、ステップS909にスキップする。一方、ステップS904においては、高速検索インデクスが存在する場合の処理であり、高速検索インデクスが有効であるかどうかを判定する。この判定の結果、高速検索インデクスが有効である場合は、ステップS905において、高速検索インデクスを無効化し、その後、ステップS906に進む。一方、ステップS904の判定の結果、高速検索インデクスが無効である場合は、ステップS906に進む。次に、ステップS906において、低速検索インデクス追加分が既に存在しているかどうかを判定する。この判定の結果、低速検索インデクス追加分が存在する場合はステップS908にスキップする。一方、ステップS906の判定の結果、低速検索インデクス追加分が存在しない場合は、ステップS907において、低速検索インデクス追加分を生成し、ステップS908に進む。次に、ステップS908において、属性を低速検索インデスク追加分に挿入する。そして、ステップS909において、図10dの説明で後述する無挿入段階検知処理、すなわち、今後のデータの挿入が起こりそうにないかどうかを判定して起こりそうにない場合に高速検索インデクスを生成するインデクス生成処理を行い、処理を終了する。図10aは、ステップS703の判別結果がSDカード取り出し処理である場合のステップS704におけるSDカード取り出し処理の手順の一例を示すフローチャートである。SDカードの取り出しがオペレータから指示されると処理を開始する。そして、ステップS1001において、図10bの説明で後述する高速検索インデクスを生成する処理を行う。この処理は、物理的にSDカードを取り出す前に行う。このように高速検索インデクスが生成された後に、ステップS1002において、物理的なSDカードの取り出しに関わる処理を行い、処理を終了する。具体的には、SDカードのイジェクト処理、あるいは、SDカードが取り出し可能であることを表示部103に表示する処理などである。図10bは、図10aのステップS1001及び後述する図10dのステップS1015における高速検索インデクスを生成する詳細な処理手順の一例を示すフローチャートである。まず、ステップS1003において、低速検索インデクス追加分が存在するかどうかを判定する。この判定の結果、低速検索インデクス追加分が存在しない場合はステップS1005にスキップし、低速検索インデクス追加分が存在する場合はステップS1004に進む。ステップS1004においては、低速検索インデクス追加分を低速検索インデクスにマージする処理を行う。そして、ステップS1005において、高速検索インデクスが存在するかどうかを判定する。この判定の結果、高速検索インデクスが存在する場合はステップS1006に進み、高速検索インデクスが存在しない場合はステップS1007に進む。ステップS1006においては、高速検索インデクスが有効であるかどうかを判定する。この判定の結果、高速検索インデクスが有効である場合は処理を終了し、高速検索インデクスが有効でない場合はステップS1007に進む。そして、ステップS1007において、図11の説明で後述する低速検索インデクスから高速検索インデクスを作成する処理を実行する。その後、処理を終了する。図10cは、ステップS703の判別結果がその他の処理である場合のステップS704における処理手順の一例を示すフローチャートである。ステップS1008において、イベントの種類に応じて定まる処理を遂行する。例えば、画面制御関係のイベントであれば画面制御処理、写真撮影関係のイベントであれば写真撮影処理を遂行することになる。そして、ステップS1009において、図10dの説明で後述する無挿入段階検知処理、すなわち、今後のデータの挿入が起こりそうにないかどうかを判定して起こりそうにない場合に高速検索インデクスを生成する処理を行い、処理を終了する。図10dは、図9のステップS909及び図10cのステップS1009における無挿入段階検知処理の詳細な処理手順の一例を示すフローチャートである。まず、ステップS1010において、SDカードへデータの挿入が行われた直近の日時情報を、挿入されたデータから取得する。そして、ステップS1011において、その日時が所定の日よりも以前であるかどうかを判定する。この判定の結果、所定の日よりも以前である場合、すなわち、長期間SDカードへデータの挿入が行われていない場合は、ステップS1015に進み、図10bで説明した高速検索インデクスを作成する処理を行い、処理を終了する。一方、ステップS1011の判定の結果、所定の日よりも以前でない場合は、ステップS1012において、SDカードの使用可能な残り容量を算出する。そして、ステップS1013において、その残り容量が所定サイズ以下であるかどうかを判定する。この判定の結果、残り容量が所定サイズ以下である場合は、前述のステップS1015に進み、残り容量が所定サイズを超えている場合はステップS1014に進む。そして、ステップS1014において、SDカードにライトプロテクト状態、すなわち書込み禁止が設定されているかどうかを判定する。この判定は、SDカードの特定の領域を読み出してフラグを判定することにより行うことができる。この判定の結果、ライトプロテクト状態である場合は、前述のステップS1015に進み、ライトプロテクト状態でない場合は、処理を終了する。図11は、図10bのステップS1007における低速検索インデクスから高速検索インデクスを作成する詳細な処理手順の一例を示すフローチャートである。まず、ステップS1101において、低速検索インデクス及び高速検索インデクスの最下層の最初のノードを設定する。すなわち、低速検索インデクスの最下層の最初のノードをカレントノードとしてポインタを設定して高速検索インデクスの最下層の最初のノードを生成し、カレントノードと設定する。次に、ステップS1102において、低速検索インデクスのカレントノードの最初のセルをカレントセルとしてポインタを設定する。そして、ステップS1103において、低速検索インデクスの最下層のすべてのノードについて処理が終了したかどうかを判定する。この判定の結果、最下層のすべてのノードについて処理が終了した場合はステップS1112に進む。一方、ステップS1103の判定の結果、最下層のすべてのノードについて処理が終了していない場合は、ステップS1104において、低速検索インデクスのカレントノードからカレントセルを1つ取得する。そして、ステップS1105において低速検索インデクスの1つのカレントノードからすべてのセルを取得したかどうか判定する。この判定の結果、すべてのセルを取得した場合はステップS1111において、低速検索インデクスのカレントノードが次のノードを指すようポインタをずらし、ステップS1102に戻る。一方、ステップS1105の判定の結果、すべてのセルを取得していない場合はステップS1106に進む。次に、ステップS1106において、高速検索インデクスのカレントノードの容量が満タンになっているかどうかを判定する。この判定の結果、容量が満タンになっている場合はステップS1107に進み、容量にまだ余裕がある場合はステップS1108にスキップする。ステップS1107においては、高速検索インデクスの次のノードを生成し、カレントノードとする。次に、ステップS1108において、高速検索インデクスのカレントノードにステップS1104で取得したセルの内容を付加する。そして、ステップS1109において、高速検索インデクスのカレントノードのノードID及び先頭キーの情報を記録したノードID/先頭キー対応表の情報を更新する。そして、ステップS1110において、低速検索インデクスのカレントノードのカレントセルが次のセルを指すようポインタをずらし、ステップS1104に戻る。一方、ステップS1112においては、高速検索インデクスの上位層の最初のノードを設定する。すなわち、高速検索インデクスの上位層の最初のノードを生成し、カレントノードとする。次に、ステップS1113において、ノードID/先頭キー対応表を参照し、高速検索インデクスの下層ノードの先頭キーとノードIDとからなるセルを生成し、高速検索インデクスのカレントノードにセルの内容を付加していく。そして、ステップS1114において、カレントノードのノードID及び先頭キーの情報を記録したノードID/先頭キー対応表の情報を更新する。次に、ステップS1115において、カレントノードの容量が満タンになったかどうかを判定する。この判定の結果、容量にまだ余裕がある場合は、ステップS1117に進み、容量が満タンになった場合はステップS1116に進み、次の上位層ノードを設定し、カレントノードとする。次に、ステップS1117において、高速検索インデクスのすべての下層ノードに対して処理が終了したかどうかを判定する。この判定はどこからもリンクされないノードが唯一になったかどうかすなわちルートノードのみになったかどうかを判定することにより行われる。この判定の結果、すべての下層ノードに対して処理が終了した場合は処理を終了する。一方、ステップS1117の判定の結果、全ての下層ノードに対して処理が終了していない場合は、ステップS1118において、次のどこからもリンクされない最も下層のノードを取得してカレントノードとし、ステップS1113に戻る。以上のように本実施形態によれば、データの挿入が発生する可能性のある段階においては、インデクスに空き領域を十分にとって挿入が高速となるようにする。そして、挿入が発生する可能性が低くなった段階を検知して、インデクスの空き領域を大幅に削減し、挿入が低速となるが高速に検索可能なインデクスを生成するようにした。これにより、閲覧が主目的となった段階での検索を高速化できる。また、そのようにインデクスを検索に最適化した状態で、もう一度挿入が行われる場合にも、高速検索インデクスを無効化して元の低速検索インデクスを復活させ、そこにデータを挿入することにより、高速に挿入が可能となる。第2の実施形態第1の実施形態においては、高速検索インデクスを無効化した後に、低速検索インデクスから高速検索インデクスを再作成した。この場合、実際に再挿入するデータ量がごく少量であっても、高速検索インデクスの再作成に多大な時間がかかってしまう。本実施形態では、このような場合、途中で再挿入が行われるデータをロギングしておき、そのデータを高速検索インデクスに追加するよう制御する。本実施形態では、写真登録処理及び高速検索インデクス生成処理が第1の実施形態とは異なる。なお、それ以外については第1の実施形態と同様であるため、説明は省略する。図12は、本実施形態における写真登録処理の手順の一例を示すフローチャートである。なお、図12に示す各処理は、CPU101の制御により行われる。図12のステップS901~S909については、第1の実施形態で説明した図9のステップS901~S909と同じであるため、説明は省略する。本実施形態では、ステップS905の処理を行った後、ステップS1201において、挿入されたデータをロギングする。図13は、本実施形態における高速検索インデクスを生成する詳細な処理手順の一例を示すフローチャートである。なお、図13に示す各処理は、CPU101の制御により行われる。まず、ステップS1301において、高速検索インデクスが存在するかどうかを判定する。この判定の結果、高速検索インデクスが存在する場合はステップS1302に進み、高速検索インデクスが存在しない場合はステップS1304に進む。次に、ステップS1302においては、高速検索インデクスが有効であるかどうかを判定する。この判定の結果、高速検索インデクスが有効である場合はステップS1305にスキップする。一方、ステップS1302の判定の結果、高速検索インデクスが有効でない場合は、ステップS1303において、ロギングされていたクエリを高速検索インデクスに反映する。高速検索インデクスであるため、データの挿入は低速となってしまうが、挿入件数がごく少量である場合には高速検索インデクスを最初から作り直すよりも処理時間が短くて済む。その後、ステップS1305に進む。一方、ステップS1304においては、図11に示した手順により低速検索インデクスから高速検索インデクスを生成する。そして、ステップS1305において、低速検索インデクス追加分が存在するかどうかを判定する。この判定の結果、低速検索インデクス追加分が存在しない場合は処理を終了する。一方、ステップS1305の判定の結果、低速検索インデクス追加分が存在する場合は、ステップS1306において、低速検索インデクス追加分を低速検索インデクスにマージし、処理を終了する。以上のように本実施形態によれば、データの挿入が終了したと検知された後に、データの再挿入が行われる場合も、挿入するデータ数が少ない場合には、データを再挿入した後の高速検索インデクスの再作成時間を短縮することができる。その他の実施形態以上、実施形態を詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。なお、実施形態の検索装置100のCPU101はプログラムを実行することで各種の手段として機能する。CPU101と協調して動作するASICなどの制御回路がこれらの手段として機能してもよい。また、CPU101と制御回路との協調によってこれらの手段が実現されてもよい。また、CPU101は単一のものである必要はなく、複数であってもよい。この場合、複数のCPUは分散して処理を実行する。また、複数のCPUは単一のコンピュータに配置されていてもよいし、物理的に異なる複数のコンピュータに配置されていてもよい。なお、CPUがソフトウェアを実行することで実現する手段が専用の回路によって実現されてもよい。また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェアプログラムを、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータまたはCPUやMPU等がプログラムを読み出して実行する処理である。