(57)【要約】      （修正有）【課題】データの追加・削除がある場合においても効率的に指定されたデータを検索することができるデータ検索装置、プログラム、及びシステムを提供する。【解決手段】ベクトルデータと識別子との組を記憶するベクトルデータ記憶手段１７と、追加するベクトルデータを記憶する第１の追加データ記憶手段１８と、削除するベクトルデータの識別子を記憶する第１の削除データ記憶手段１９と、ベクトルデータ記憶手段１７から第１の索引１６１を作成し、第１の追加データ記憶手段１７から第２の索引１６２を作成する索引作成手段と、第１の追加データ記憶手段１８のデータ数が所定の値以上になった場合、ベクトルデータ記憶手段１７、第１の追加データ記憶手段１８、及び第１の削除データ記憶手段１９を更新するマージ手段１５と、第１の索引と第２の索引とから、ベクトルデータを検索する検索手段とを有する。【選択図】図３
2015156179.tif 000002
【特許請求の範囲】
【請求項１】
指定されたベクトルデータと最も近い値のベクトルデータを複数のベクトルデータから検索するデータ検索装置において、
ベクトルデータと該ベクトルデータを一意に識別する識別子との組を記憶するベクトルデータ記憶手段と、
前記ベクトルデータ記憶手段に追加するベクトルデータを記憶する第１の追加データ記憶手段と、
前記ベクトルデータ記憶手段から削除するベクトルデータの識別子を記憶する第１の削除データ記憶手段と、
前記ベクトルデータ記憶手段に記憶されているベクトルデータから第１の索引を作成し、前記第１の追加データ記憶手段に記憶されているベクトルデータから第２の索引を作成する索引作成手段と、
前記第１の追加データ記憶手段に記憶されているベクトルデータのデータ数が所定の値以上になった場合、前記ベクトルデータ記憶手段、前記第１の追加データ記憶手段、及び前記第１の削除データ記憶手段を更新するマージ手段と、
前記第１の索引と前記第２の索引とから、前記指定されたベクトルデータと最も近い値のベクトルデータを検索する検索手段と、
を有し、
前記索引作成手段は、前記マージ手段により更新が行われた場合、前記ベクトルデータ記憶手段に記憶されているベクトルデータから前記第１の索引を再作成し、前記第２の索引を削除する、データ検索装置。
【請求項２】
前記第１の追加データ記憶手段にベクトルデータを追加するデータ追加手段を有し、
前記索引作成手段は、
前記データ追加手段により前記第１の追加データ記憶手段にベクトルデータが追加された場合、前記第１の追加データ記憶手段に記憶されているベクトルデータから第２の索引を作成又は再作成する、請求項１記載のデータ検索装置。
【請求項３】
前記索引作成手段は、
前記データ追加手段により前記第１の追加データ記憶手段にベクトルデータが所定のデータ数以上追加された場合、前記第１の追加データ記憶手段に記憶されているベクトルデータから第２の索引を再作成する、請求項２記載のデータ検索装置。
【請求項４】
前記ベクトルデータ記憶手段に追加するベクトルデータを記憶する第２の追加データ記憶手段を有し、
前記データ追加手段は、前記マージ手段による更新中である場合、前記第２の追加データ記憶手段にベクトルデータを追加する、請求項２又は３記載のデータ検索装置。
【請求項５】
前記第１の削除データ記憶手段に削除するベクトルデータの識別子を追加する削除データ追加手段を有し、
前記削除データ追加手段は、
追加された識別子に対応するベクトルデータが前記第１の追加データ記憶手段に記憶されているベクトルデータである場合、前記追加された識別子に対応するベクトルデータを前記第１の追加データ記憶手段から削除する、請求項１ないし４いずれか１項に記載のデータ検索装置。
【請求項６】
前記ベクトルデータ記憶手段から削除するベクトルデータの識別子を記憶する第２の削除データ記憶手段を有し、
前記削除データ追加手段は、前記マージ手段による更新中である場合、前記第２の削除データ記憶手段に削除するベクトルデータの識別子を追加する、請求項５記載のデータ検索装置。
【請求項７】
前記第１の索引及び前記第２の索引は、ｋｄ木構造であり、
前記検索手段は、
前記第１の索引に基づいて、前記ベクトルデータ記憶手段に記憶されているベクトルデータのうち、前記指定されたベクトルデータと最も距離が小さい第１のベクトルデータを特定し、
前記第２の索引に基づいて、前記第１の追加データ記憶手段に記憶されているベクトルデータのうち、前記指定されたベクトルデータと最も距離が小さい第２のベクトルデータを特定し、
前記第１のベクトルデータと前記指定されたベクトルデータとの第１の距離と、前記第２のベクトルデータと前記指定されたベクトルデータとの第２の距離とを比較することにより、前記指定されたベクトルデータと最も近い値のベクトルデータを検索する、請求項１ないし６のいずれか１項に記載のデータ検索装置。
【請求項８】
前記検索手段は、
前記ベクトルデータ記憶手段に記憶されているベクトルデータのうち、該ベクトルデータの識別子が前記第１の削除データ記憶手段に記憶されている場合、前記ベクトルデータと前記指定されたベクトルデータとの距離を無限大とする、請求項７記載のデータ検索装置。
【請求項９】
索引作成手段は、さらに、第２の追加データ記憶手段に記憶されているベクトルデータから第３の索引を作成し、
前記検索手段は、前記第１の索引と前記第２の索引と前記第３の索引とから、前記指定されたベクトルデータと最も近い値のベクトルデータを検索する、請求項８記載のデータ検索装置。
【請求項１０】
前記第１の索引を記憶する索引記憶手段と、
前記索引記憶手段から前記第１の索引を取得する索引取得手段を有し、
前記索引取得手段は、前記データ検索装置の起動時に、前記索引記憶手段から前記第１の索引を取得する、請求項１ないし９いずれか１項に記載のデータ検索装置。
【請求項１１】
指定されたベクトルデータと最も近い値のベクトルデータを複数のベクトルデータから検索するコンピュータを、
ベクトルデータと該ベクトルデータを一意に識別する識別子との組を記憶するベクトルデータ記憶手段に記憶されているベクトルデータから第１の索引を作成し、前記ベクトルデータ記憶手段に追加するベクトルデータを記憶する追加データ記憶手段に記憶されているベクトルデータから第２の索引を作成する索引作成手段、
前記追加データ記憶手段に記憶されているベクトルデータのデータ数が所定の値以上になった場合、前記ベクトルデータ記憶手段、前記追加データ記憶手段、及び前記ベクトルデータ記憶手段から削除するベクトルデータの識別子を記憶する削除データ記憶手段を更新するマージ手段、
前記第１の索引と前記第２の索引とから、前記指定されたベクトルデータと最も近い値のベクトルデータを検索する検索手段、
として機能させ、
前記索引作成手段は、前記マージ手段により更新が行われた場合、前記ベクトルデータ記憶手段に記憶されているベクトルデータから前記第１の索引を再作成し、前記第２の索引を削除する、プログラム。
【請求項１２】
１台以上の端末装置と、該端末装置から指定されたベクトルデータと最も近い値のベクトルデータを複数のベクトルデータから検索するデータ検索装置とを有するデータ検索システムにおいて、
ベクトルデータと該ベクトルデータを一意に識別する識別子との組を記憶するベクトルデータ記憶手段と、
前記ベクトルデータ記憶手段に追加するベクトルデータを記憶する追加データ記憶手段と、
前記ベクトルデータ記憶手段から削除するベクトルデータの識別子を記憶する削除データ記憶手段と、
前記ベクトルデータ記憶手段に記憶されているベクトルデータから第１の索引を作成し、前記追加データ記憶手段に記憶されているベクトルデータから第２の索引を作成する索引作成手段と、
前記追加データ記憶手段に記憶されているベクトルデータのデータ数が所定の値以上になった場合、前記ベクトルデータ記憶手段、前記追加データ記憶手段、及び前記削除データ記憶手段を更新するマージ手段と、
前記第１の索引と前記第２の索引とから、前記指定されたベクトルデータと最も近い値のベクトルデータを検索する検索手段と、
を有し、
前記索引作成手段は、前記マージ手段により更新が行われた場合、前記ベクトルデータ記憶手段に記憶されているベクトルデータから前記第１の索引を再作成し、前記第２の索引を削除する、データ検索システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ検索装置、プログラム、及びデータ検索システムに関する。
【背景技術】
【０００２】
従来より、ｋｄ木と呼ばれるデータ構造が知られている。ｋｄ木は、ｋ次元ユークリッド空間にある点を分類する空間分割データ構造であり、多次元ベクトルにおける最近傍検索（最近傍探索）などの用途に利用できることが知られている。このようなｋｄ木による最近傍検索を用いたデータ検索装置において、効率よく検索を行うためには、ｋｄ木を平衡木（バランス木）にする必要があることが知られている。
【０００３】
また、利用者からみた登録・削除処理のレスポンス時間を短くした転置ファイルを用いた全文検索装置が従来より知られている（例えば特許文献１参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、ｋｄ木による最近傍検索を用いたデータ検索装置においては、データの追加や削除が行われるたびに、平衡木を維持するためにｋｄ木を再構成する必要があった。したがって、データ数が多い場合、ｋｄ木の再構成に時間が掛かり、この間、ユーザ待ち時間が発生するという問題がある。
【０００５】
一方、転置ファイルを用いた全文検索装置においては、ｋｄ木を用いていないため探索アルゴリズムが異なり、上記問題を解決することはできない。
【０００６】
本発明の一実施形態は、上記の点に鑑みてなされたものであり、データの追加・削除がある場合においても効率的に指定されたデータを検索することができるデータ検索装置、プログラム、及びデータ検索システムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため、本発明の一実施形態は、指定されたベクトルデータと最も近い値のベクトルデータを複数のベクトルデータから検索するデータ検索装置において、ベクトルデータと該ベクトルデータを一意に識別する識別子との組を記憶するベクトルデータ記憶手段と、前記ベクトルデータ記憶手段に追加するベクトルデータを記憶する第１の追加データ記憶手段と、前記ベクトルデータ記憶手段から削除するベクトルデータの識別子を記憶する第１の削除データ記憶手段と、前記ベクトルデータ記憶手段に記憶されているベクトルデータから第１の索引を作成し、前記第１の追加データ記憶手段に記憶されているベクトルデータから第２の索引を作成する索引作成手段と、前記第１の追加データ記憶手段に記憶されているベクトルデータのデータ数が所定の値以上になった場合、前記ベクトルデータ記憶手段、前記第１の追加データ記憶手段、及び前記第１の削除データ記憶手段を更新するマージ手段と、前記第１の索引と前記第２の索引とから、前記指定されたベクトルデータと最も近い値のベクトルデータを検索する検索手段と、を有し、前記索引作成手段は、前記マージ手段により更新が行われた場合、前記ベクトルデータ記憶手段に記憶されているベクトルデータから前記第１の索引を再作成し、前記第２の索引を削除する、ことを特徴とする。
【発明の効果】
【０００８】
本発明の一実施形態によれば、データの追加・削除がある場合においても効率的に指定されたデータを検索することができる。
【図面の簡単な説明】
【０００９】
【図１】第一の実施形態に係るデータ検索システムの一例の構成図である。
【図２】第一の実施形態に係るコンピュータの一例のハードウェア構成図である。
【図３】第一の実施形態に係るデータ検索装置の一例のソフトウェア構成図である。
【図４】多次元ベクトルデータの一例の構成図である。
【図５】追加用ベクトルデータの一例の構成図である。
【図６】削除データの識別子の一例の構成図である。
【図７】ｋｄ木索引の一例を説明するための図である。
【図８】第一の実施形態に係るｋｄ木索引作成処理の一例のフローチャートである。
【図９】第一の実施形態に係るデータ追加処理の一例のフローチャートである。
【図１０】第一の実施形態に係るｋｄ木索引へのデータ挿入処理の一例のフローチャートである。
【図１１】第一の実施形態に係るデータ削除処理の一例のフローチャートである。
【図１２】第一の実施形態に係るデータ検索処理の一例のフローチャートである。
【図１３】第一の実施形態に係る最近傍検索処理の一例のフローチャートである。
【図１４】第一の実施形態に係るマージ処理の一例のフローチャートである。
【図１５】第二の実施形態に係るデータ追加処理の一例のフローチャートである。
【図１６】第三の実施形態に係るデータ検索装置の一例のソフトウェア構成図である。
【図１７】第三の実施形態に係るマージ処理の一例のフローチャートである。
【図１８】第四の実施形態に係るデータ検索装置の一例のソフトウェア構成図である。
【発明を実施するための形態】
【００１０】
次に、本発明の実施の形態について、詳細に説明する。
［第一の実施形態］
＜システム構成＞
図１は、第一の実施形態に係るデータ検索システムの一例の構成図である。図１のデータ検索システム１は、データ検索装置１０と、端末装置２０とがネットワークＮ１に有線や無線で接続されている。
【００１１】
データ検索装置１０は、記憶領域に記憶されている複数のデータ（多次元ベクトルデータ）から、指定されたデータに最も近い値のデータを検索する装置である。また、データ検索装置１０は、端末装置２０から要求（リクエスト）に対して応答（レスポンス）できる。したがって、データ検索装置１０は、端末装置２０から検索要求とデータを受け取り、受け取ったデータに最も近い値のデータを端末装置２０に送信することができる。また、データ検索装置１０は、端末装置２０などからの要求により、記憶領域に記憶されているデータの追加や削除を行うことができる。
【００１２】
端末装置２０は、データ検索装置１０にアクセス可能である。端末装置２０は、データ検索装置１０に対して、データを指定して検索要求を行うことができる。また、端末装置２０は、データ検索装置１０に対してデータの追加要求や削除要求を行うことができる。
【００１３】
なお、図１において、端末装置２０は２台以上ある構成であってもよい。また、端末装置２０がない構成であってもよい。すなわち、データ検索装置１０は、例えばスタンドアロンであってもよい。
【００１４】
＜ハードウェア構成＞
第一の実施形態に係るデータ検索装置１０及び端末装置２０は、例えば図２に示すようなハードウェア構成のコンピュータ等により実現される。図２は、第一の実施形態に係るコンピュータの一例のハードウェア構成図である。
【００１５】
図２に示すコンピュータ１００は、入力装置１０１、表示装置１０２、外部Ｉ／Ｆ１０３、ＲＡＭ（Random Access Memory）１０４、ＲＯＭ（Read Only Memory）１０５、ＣＰＵ（Central Processing Unit）１０６、通信Ｉ／Ｆ１０７、ＨＤＤ（Hard Disk Drive）１０８を有し、それぞれバスＢ１で相互に接続されている。
【００１６】
入力装置１０１は、キーボードやマウス、タッチパネルなどを含み、コンピュータ１００に各操作信号を入力するのに用いられる。表示装置１０２は、ＬＣＤ（Liquid Crystal Display）やＣＲＴ（Cathode Ray Tube）などを含み、コンピュータ１００による処理結果を表示する。なお、入力装置１０１及び／又は表示装置１０２がない構成であってもよい。
【００１７】
外部Ｉ／Ｆ１０３は、外部装置とのインタフェースである。外部装置には、記録媒体１０３ａなどがある。記憶媒体１０３ａには、実施形態を実現するプログラムを格納することができる。コンピュータ１００は外部Ｉ／Ｆ１０３を介して、記録媒体１０３ａの読み取り及び／又は書き込みを行うことができる。
【００１８】
記録媒体１０３ａにはＵＳＢメモリ（Universal Serial Bus memory）、ＳＤメモリカード（SD Memory card）、ＤＶＤ（Digital Versatile Disk）、ＣＤ（Compact Disk）、フレキシブルディスクなどの記録媒体を用いることができる。
【００１９】
ＲＡＭ１０４は、プログラムやデータを一時保持する揮発性の半導体メモリ（記憶装置）である。ＲＯＭ１０５は、電源を切ってもプログラムやデータを保持することができる不揮発性の半導体メモリ（記憶装置）である。ＲＯＭ１０５には、コンピュータ１００の起動時に実行されるＢＩＯＳ（Basic Input/Output System）、ＯＳ（Operating System）設定、及びネットワーク設定などのプログラムやデータが格納されている。
【００２０】
ＣＰＵ１０６は、ＲＯＭ１０５やＨＤＤ１０８などの記憶装置からプログラムやデータをＲＡＭ１０４上に読み出し、処理を実行することで、コンピュータ１００全体の制御や機能を実現する演算装置である。
【００２１】
通信Ｉ／Ｆ１０７は、ネットワークに接続するインタフェースである。これにより、コンピュータ１００は通信Ｉ／Ｆ１０７を介してデータ通信を行うことができる。なお、通信Ｉ／Ｆ１０７による通信は有線通信であっても無線通信であってもよい。
【００２２】
ＨＤＤ１０８は、プログラムやデータを格納している不揮発性の記憶装置である。格納されるプログラムやデータには、例えば、コンピュータ１００全体を制御する基本ソフトウェアであるＯＳや、ＯＳ上において各種機能を提供するアプリケーションソフトウェアなどがある。ＨＤＤ１０８は格納しているプログラムやデータを所定のファイルシステム及び／又はＤＢ（Data Base）により管理している。
【００２３】
第一の実施形態に係るデータ検索装置１０及び端末装置２０は、例えば上記のハードウェア構成のコンピュータ１００上でプログラムを実行することにより、後述するような各種処理を実現できる。
【００２４】
＜ソフトウェア構成＞
《データ検索装置》
データ検索装置１０は、例えば図３に示すような機能ブロックにより表すことができる。図３は、第一の実施形態に係るデータ検索装置の一例のソフトウェア構成図である。
【００２５】
データ検索装置１０は、検索処理部１１、追加処理部１２、削除処理部１３、索引作成部１４、マージ部１５、索引記憶部１６、ベクトルデータ記憶部１７、追加データ記憶部１８、削除データ記憶部１９を有している。
【００２６】
検索処理部１１は、データの検索要求があった場合、索引記憶部１６に記憶されているｋｄ木索引（メイン）１６１とｋｄ木索引（サブ）１６２に基づいて、端末装置２０などから指定された多次元ベクトルデータと最も近い値の多次元ベクトルデータを検索する。
【００２７】
追加処理部１２は、データの追加要求があった場合、端末装置２０などから指定された多次元ベクトルデータを追加データ記憶部１８に追加する。また、追加処理部１２は、ｋｄ木索引（サブ）１６２に対して、追加した多次元ベクトルデータのノード（又はリーフ）を挿入してｋｄ木索引（サブ）１６２を再作成する。
【００２８】
削除処理部１３は、データの削除要求があった場合、削除データ記憶部１９に削除対象の多次元ベクトルデータの識別子を追加する。また、このとき、削除処理部１３は、削除対象の多次元ベクトルデータが追加データ記憶部１８に記憶されている場合、該当の多次元ベクトルデータを削除する。なお、識別子とは、後述するように、多次元ベクトルデータを一意に識別するための情報である。
【００２９】
索引作成部１４は、ベクトルデータ記憶部１７に記憶されている多次元ベクトルデータからｋｄ木索引（メイン）１６１を作成する。また、索引作成部１４は、追加データ記憶部１８に記憶されている多次元ベクトルデータからｋｄ木索引（サブ）１６２を作成する。
【００３０】
マージ部１５は、追加データ記憶部１８及び削除データ記憶部１９の内容をベクトルデータ記憶部１７に反映させる。また、このとき、マージ部１５は、ｋｄ木索引（メイン）１６１の再作成を索引作成部１４に依頼するとともに、ｋｄ木索引（サブ）１６２の削除を行う。
【００３１】
索引記憶部１６は、ｋｄ木索引（メイン）１６１及びｋｄ木索引（サブ）１６２を記憶する。ｋｄ木索引（メイン）１６１及びｋｄ木索引（サブ）１６２の構成については後述する。なお、索引記憶部１６は、ＲＡＭ１０４などの主記憶装置で実現することができる。
【００３２】
ベクトルデータ記憶部１７は、多次元ベクトルデータを記憶する。多次元ベクトルデータの構成については後述する。追加データ記憶部１８は、端末装置２０などから追加された多次元ベクトルデータ（追加用ベクトルデータ）を記憶する。削除データ記憶部１９は、削除対象の多次元ベクトルデータの識別子（削除データの識別子）を記憶する。なお、ベクトルデータ記憶部１７、追加データ記憶部１８、削除データ記憶部１９は、例えばＨＤＤ１０８又はデータ検索装置１０とネットワークを介して接続された記憶装置などにより実現することができる。
【００３３】
《多次元ベクトルデータ》
ベクトルデータ記憶部１７に記憶されている多次元ベクトルデータ１０００は、例えば図４に示すような構成を有している。図４は、多次元ベクトルデータの一例の構成図である。多次元ベクトルデータ１０００は、識別子、データ値などを有している。識別子は、各多次元ベクトルデータを一意に識別する情報である。データ値は、多次元ベクトルデータのデータ情報である。本実施形態では、一例として、多次元ベクトルデータのデータ値は、１０個の値の組（１０次元）であるとするが、これに限られない。すなわち、多次元ベクトルデータの次元は１１次元以上であってもよいし、１０次元未満であってもよい。
【００３４】
《追加用ベクトルデータ》
追加データ記憶部１８に記憶されている追加用ベクトルデータ２０００は、例えば図５に示すような構成を有している。図５は、追加用ベクトルデータの一例の構成図である。追加用ベクトルデータ２０００は、識別子、データ値などを有している。すなわち、追加用ベクトルデータ２０００は、多次元ベクトルデータ１０００と同様の構成を有している。ただし、追加用ベクトルデータ２０００の識別子の値は、多次元ベクトルデータ１０００の識別子の値と重複しない値である。
【００３５】
《削除のデータ》
削除データ記憶部１９に記憶されている削除データの識別子３０００及び削除データの識別子４０００は、例えば図６に示すような構成を有している。図６は、削除データの識別子の一例の構成図である。図６に示すように、削除データ記憶部１９は、ｋｄ木索引（メイン）１６１の削除データの識別子（すなわち、ベクトルデータ記憶部１７に記憶されているベクトルデータの識別子）とｋｄ木索引（サブ）１６２の削除データの識別子（すなわち、追加データ記憶部１８に記憶されているベクトルデータの識別子）を別に管理して記憶している。
【００３６】
図６（ａ）は、ｋｄ木索引（メイン）１６１の削除データの識別子３０００である。削除データの識別子３０００は、ベクトルデータ記憶部１７から削除するベクトルデータの識別子を有している。図（ｂ）は、ｋｄ木索引（サブ）１６２の削除データの識別子４０００である。削除データの識別子４０００は、追加データ記憶部１８から削除されたベクトルデータの識別子を有している。
【００３７】
《ｋｄ木索引》
ｋｄ木索引（メイン）１６１及びｋｄ木索引（サブ）１６２は、例えば図７に示すような構成を有している。図７は、ｋｄ木索引の一例を説明するための図である。
【００３８】
ｋｄ木索引は、分岐次元、識別子、データ値、左ノードへのリンク、右ノードへのリンクなどを有している。ｋｄ木索引は、ルート（根）ノードからリーフ（葉）までの二分木となっている。
【００３９】
識別子及びデータ値については、上述した図４の多次元ベクトルデータ１０００及び図５の追加用ベクトルデータ２０００と同様であるため説明を省略する。
【００４０】
分岐次元は、そのノードで分岐時に利用した次元である。例えば、図７に示すルートノードの分岐次元は「２」である。したがって、各多次元ベクトルデータについて２次元のデータ値に着目し、ルートノードの２次元のデータ値（すなわち「３２．０３」）より小さいデータ値の多次元ベクトルデータが右ノード以下に存在し、それ以外の多次元ベクトルデータが左ノードに存在するように分割している。なお、後述するように、多次元ベクトルデータの分岐次元は、各多次元ベクトルデータの各次元について分散を算出することで決定する。
【００４１】
左ノードへのリンク及び右ノードへのリンクは、次のノード（又はリーフ）へのリンク情報である。リンク情報には例えば識別子を用いればよい。なお、リーフは、分岐次元の値、左ノードへのリンク、及び右ノードへのリンクは存在しない、末端のノードのことである。
【００４２】
＜処理の詳細＞
次に、第一の実施形態に係るデータ検索システム１の処理の詳細について説明する。
【００４３】
《ｋｄ木索引作成処理》
まず、ｋｄ木索引（メイン）１６１を作成する処理について説明する。図８は、第一の実施形態に係るｋｄ木索引作成処理の一例のフローチャートである。
【００４４】
ステップＳ１１において、索引作成部１４は、ベクトルデータ記憶部１７に記憶されている多次元ベクトルデータをすべて取得する。ただし、ステップＳ１１は、ｋｄ木索引作成処理が始めに処理される場合にのみ行う。換言すれば、ステップＳ１１は、後述するステップＳ１６及びステップＳ１７においてｋｄ木索引作成処理が再帰的に呼び出された場合には実行されない。
【００４５】
ステップＳ１２において、索引作成部１４は、ステップＳ１１で取得した多次元ベクトルデータ（又は、再帰的にｋｄ木索引作成処理が呼び出された場合には、右ノードの集合又は左ノードの集合の多次元ベクトルデータ）が２以上であるか否かを判定する。２以上である場合、ステップＳ１３に進み、２以上でない場合、ステップＳ１８に進む。
【００４６】
ステップＳ１３において、索引作成部１４は、各多次元ベクトルデータの各次元について、分散の値を算出する。そして、索引作成部１４は、分散の値が最も大きい次元を求める。なお、後述するように、ここで求めた次元が図７で説明した分岐次元である。
【００４７】
例えば、ステップＳ１４で取得したすべての多次元ベクトルデータの１次元の各データ値について分散を算出する。次に、同様に２次元の各データ値について分散を算出する。以降、これをすべての次元について繰り返して各次元の分散を算出する。そして、算出した各分散について、最も分散が大きい次元を決定する。
【００４８】
ステップＳ１４において、索引作成部１４は、各多次元ベクトルデータについてステップＳ１３で求めた次元に着目し、多次元ベクトルデータをソートする。なお、ソートは昇順又は降順のどちらでもよい。
【００４９】
ステップＳ１５において、索引作成部１４は、ソートした各多次元ベクトルデータについて中央値を持つ多次元ベクトルデータを特定する。すなわち、各多次元ベクトルデータにおいて、ステップＳ１３で求めた次元のデータ値について中央値を持つ多次元ベクトルデータを特定する。そして、この特定した多次元ベクトルデータをｋｄ木索引（メイン）１６１のノードとして、ステップＳ１３で求めた次元を分岐次元として付加する。つまり、ｋｄ木索引作成処理が始めに実行された場合、この特定した多次元ベクトルデータはｋｄ木索引（メイン）１６１のルートノードとなる。なお、中央値を持つ多次元ベクトルデータが２以上存在する場合、いずれか１つの多次元ベクトルデータを選択すればよい。
【００５０】
そして、ステップＳ１３で求めた次元のデータ値について、この中央値より小さいデータ値を持つ多次元ベクトルデータを右ノードの集合、中央値より大きいデータ値を持つ多次元ベクトルデータを左ノードの集合として、２つの集合に分割する。なお、中央値と同じ値を持つ多次元ベクトルデータは右ノードの集合又は左ノードの集合のいずれか１つを選択すればよい（このことは、以降で説明する処理においても同様である）。
【００５１】
ステップＳ１６において、索引作成部１４は、右ノードの集合に対して、ｋｄ木索引作成処理を行う。すなわち、索引作成部１４は、右ノードの集合に対して、ｋｄ木索引作成処理を再帰的に実行する。そして、再帰的に実行されたｋｄ木索引作成処理でノード（又はリーフ）とした多次元ベクトルデータの識別子をステップＳ１５で特定した多次元ベクトルデータ（すなわち、親ノードの多次元ベクトルデータ）の右ノードへのリンクとして付加する。
【００５２】
ステップＳ１７において、索引作成部１４は、ステップＳ１６と同様に、左ノードの集合に対して、ｋｄ木索引作成処理を行う。また、索引作成部１４は、ステップＳ１６と同様に、親ノードの多次元ベクトルデータの左ノードへのリンクを付加する。
【００５３】
ステップＳ１８において、索引作成部１４は、多次元ベクトルデータがある場合、その多次元ベクトルデータをリーフ（又は、ベクトルデータ記憶部１７のデータ数が１つである場合はルートノード）とする。
【００５４】
以上により、第一の実施形態におけるデータ検索装置１０は、ベクトルデータ記憶部１７からｋｄ木索引（メイン）１６１を作成することができる。また、上記のｋｄ木索引作成処理において、分散が最も大きい次元を分岐次元として選択することで、ｋｄ木索引（メイン）１６１を平衡木となるように構成することができる（データ数によっては平衡木にならない場合もあるが、平衡木に近い二分木を構成することができる）。したがって、後述する最近傍検索処理において、効率よく最近傍の多次元ベクトルデータを検索することができる。なお、上記のｋｄ木索引作成処理において、入力する多次元ベクトルデータを追加データ記憶部１８から取得することで、ｋｄ木索引（サブ）１６２を作成することができる。
【００５５】
《データ追加処理》
次に、端末装置２０などからデータの追加要求が行われ、多次元ベクトルデータがデータ検索装置１０に追加される場合の処理について説明する。図９は、第一の実施形態に係るデータ追加処理の一例のフローチャートである。
【００５６】
ステップＳ２１において、追加処理部１２は、追加データ記憶部１８に端末装置２０などから指定された多次元ベクトルデータを追加する。なお、このとき、追加処理部１２は、追加した多次元ベクトルデータに識別子を付加する。
【００５７】
ステップＳ２２において、追加処理部１２は、ｋｄ木索引（サブ）１６２にステップＳ２１で追加した多次元ベクトルデータのノードを挿入する。ステップＳ２２におけるｋｄ木索引へのデータ挿入処理の詳細は後述する。
【００５８】
ステップＳ２３において、追加処理部１２は、追加データ記憶部１８のデータ数が所定の閾値に達していた場合、マージ処理を起動させる。ステップＳ２３におけるマージ処理の詳細については後述する。なお、所定の閾値は、例えばデータ検索システム１の管理者などが値を変更することができる。
【００５９】
以上により、第一の実施形態におけるデータ検索装置１０は、端末装置２０などからの要求により多次元ベクトルデータを追加、及び追加したデータのノードをｋｄ木索引（サブ）１６２に追加（挿入）することができる。また、データ検索装置１０は、追加データ記憶部１８のデータ数が所定の閾値に達した場合、追加データ記憶部１８の内容をベクトルデータ記憶部１７へ追加し、ｋｄ木索引（サブ）１６２の内容をｋｄ木索引（メイン）１６１に挿入する処理を行うマージ処理を起動させる。したがって、第一の実施形態におけるデータ検索システム１は、端末装置２０などからデータ検索装置１０に対してデータの追加要求を行った場合のユーザ待ち時間（レスポンスタイム）を短くすることができる。
【００６０】
《ｋｄ木索引へのデータ挿入処理》
次に、図９のステップＳ２２の処理の詳細について説明する。図１０は、第一の実施形態に係るｋｄ木索引へのデータ挿入処理の一例のフローチャートである。
【００６１】
ステップＳ３１において、追加処理部１２は、追加した多次元ベクトルデータとｋｄ木索引（サブ）１６２の各ノードの分岐次元の値を比較しながら、リーフまで辿る。
【００６２】
すなわち、追加処理部１２は、まず、ｋｄ木索引（サブ）１６２のルートノードの分岐次元のデータ値と追加した多次元ベクトルデータの同じ次元のデータ値を比較する。そして、追加した多次元ベクトルデータのデータ値の方が小さい場合、追加処理部１２は、右ノードへのリンクに指定されているノードについて、同様に多次元ベクトルデータとこのノード分岐次元の値を比較する。一方、追加した多次元ベクトルデータのデータ値の方が大きい場合、左ノードへのリンクに指定されているノードについて、同様に多次元ベクトルデータとこのノード分岐次元の値を比較する。以降、追加処理部１２は、ｋｄ木索引（サブ）１６２のリーフに辿りつくまでこれを繰り返す。
【００６３】
ステップＳ３２において、追加処理部１２は、ステップＳ３１で辿りついたリーフの各次元のデータ値と、追加した多次元ベクトルデータの対応する各次元のデータ値を比較する。そして、追加処理部１２は、差が最も大きな次元を分岐次元とする。換言すれば、各次元について、このリーフと追加した多次元ベクトルデータの分散が最も大きい次元を分岐次元とする。
【００６４】
ステップＳ３３において、追加処理部１２は、リーフと追加した多次元ベクトルデータの分岐次元のデータ値を比較し、多次元ベクトルデータのデータ値の方が小さい場合、追加した多次元ベクトルデータをこのリーフの右ノードとする。一方、多次元ベクトルデータのデータ値の方が大きい場合、追加した多次元ベクトルデータのデータをこのリーフの左ノードとする。なお、このとき、追加処理部１２は、このリーフに分岐次元と、右ノードへのリンク又は左ノードへのリンクの情報を付加する。
【００６５】
以上により、第一の実施形態におけるデータ検索装置１０は、端末装置２０などから追加された多次元ベクトルデータに基づいて、ｋｄ木索引（サブ）１６２に、この追加された多次元ベクトルデータのノードを挿入することができる。
【００６６】
《データ削除処理》
次に、端末装置２０などからデータの削除要求が行われた場合の処理について説明する。図１１は、第一の実施形態に係るデータ削除処理の一例のフローチャートである。
【００６７】
ステップＳ４１において、削除処理部１３は、端末装置２０などからデータの削除要求が行われたデータについて、ｋｄ索引（サブ）１６２のデータか否かを判定する。換言すると、削除処理部１３は、削除要求が、追加データ記憶部１８に記憶されているベクトルデータに対して行われたものか、ベクトルデータ記憶部１７に記憶されているベクトルデータに対して行われたものかを判定する。データの削除要求が行われたデータが、ｋｄ索引（サブ）１６２のデータである場合、ステップＳ４２に進み、ｋｄ索引（サブ）１６２のデータでない場合（ｋｄ索引（メイン）１６１のデータである場合）、ステップＳ４４に進む。なお、端末装置２０などからの削除要求には、削除対象の多次元ベクトルデータの識別子に関する情報が含まれている。
【００６８】
ステップＳ４２において、削除処理部１３は、追加データ記憶部１８から削除要求に係るデータを削除する。
【００６９】
ステップＳ４３において、削除処理部１３は、削除データ記憶部１９のｋｄ木索引（サブ）の削除データの識別子に削除要求に含まれる識別子を追加する。
【００７０】
ステップＳ４４において、削除処理部１３は、削除データ記憶部１９のｋｄ木索引（メイン）の削除データの識別子に削除要求に含まれる識別子を追加する。このように、削除要求に係るデータがベクトルデータ記憶部１７のデータである場合、後述するマージ処理が実行されるまでベクトルデータ記憶部１７から該当の多次元ベクトルデータは削除しない。
【００７１】
以上により、第一の実施形態に係るデータ検索装置１０は、削除要求に係るデータが追加データ記憶部１８のデータである場合、削除要求に含まれる識別子を削除データ記憶部１９に追加し、該当の多次元ベクトルデータを追加データ記憶部１８から削除する。一方、削除要求に係るデータがベクトルデータ記憶部１７のデータである場合は、ベクトルデータ記憶部１７からはまだデータを削除せずに、削除要求に含まれる識別子を削除データ記憶部１９に追加する。これにより、第一の実施形態におけるデータ検索システム１は、端末装置２０などからデータ検索装置１０に対してデータの削除要求を行った場合のユーザ待ち時間（レスポンスタイム）を短くすることができる。
【００７２】
《データ検索処理》
次に、端末装置２０などからデータを指定して検索要求が行われた場合について、データ検索装置１０でこの指定されたデータに最も近い値のデータを検索する処理について説明する。図１２は、第一の実施形態に係るデータ検索処理の一例のフローチャートである。
【００７３】
ステップＳ５１において、検索処理部１１は、削除データ記憶部１９から削除データの識別子の一覧を取得する。これは、後述する最近傍検索処理で使用するためである。
【００７４】
ステップＳ５２において、検索処理部１１は、ｋｄ木索引（メイン）１６１を用いて、指定されたデータ（多次元ベクトルデータ）の最近傍のデータを検索する。このステップＳ５２における最近傍検索処理の詳細については後述する。
【００７５】
ステップＳ５３において、検索処理部１１は、ｋｄ木索引（サブ）１６２を用いて、指定されたデータの最近傍のデータを検索する。このステップＳ５３における最近傍検索処理の詳細については後述する。
【００７６】
ステップＳ５４において、検索処理部１１は、ステップＳ５２から得られた最近傍のデータとステップＳ５３から得られた最近傍のデータを比較し、指定されたデータとより近いデータを選択する。そして、検索処理部１１は、選択したデータを検索要求を行った端末装置２０などに送信する。
【００７７】
以上により、第一の実施形態におけるデータ検索装置１０は、端末装置２０などからデータを指定して検索要求が行われた場合、この指定されたデータと最も近い値のデータを検索して、返信することができる。したがって、例えば端末装置２０から画像データを指定した検索要求が行われた場合、データ検索装置１０は、この画像データに最も近い値の画像データ（類似画像データ）を検索して、返信することができる。
【００７８】
《最近傍検索処理》
次に、図１２のステップＳ５２及びステップＳ５３における最近傍検索処理について説明する。図１３は、第一の実施形態に係る最近傍検索処理の一例のフローチャートである。図１３は、ｋｄ木索引を用いた一般的な最近傍検索処理に対して、ノードのデータが削除されたか否かを判定する処理を追加したものである。なお、図１３において、端末装置２０などから指定されたデータをクエリと表すこととする。また、図１３において、ｋｄ木索引（メイン）１６１とｋｄ木索引（サブ）１６２を区別せずに、単に、ｋｄ木索引と表すこととする。また、検索処理部１１は、ｋｄ木索引のルートノードから最近傍検索処理を開始する。換言すると、検索処理部１１は、最初に、ルートノードをカレントノードとして最近傍検索処理を開始する。なお、カレントノードとは、ｋｄ木索引のノードのうち、現在着目しているノードをいう。
【００７９】
ステップＳ６１において、検索処理部１１は、ｋｄ木索引のノード（カレントノード）の左のノード及び右のノードが存在しているか否かを判定する。換言すれば、検索処理部１１は、カレントノードがリーフか否かを判定する。左右のノードが存在しない場合、ステップＳ７７に進み、左右いずれかのノードが存在している場合、ステップＳ６２に進む。
【００８０】
なお、最初に最近傍検索処理を実行した場合、ルートノードから開始されるため、ベクトルデータ記憶部１７（又は追加データ記憶部１８）のデータ数が２以上の場合、左右いずれかのノードが存在する。
【００８１】
ステップＳ６２において、検索処理部１１は、カレントノードの分岐次元におけるデータ値とクエリの対応する次元のデータ値を比較する。クエリのデータ値の方が小さいか又は左ノードが存在していない場合、ステップＳ６３に進み、クエリのデータ値の方が大きく、かつ、左ノードが存在している場合、ステップＳ６６に進む。
【００８２】
ステップＳ６３において、検索処理部１１は、右ノード（右側の子ノード）をカレントノードとした最近傍検索処理を行う。すなわち、検索処理部１１は、再帰的に最近傍検索処理を行う。なお、カレントノードがリーフに辿りつくまで、上記のステップＳ６１〜Ｓ６３、後述するステップＳ６６の処理が再帰的に繰り返し実行される。
【００８３】
ステップＳ６４において、検索処理部１１は、クエリを中心とし、ステップＳ６３の処理結果として取得した距離を半径とする円（超球）にカレントノードのデータ（多次元ベクトルデータ）が含まれるか否かを判定する。カレントノードのデータが含まれる場合、クエリとさらに近い値のデータがカレントノード又は左ノード以下の集合に含まれる可能性があるため、ステップＳ６５に進む。一方、カレントノードのデータが含まれない場合、クエリとさらに近い値のデータは左ノード以下の集合には含まれないため、ステップＳ７２に進む。なお、２つの多次元ベクトルデータ間の距離は、例えばユークリッド距離を用いればよい。
【００８４】
ステップＳ６５において、検索処理部１１は、左ノード（左側の子ノード）をカレントノードとした最近傍検索処理を再帰的に行う。
【００８５】
ステップＳ６６において、ステップＳ６３と同様に、検索処理部１１は、左ノードをカレントノードとした最近傍検索処理を再帰的に行う。
【００８６】
ステップＳ６７において、ステップＳ６４と同様に、検索処理部１１は、クエリを中心とし、ステップＳ６６の処理結果として取得した距離を半径とする円（超球）にカレントノードのデータ（多次元ベクトルデータ）が含まれるか否かを判定する。カレントノードのデータが含まれる場合、クエリとさらに近い値のデータがカレントノード又は右ノード以下の集合に含まれる可能性があるため、ステップＳ６８に進む。一方、カレントノードのデータが含まれない場合、クエリとさらに近い値のデータは右ノード以下の集合には含まれないため、ステップＳ７２に進む。
【００８７】
ステップＳ６８において、ステップＳ６５と同様に、検索処理部１１は、右ノードをカレントノードとした最近傍検索処理を再帰的に行う。
【００８８】
ステップＳ６９において、検索処理部１１は、クエリと右ノードとの距離、クエリと左ノードとの距離いずれか小さい（距離として近い）かを判定する。右ノードとの距離が近い場合、ステップＳ７０に進み、左ノードとの距離が近い場合、ステップＳ７１に進む。
【００８９】
ステップＳ７０において、検索処理部１１は、右ノードのデータを取得する。
【００９０】
ステップＳ７１において、検索処理部１１は、左ノードのデータを取得する。
【００９１】
ステップＳ７２において、検索処理部１１は、カレントノードのデータが削除データか否かを判断する。すなわち、検索処理部１１は、図１２のステップＳ５１で取得した削除データの識別子の一覧に、カレントノードのデータの識別子が含まれているか否かを判定する。削除データである場合、ステップＳ７６に進み、削除データでない場合、ステップＳ７３に進む。
【００９２】
ステップＳ７３において、検索処理部１１は、カレントノードのデータとクエリとの距離を求める。
【００９３】
ステップＳ７４において、検索処理部１１は、ステップＳ７３で求めた距離と、ステップＳ７０又はステップＳ７１で取得した右ノード又は左ノードのデータとクエリとの距離を比較する。カレントノードのデータとクエリとの距離の方が近い場合、ステップＳ７５に進み、右ノード又は左ノードのデータとクエリとの距離の方が近い場合、ステップＳ７６に進む。
【００９４】
ステップＳ７５において、検索処理部１１は、カレントノードのデータとステップＳ７３で求めた距離とを最近傍検索処理の呼び出し元に返す。
【００９５】
ステップＳ７６において、検索処理部１１は、右ノードのデータ又は左ノードのデータと、このデータとクエリとの距離とを最近傍検索処理の呼び出し元に返す。
【００９６】
ステップＳ７７において、ステップＳ７２と同様に、検索処理部１１は、カレントノードのデータが削除データか否かを判断する。
【００９７】
ステップＳ７８において、検索処理部１１は、カレントノードのデータが削除データである場合、このデータとクエリとの距離を無限大と設定する。
【００９８】
ステップＳ７９において、検索処理部１１は、カレントノードのデータとクエリとの距離を求める。
【００９９】
ステップＳ８０において、検索処理部１１は、カレントノードのデータと、このデータとクエリとの距離を最近傍検索処理の呼び出し元に返す。
【０１００】
以上により、第一の実施形態におけるデータ検索装置１０は、ｋｄ木索引を用いて端末装置２０などから指定されたデータ（クエリ）に最も近い値のデータを検索することができる。
【０１０１】
《マージ処理》
次に、追加データ記憶部１８や削除データ記憶部１９の内容をベクトルデータ記憶部１７に反映し、ｋｄ木索引（メイン）１６１を再作成するマージ処理について説明する。図１４は、第一の実施形態に係るマージ処理の一例のフローチャートである。なお、マージ処理は、例えば追加データ記憶部１８のデータ数が所定の閾値に達していた場合などに、追加処理部１２などから起動される。マージ処理が起動される場合としては、他に例えば所定の時間（例えば端末装置２０からのアクセスが少ない夜間など）に行うようにしてもよいし、所定の期間（例えば１週間など）が経過したら行うようにしてもよい。
【０１０２】
ステップＳ９１において、マージ部１５は、削除データ記憶部１９から削除データの識別子の一覧を取得する。このとき取得する削除データの識別子は、ｋｄ木索引（メイン）の削除データの識別子だけでよい。
【０１０３】
ステップＳ９２において、マージ部１５は、ステップＳ９１で取得した削除データの識別子について、対応する識別子の多次元ベクトルデータをベクトルデータ記憶部１７から削除する。
【０１０４】
ステップＳ９３において、マージ部１５は、追加データ記憶部１８に記憶されている追加用ベクトルデータをベクトルデータ記憶部１７に追加する。
【０１０５】
ステップＳ９４において、マージ部１５は、索引作成部１４に処理を依頼し、索引作成部１４は、ベクトルデータ記憶部１７からｋｄ木索引（メイン）１６１を作成する。なお、ｋｄ木索引（メイン）１６１を作成するための処理は、ｋｄ木索引作成処理と同様である。
【０１０６】
ステップＳ９５において、マージ部１５は、古いｋｄ木索引（メイン）１６１と、ｋｄ木索引（サブ）１６２を削除する。なお、マージ部１５は、追加データ記憶部１８及び削除データ記憶部１９の内容も削除（クリア）する。
【０１０７】
以上により、第一の実施形態におけるデータ検索装置１０は、所定のタイミングでマージ処理を行うことにより、追加データ記憶部１８及び削除データ記憶部１９の内容をベクトルデータ記憶部１７に反映（更新）することができる。また、第一の実施形態におけるデータ検索装置１０は、反映後のベクトルデータ記憶部１７からｋｄ木索引（メイン）１６１を再作成する。これにより、端末装置２０などがデータの追加や削除を行う度にｋｄ木索引の再作成をしないので、ユーザ待ち時間が軽減される。
［第二の実施形態］
次に、第二の実施形態に係るデータ検索システム１について説明する。第二の実施形態に係るデータ検索システム１のデータ検索装置１０は、端末装置２０などから追加されたデータが所定数を超えた場合、ｋｄ索引（サブ）１６２4を再作成する。
【０１０８】
なお、第二の実施形態に係るデータ検索システム１は、システム構成、ハードウェア構成、ソフトウェア構成が第一の実施形態に係るデータ検索システム１と同様であるため、システム構成、ハードウェア構成、ソフトウェア構成についての説明を省略する。
【０１０９】
＜処理の詳細＞
図１５は、第二の実施形態に係るデータ追加処理の一例のフローチャートである。なお、データ追加処理以外の各種処理は、第一の実施形態における対応する各種処理と同様であるため説明を省略する。
【０１１０】
ステップＳ１０１の処理は、図９のステップＳ２１の処理と同様であるため、説明を省略する。ステップＳ１０２において、追加処理部１２は、ｋｄ木索引（サブ）１６２に挿入したノード（データ）の累計数が所定の閾値に達しているか否か判定する。累計数が所定の閾値に達している場合、ステップＳ１０４に進み、累計数が所定の閾値に達していない場合、ステップＳ１０３に進む。
【０１１１】
ステップＳ１０３において、追加処理部１２は、累計数を１増やして、ｋｄ索引（サブ）１６２にステップＳ１０１で追加した多次元ベクトルデータのノードを挿入する。
【０１１２】
ステップＳ１０４において、追加処理部１２は、追加データ記憶部１８からｋｄ索引（サブ）１６２を再作成し、累計数を０にする。ステップＳ１０５の処理は、図９のステップＳ２３の処理と同様であるため、説明を省略する。
【０１１３】
以上により、第二の実施形態におけるデータ検索装置１０は、ｋｄ木索引（サブ）１６２へのノード挿入数の累計数（すなわち、追加データ記憶部１８へのデータ追加数）が所定の閾値を超えた場合、ｋｄ木索引（サブ）１６２を再作成する。これにより、ｋｄ木索引（サブ）１６２がなるべく平衡二分木となるようにし、データの追加に伴うデータ検索処理の効率の低下を防止することができる。
［第三の実施形態］
次に、第三の実施形態に係るデータ検索システム１について説明する。第三の実施形態に係るデータ検索システム１のデータ検索装置１０は、追加データ記憶部及び削除データ記憶部をそれぞれ２つ有している。これにより、例えばマージ処理中などにおいても端末装置２０などからデータの追加・削除を行うことができる。
【０１１４】
なお、第三の実施形態に係るデータ検索システム１は、システム構成及びハードウェア構成が第一の実施形態に係るデータ検索システム１と同様であるため、システム構成及びハードウェア構成についての説明を省略する。
【０１１５】
＜ソフトウェア構成＞
第三の実施形態に係るデータ検索装置１０は、例えば図１６に示すような機能ブロックにより表すことができる。図１６は、第三の実施形態に係るデータ検索装置の一例のソフトウェア構成図である。
【０１１６】
第三の実施形態に係るデータ検索装置１０は、検索処理部１１、追加処理部１２、削除処理部１３、索引作成部１４、マージ部１５、ベクトルデータ記憶部１７を有している。これらの各部は、第一の実施形態に係るデータ検索装置１０の対応する各部と同様のため説明を省略する。ただし、第三の実施形態における検索処理部１１は、ｋｄ木索引（メイン）１６１、ｋｄ木索引（サブ）１６２に加えて、後述するｋｄ木索引（サブ２）１６３も用いて最近傍検索処理を行う。そして、ｋｄ木索引（メイン）１６１、ｋｄ木索引（サブ）１６２、ｋｄ木索引（サブ２）１６３のそれぞれの最近傍検索処理の結果のうち、最もクエリに近い値のデータを検索要求元に返す。
【０１１７】
第三の実施形態に係るデータ検索装置１０は、索引記憶部１６を有している。索引記憶部１６は、ｋｄ木索引（メイン）１６１、ｋｄ木索引（サブ）１６２、ｋｄ木索引（サブ２）１６３を記憶している。これらのうち、ｋｄ木索引（メイン）１６１及びｋｄ木索引（サブ）１６２は、第一の実施形態に係るデータ検索装置１０の対応する各部と同様のため説明を省略する。
【０１１８】
また、第三の実施形態に係るデータ検索装置１０は、第１追加データ記憶部２０、第１削除データ記憶部２１、第２追加データ記憶部２２、第２削除データ記憶部２３を有している。
【０１１９】
第１追加データ記憶部２０及び第１削除データ記憶部２１は、それぞれ、第一の実施形態に係るデータ検索装置１０の追加データ記憶部１８及び削除データ記憶部１９と同様であるため説明を省略する。
【０１２０】
第２追加データ記憶部２２は、データ検索装置１０においてマージ処理が実行されているときに端末装置２０などからデータの追加要求があった場合に、追加データを記憶する。
【０１２１】
第２削除データ記憶部２３は、データ検索装置１０においてマージ処理が実行されているときに端末装置２０などからデータの削除要求があった場合に、削除データの識別子を記憶する。
【０１２２】
ｋｄ木索引（サブ２）１６３は、第２追加データ記憶部２２から作成されたｋｄ木索引である。ｋｄ木索引（サブ２）１６３の構成は、ｋｄ木索引（メイン）１６１及びｋｄ木索引（サブ）１６２の構成と同様である。
【０１２３】
＜処理の詳細＞
図１７は、第三の実施形態に係るマージ処理の一例のフローチャートである。なお、特に言及したものを除き、マージ処理以外の各種処理は、第一の実施形態における対応する各種処理と同様であるため説明を省略する。
【０１２４】
ステップＳ１１１において、マージ部１５は、第２追加データ記憶部２２及び第２削除データ記憶部２３をそれぞれマージ処理実行中のデータ追加及びデータ削除用の記憶領域とする。ステップＳ１１２〜Ｓ１１６の処理は、それぞれ図１４のステップＳ９１〜Ｓ９５の処理と同様であるため、説明を省略する。なお、例えば第２追加データ記憶部２２に記憶されたベクトルデータは、第２追加データ記憶部２２のデータ数が所定の閾値に達した場合などにベクトルデータ記憶部１７に追加するようにすればよい。第２削除データ記憶部２３についても同様である。
【０１２５】
以上により、第三の実施形態に係るデータ検索システム１のデータ検索装置１０は、マージ処理の実行中であっても端末装置２０からデータの追加及びデータの削除を行うことができる。
［第四の実施形態］
次に、第四の実施形態に係るデータ検索システム１について説明する。第四の実施形態に係るデータ検索システム１のデータ検索装置１０は、ｋｄ木索引を記憶するダンプ記憶部を有している。
【０１２６】
なお、第四の実施形態に係るデータ検索システム１は、システム構成及びハードウェア構成が第一の実施形態に係るデータ検索システム１と同様であるため、システム構成、及びハードウェア構成についての説明を省略する。
【０１２７】
＜ソフトウェア構成＞
第四の実施形態に係るデータ検索装置１０は、例えば図１８に示すような機能ブロックにより表すことができる。図１８は、第四の実施形態に係るデータ検索装置の一例のソフトウェア構成図である。第四の実施形態に係るデータ検索装置１０は、第三の実施形態に係るデータ検索装置１０が有する機能ブロックに加えて、ロード・アンロード部２４及びダンプ記憶部２５を有する。したがって、この２つ以外の各部については、説明を省略する。
【０１２８】
ロード・アンロード部２４は、索引作成部１４によるｋｄ木索引（メイン）１６１の作成後に、ｋｄ木索引（メイン）１６１をダンプ記憶部２５にメモリダンプする。また、ロード・アンロード部２４は、データ検索装置１０の起動直後に、ダンプ記憶部２５からｋｄ木索引（メイン）のメモリダンプを取得する。
【０１２９】
ダンプ記憶部２５は、ロード・アンロード部２４がメモリダンプしたｋｄ木索引（メイン）１６１を記憶する。ダンプ記憶部２５は、例えばＨＤＤ１０８又はデータ検索装置１０とネットワークを介して接続された記憶装置などにより実現することができる。
【０１３０】
以上により、第四の実施形態に係るデータ検索システム１のデータ検索装置１０は、ｋｄ木索引（メイン）１６１をＨＤＤ１０８などの二次記憶装置上に格納することができる。これにより、例えばデータ検索装置１０が再起動された場合などに、ダンプ記憶部２５からｋｄ木索引（メイン）１６１を読み出すことで、ｋｄ木索引（メイン）１６１を再作成する必要がなくなり、速やかにデータ検索を行うことができる。
【０１３１】
＜まとめ＞
以上の第一の実施形態に係るデータ検索装置１０では、追加データ用の追加データ記憶部１８と、削除データ用の削除データ記憶部１９を有しており、また、追加データ記憶部１８からｋｄ木索引（サブ）１６２を作成している。これにより、データ検索装置１０に対してデータの追加要求やデータの削除要求がある都度、ｋｄ木索引（メイン）１６１を再作成する必要がない。したがって、例えば端末装置２０などからデータ検索装置１０に対してデータの追加要求やデータの削除要求を行った場合、データの追加処理・削除処理のレスポンスタイムを短くすることができる。
【０１３２】
また、第二の実施形態に係るデータ検索装置１０では、ｋｄ木索引（サブ）１６２に対するノードの挿入（追加）の累積数をカウントし、累積数が所定値に達した場合、ｋｄ木索引（サブ）１６２の再作成を行う。これにより、ｋｄ木索引（サブ）１６２をなるべく平衡木に保つことができる。したがって、データ検索装置１０に対してデータの追加が頻繁に行われることによるデータ検索処理の効率低下を防止することができる。
【０１３３】
また、第三の実施形態に係るデータ検索装置１０では、マージ処理実行中にデータ追加・削除が行われた場合に、これらのデータを格納する第２追加データ記憶部２２と第２削除データ記憶部２３を有する。これにより、マージ処理実行中であっても、データ検索装置１０に対してデータの追加要求・削除要求を行うことができる。
【０１３４】
さらに、第四の実施形態に係るデータ検索装置１０では、ｋｄ木索引をメモリダンプして格納するためのダンプ記憶部２５を有する。これにより、通常、主記憶装置上に記憶されるｋｄ木索引を二次記憶装置上に記憶することができる。したがって、データ検索装置１０を再起動した場合などにおいても、ｋｄ木索引をダンプ記憶部２５から取得することにより、ｋｄ木索引を作成する必要がない。よって、データ検索装置１０の再起動後においても、ユーザは速やかにデータ検索を行うことができる。
【０１３５】
なお、ベクトルデータ記憶部１７は、ベクトルデータ記憶手段の一例である。追加データ記憶部１８及び第１追加データ記憶部２０は、第１の追加データ記憶手段の一例である。削除データ記憶部１９及び第１削除データ記憶部２１は、第１の削除データ記憶手段の一例である。第２追加データ記憶部２２は、第２の追加データ記憶手段の一例である。第２削除データ記憶部２３は、第２の削除データ記憶手段の一例である。ｋｄ木索引（メイン）１６１は、第１の索引の一例である。ｋｄ木索引（サブ）１６２は、第２の索引の一例である。ｋｄ木索引（サブ２）は、第３の索引の一例である。索引作成部１４は、索引作成手段の一例である。マージ部１５は、マージ手段の一例である。検索処理部１１は、検索手段の一例である。追加処理部１２は、データ追加手段の一例である。削除処理部１３は、削除データ追加手段の一例である。ダンプ記憶部２５は、索引記憶手段の一例である。ロード・アンロード部２４は、索引取得手段の一例である。
【０１３６】
本発明は、具体的に開示された上記の実施形態に限定されるものではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。
【符号の説明】
【０１３７】
１    データ検索システム
１０    データ検索装置
１１    検索処理部
１２    追加処理部
１３    削除処理部
１４    索引作成部
１５    マージ部
１６    索引記憶部
１７    ベクトルデータ記憶部
１８    追加データ記憶部
１９    削除データ記憶部
２０    端末装置
１６１    ｋｄ木索引（メイン）
１６２    ｋｄ木索引（サブ）
【先行技術文献】
【特許文献】
【０１３８】
【特許文献１】特許第４２１９１２５号公報
【図１】
2015156179.tif 000003
【図２】
2015156179.tif 000004
【図３】
2015156179.tif 000005
【図４】
2015156179.tif 000006
【図５】
2015156179.tif 000007
【図６】
2015156179.tif 000008
【図７】
2015156179.tif 000009
【図８】
2015156179.tif 000010
【図９】
2015156179.tif 000011
【図１０】
2015156179.tif 000012
【図１１】
2015156179.tif 000013
【図１２】
2015156179.tif 000014
【図１３】
2015156179.tif 000015
【図１４】
2015156179.tif 000016
【図１５】
2015156179.tif 000017
【図１６】
2015156179.tif 000018
【図１７】
2015156179.tif 000019
【図１８】
2015156179.tif 000020