(57)【要約】      （修正有）【課題】データベースの登録用テキストバッファにインデクス未反映のデータが増加した場合でも、検索時間の増加を防止できる。【解決手段】データベースシステムは、インデクス未反映のデータを登録用テキストバッファ３９へ登録する。そして、データベースシステムは、登録用テキストバッファ３９を検索したとき、この検索要求に示される検索文字を用いて登録バッファ用インデクス４０を作成する。この後、検索要求を受け付けると、まずデータベースのインデクス６３を検索する。ここでインデクス６３に該当データがないとき、登録バッファ用インデクス４０を検索する。そして、この登録バッファ用インデクス４０に示されるインデクスを用いて登録用テキストバッファ３９を検索する。データベースシステムは、この登録バッファ用インデクス４０を所定のタイミングでインデクス６３へ反映させる。【選択図】図１
2009037359.tif 000002
【特許請求の範囲】
【請求項１】
データベースに未反映のデータを蓄積する登録用データバッファと、前記データベースに反映済みのデータを検索するためのインデクスとを記憶する記憶部を備え、前記データの検索要求を受信したとき、前記記憶部の前記インデクスおよび前記登録用データバッファを用いて前記検索要求の対象であるデータを検索するデータベースシステムにおけるデータ登録検索方法において、
前記データの検索要求の受信に応じて、この受信した検索要求の対象であるデータが前記登録用データバッファに蓄積されているとき、前記登録用データバッファのデータに対して検索を行うための登録バッファ用インデクスを作成し、この作成した登録バッファ用インデクスを前記記憶部に記憶し、
データの検索要求の受信に応じて、
前記記憶部の前記インデクス、前記登録バッファ用インデクスおよび前記登録用データバッファを用いて前記検索要求の対象であるデータを検索することを特徴とするデータ登録検索方法。
【請求項２】
前記データベースシステムは、
前記登録用データバッファのデータのうち、このデータを構成する文字について前記登録バッファ用インデクスを作成したデータを前記登録用データバッファから削除することを特徴とする請求項１に記載のデータ登録検索方法。
【請求項３】
前記データベースシステムは、
前記登録バッファ用インデクスを前記インデクスに反映し、
前記インデクスに反映した前記登録バッファ用インデクスを前記記憶部から削除することを特徴とする請求項２に記載のデータ登録検索方法。
【請求項４】
前記データベースシステムは、
前記記憶部に前記登録バッファ用インデクスが所定量記憶されたとき、前記登録バッファ用インデクスを前記インデクスに反映することを特徴とする請求項３に記載のデータ登録検索方法。
【請求項５】
前記データベースシステムは、
前記登録バッファ用インデクスを作成するとき、前記インデクスと同じグラム数のインデクスを作成することを特徴とする請求項１に記載のデータ登録検索方法。
【請求項６】
前記データベースシステムは、
前記登録バッファ用インデクスを作成するとき、
この登録バッファ用インデクスの作成元となる前記登録用データバッファにおけるデータごとに、当該データが当該検索要求に示される検索キーワードを含むか否かを判断し、
当該データが当該検索要求に示される検索キーワードを含むとき、
当該データのうち、当該検索キーワードを含む部分に、所定のフラグ値を付与し、
当該データのすべての部分について前記所定のフラグ値が付与されたとき、当該データを前記登録用データバッファから削除することを特徴とする請求項２に記載のデータ登録検索方法。
【請求項７】
請求項１ないし請求項６のいずれか１項に記載のデータ登録検索方法をコンピュータに実行させることを特徴とするデータ登録検索プログラム。
【請求項８】
データベースに未反映のデータを蓄積する登録用データバッファおよび前記データベースに反映済みのデータを検索するためのインデクスを記憶する記憶部と、
前記データの検索要求を受信し、この受信した検索要求の対象であるデータが前記登録用データバッファに蓄積されているとき、前記登録用データバッファのデータに対して検索を行うための登録バッファ用インデクスを作成し、この作成した登録バッファ用インデクスを記憶部に記憶し、データの検索要求を受信したとき、前記インデクスを用いて前記検索要求の対象であるデータの検索し、前記登録バッファ用インデクスおよび前記登録用データバッファを用いて前記検索要求の対象であるデータの検索するデータベースアクセス制御部とを備えることを特徴とするデータベースシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースにおけるデータ登録検索技術に関する。
【背景技術】
【０００２】
近年、データベースにおける全文検索を高速にするため、データベースシステムに全文検索用インデクスを用意しておき、このインデクス（例えば、n-gramインデクス等）を用いて全文検索を行う技術がある。この全文検索用インデックスを用いる方法は、検索性能は優れているが、インデクスの作成や登録に時間を要するという問題がある。このような問題を解決するためにデータベースに新規にデータを登録しようとするとき、このデータを登録用テキストバッファへ格納しておく。そして、データベースの検索時には、まず全文検索用インデクスを参照し、この全文検索用インデクスに反映されていないデータは、登録用テキストバッファ内を検索する技術がある。つまり、データベースシステムは、データ登録時にデータをバッファリングしておき、すぐには全文検索用インデクスへの反映をしないことでデータベースへの登録時間を削減する技術がある（特許文献１参照）。
【特許文献１】特開平１０−２４０７５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、前記した従来技術は、登録用テキストバッファに登録されたデータ数が増加すると、それに比例して検索時間が増加するという問題がある。そこで、本発明は、前記した問題を解決し、データベースの検索時間の増加を防ぐことを目的とする。
【課題を解決するための手段】
【０００４】
前記した課題を解決するため本発明のデータベースシステムは、登録用テキストバッファ内のインデクス未反映のデータに対して、検索を行う登録バッファ用インデクスを作成し、データに対する検索時間の増加を防止する。そして、データベースシステムは、インデクス未反映のデータをまず登録用バッファへ格納する。また、データベースシステムは、データ検索時、まずインデクスを参照する。このインデクスに検索対象のデータのインデクスが無ければ、データベースシステムは、登録バッファ用インデクスを参照する。そして、データベースシステムは、登録用バッファに記録してあるデータを検索する。このとき、データベースシステムは、登録用バッファを検索するタイミングで、検索要求に対してインデクスを作成し登録バッファ用インデクスへ格納する。このインデクスは、例えば、1-gramインデクス方式とする。データベースシステムは、インデクス作成が完了した登録用バッファ内にあるデータは削除する。
【発明の効果】
【０００５】
本発明によれば、データベースの登録用テキストバッファにインデクス未反映のデータが増加した場合でも、検索時間の増加を防止できる。
【発明を実施するための最良の形態】
【０００６】
以下、本発明を実施するための最良の形態（以下、実施の形態という）を、図面を参照しながら説明する。まず、本実施の形態のデータベースシステムについて、図１を用いて説明する。図１は、本実施の形態のデータベースシステムの全体構成を示した図である。なお、以下の説明では、データベースに格納されるデータはＸＭＬ（Extensible Markup Language）データである場合を例に説明するが、これ以外のデータであってもよい。
【０００７】
本実施の形態のデータベースシステムは、ネットワーク２０６に接続されたコンピュータ２０１と、端末装置２０４,２０５と、コンピュータ２０１に接続されたディスク装置２０７とを含んで構成される。なお、この端末装置２０４,２０５は、例えば、ＰＣ（Personal Computer）により実現され、図示しない入力装置（キーボードやマウス等）や、出力装置（液晶ディスプレイ等）が接続される。ネットワーク２０６は、例えば、インターネットや、ＬＡＮ（Local Area Network）等により実現される。端末装置、コンピュータ２０１、ディスク装置２０７の数は図１に示す数に限定されない。
【０００８】
コンピュータ２０１は、ＣＰＵ（Central Processing Unit）２０２と、ＲＡＭ（Random Access Memory）等からなる主記憶部２０３とを備える。また、図示を省略しているが、このコンピュータ２０１は、ネットワーク２０６経由でデータを送受信するためのネットワークインタフェースや、コンピュータ２０１に接続される入力装置や出力装置との間でデータ入出力を行うための入出力インタフェース等を備える。
【０００９】
また、主記憶部２０３は、データベース管理システム１０と、登録用テキストバッファ３９と、登録バッファ用インデクス４０とを備える。また、主記憶部２０３は、検索結果判定フラグ４１を記憶する領域と、検索結果格納エリア４２とを備える。なお、このデータベース管理システム１０は、図１において、プログラムとしてロードされた状態を示している。このデータベース管理システム１０、登録用テキストバッファ（登録用バッファ）３９、登録バッファ用インデクス４０、検索結果判定フラグ４１および検索結果格納エリア４２の詳細は後記する。
【００１０】
端末装置２０４，２０５はそれぞれアプリケーションプログラム２３１,２３２を備える。これらのアプリケーションプログラム２３１,２３２は、データベース管理システム１０へ検索要求を送信したり、このデータベース管理システム１０からこの検索要求の結果を受信したりする。
【００１１】
ディスク装置２０７は、データベース６０を備える。このディスク装置２０７は、例えば、ＨＤＤ（Hard Disk Drive）や、フラッシュメモリ等の記憶装置により実現される。なお、このディスク装置２０７は、コンピュータ２０１の内部に設置されていてもよい。
【００１２】
データベース６０は、定義情報６１と、ＸＭＬデータを格納する表６２と、このＸＭＬデータのインデクス６３とを含んで構成される。
【００１３】
定義情報６１は、データベース６０の表６２ごとに、この表６２に格納されるＸＭＬデータのインデクス６３の識別情報を示した情報である。以下に例示する定義情報６１は、表６２である「Ｔ１」のインデクスは「Ｉｄｘ１」であることを示す。データベースアクセス制御部２１０は、この定義情報６１を参照することで、各表６２にインデクス６３が作成されているか否かを知ることができる。
【００１４】
【表１】
2009037359.tif 000003
【００１５】
表６２は、ＸＭＬデータを格納する。表６２には、ＸＭＬデータのデータ番号（データ識別子）ごとに、このデータ番号に対応するＸＭＬデータが格納される。以下の表２に表６２を例示する。表６２である「ＴＩ」には、データ番号「１」および「２」のＸＭＬデータが格納されていることを示す。
【００１６】
【表２】
2009037359.tif 000004
【００１７】
なお、この表６２には、インデクス６３に未反映のＸＭＬデータも格納される。また、この表６２には、ＸＭＬデータとは別に、このＸＭＬデータに関するメタデータ（例えば、ＸＭＬデータの登録年月日等）を含んでいてもよい。
【００１８】
インデクス６３は、表６２に格納されるＸＭＬデータのインデクスである。このインデクス６３は、表６２ごとに作成される。なお、このインデクス６３は、インデクス検索処理部２１３（後記）により検索される。
【００１９】
このインデクス６３は、例えば、ＸＭＬデータの文字列を検索するための文字列インデクスを含んで構成される。文字列インデクスは、文字列（検索文字）ごとにその文字列を含むＸＭＬデータのデータ番号や、そのＸＭＬデータにおける文字位置等を示したインデクスである。インデクス検索処理部２１３は、このインデクス６３を検索することで、検索条件に示された文字列を含むＸＭＬデータや、そのＸＭＬデータにおける当該文字列の文字位置等を得ることができる。なお、このインデクス６３は、例えば、n−gramのインデクスである。
【００２０】
データベース管理システム１０は、データベース６０のアクセス制御を行うデータベースアクセス制御部２１０を備える。
【００２１】
このデータベースアクセス制御部２１０は、データ管理部２１６と、インデクス管理部２１１と、登録バッファ用インデクス管理部２２０とを備える。このデータベースアクセス制御部２１０は、アプリケーションプログラム２３１,２３２から送信された検索要求やデータ登録要求に応じて、データ管理部２１６、インデクス管理部２１１、登録バッファ用インデクス管理部２２０等を呼び出し、この要求の結果をアプリケーションプログラム２３１,２３２に返却する。
【００２２】
データ管理部２１６は、ディスク装置２０７に格納されているデータベース６０のデータの取り出し、更新、削除等を行う。また、このデータ管理部２１６は、登録用テキストバッファ削除処理部２１７を備える。この登録用テキストバッファ削除処理部２１７は、登録バッファ用インデクス４０においてインデクス作成済みのデータを登録用テキストバッファ３９から削除する。
【００２３】
インデクス管理部２１１は、インデクス６３の検索や登録を行う。このインデクス管理部２１１は、インデクス登録処理部２１２と、インデクス検索処理部２１３と、インデクス反映処理部２１４とを備える。
【００２４】
インデクス登録処理部２１２は、アプリケーションプログラム２３１,２３２からの要求に応じてＸＭＬデータをディスク装置２０７のデータベース６０へ登録するための処理を行う。また、インデクス検索処理部２１３は、アプリケーションプログラム２３１,２３２から送信された検索要求に応じ、インデクス６３を用いてディスク装置２０７のＸＭＬデータを検索する。さらに、インデクス反映処理部２１４は、登録バッファ用インデクス４０をインデクス６３へ反映する。
【００２５】
登録バッファ用インデクス管理部２２０は、登録バッファ用インデクス４０の登録や検索を行う。この登録バッファ用インデクス管理部２２０は、登録バッファ用インデクス登録処理部２２１と、登録バッファ用インデクス検索処理部２２２とを備える。そして、登録バッファ用インデクス管理部２２０は、アプリケーションプログラム２３１,２３２からの検索要求に応じて、これらの処理部を起動する。
【００２６】
登録バッファ用インデクス登録処理部２２１は、登録用テキストバッファ３９の検索時に、この検索対象のデータを登録用テキストバッファ３９から検索するための登録バッファ用インデクス４０を作成する。
【００２７】
登録バッファ用インデクス検索処理部２２２は、登録用テキストバッファ３９の検索時に登録バッファ用インデクス４０を検索する。
【００２８】
登録用テキストバッファ３９は、データベース６０に未反映のデータを格納する。つまり、このデータ管理部２１６は、データベース６０に登録するＸＭＬデータを受信すると、まずこのデータを登録用テキストバッファ３９に格納する。この登録用テキストバッファ３９の例を図２に示す。
【００２９】
図２は、図１の登録用テキストバッファを例示した図である。この登録用テキストバッファ３９は、図２に例示するように、テキストデータのデータ識別子（データ番号）１００１と、テキストデータ１００２と、登録バッファ用インデクスフラグ１００３とを示した情報である。この登録バッファ用インデクスフラグ１００３は、当該テキストデータ１００２のうち、検索済みの部分（文字）にフラグ値「１」を付与したものである。なお、この図２に例示した登録用手テキストバッファ３９には、符号９２０に示すデータ００１（データ番号「００１」のデータ）と、符号９２１に示すデータ００２（データ番号「００２」のデータ）と、符号９２２に示すデータ００３（データ番号「００３」のデータ）と、それぞれのデータの登録バッファ用インデクスフラグとが格納されている。例えば、図２の登録用テキストバッファ３９におけるデータ００１は、「人」、「材」、「適」、「材」および「適」が、登録バッファ用インデクス検索処理部２２２により検索済みであることを「１」で示す。
【００３０】
図１の登録バッファ用インデクス４０は、登録用テキストバッファ３９に対して検索を行うためのインデクスであり、前記したとおり、登録バッファ用インデクス登録処理部２２１が、登録用テキストバッファ３９の検索時に作成する。この登録バッファ用インデクス４０は、検索文字（検索対象の文字）ごとに、この検索文字が含まれるデータのデータ番号と、そのデータにおける文字位置とを示した情報である。この登録バッファ用インデクス４０を、図３を用いて説明する。
【００３１】
図３は、図１の登録バッファ用インデクスを例示した図である。この登録バッファ用インデクス４０は、図３に例示するように、符号９２０に示すデータ００１と、符号９２１に示すデータ００２と、符号９２２に示すデータ００３のインデクスであり、各レコードの通し番号であるレコード番号９０１と、検索文字９０２と、この検索文字を含むデータのデータ番号９０３と、このデータにおける文字位置９０４とを含んで構成される。なお、同一文字（例えば、「適」）に関するインデクスが複数あるときは図３に例示するようレコードをリンクさせてもよい。例えば、図３に示す登録バッファ用インデクス４０のレコード番号「１」のインデクスは、検索文字「適」が、データ番号「００１」のデータの文字位置「１６」および「１８」にあることを示す。このような登録バッファ用インデクス４０を作成しておくことで、データベース管理システム１０は、登録用テキストバッファ３９のデータを効率よく検索できる。
【００３２】
図１の検索結果判定フラグ４１は、このデータベース管理システム１０が検索要求を受け付けたとき、この検索要求に基づくインデクス６３、登録バッファ用インデクス４０および登録用テキストバッファ３９の検索結果（検索条件を満たすデータを発見できたか否か）をフラグ値として示した情報である。
【００３３】
検索結果格納エリア４２は、インデクス６３、登録バッファ用インデクス４０および登録用テキストバッファ３９の検索結果を格納する領域である。ここでの検索結果とは、前記した検索条件を満たすデータを発見できたか否かのは判断結果の他に、検索条件を満たすデータのデータ番号や、そのデータにおける領域（文字位置）等を示した情報である。
【００３４】
次に、図４を用いて、図１のデータベースシステムの動作の概略を説明する。図４は、図１のデータベースシステムの動作の概略を説明した図である。データベースシステムは、大きく分けて、ＸＭＬデータの登録処理と、ＸＭＬデータの検索処理という２つの処理を実行する。ここでは、端末装置２０４のアプリケーションプログラム２３１がデータの登録要求を送信し、端末装置２０５のアプリケーションプログラム２３２がデータの検索要求を送信する場合を例に説明する。
【００３５】
まず、データベース管理システム１０は、端末装置２０４のアプリケーションプログラム２３１から、ＸＭＬデータ５２と、このＸＭＬデータ５２の登録要求５０の入力を受け付ける。この登録要求は、このＸＭＬデータ５２の登録先である表６２の識別情報（例えば、「Ｔ１」）等を含む。
【００３６】
そして、図１のデータ管理部２１６は、データベース６０の定義情報６１を参照し、インデクス６３の更新を決定する（Ｓ１１）。例えば、ＸＭＬデータの登録先の表６２が「Ｔ１」であるとき、データ管理部２１６は、定義情報６１を参照して、この表６２である「Ｔ１」に当該ＸＭＬデータがあるか否かを判断する。そして、この表６２に当該ＸＭＬデータがないとき、インデクス６３を更新すると決定する。一方、既にインデクス６３に当該ＸＭＬデータがあるとき、データ管理部２１６は、このインデクス６３を更新しない。
【００３７】
次に、データ管理部２１６は、ＸＭＬデータ５２をデータベース６０に格納し、このＸＭＬデータ５２のデータ番号（符号３０参照）を決定する（Ｓ１２）。例えば、ＸＭＬデータ５２をデータベース６０の表「Ｔ１」に格納し、このＸＭＬデータ５２のデータ番号「００１」を決定する。
【００３８】
次に、インデクス登録処理部２１２は、入力されたＸＭＬデータ５２とＳ１２で決定されたデータ番号とを対応付けて登録用テキストバッファ３９へ格納する（Ｓ１３）。
【００３９】
このようにして、データ管理部２１６は、インデクス６３に未登録のＸＭＬデータについて、登録用テキストバッファ３９に格納する。
【００４０】
次に、図４の右半分に示すＸＭＬデータの検索処理について説明する。ここでは、データベース管理システム１０が、インデクス６３を検索してから、登録バッファ用インデクス４０を検索する場合を例に説明するが、登録バッファ用インデクス４０を検索してから、インデクス６３を検索してもよい。
【００４１】
データベース管理システム１０は、端末装置２０５のアプリケーションプログラム２３２からＸＭＬデータの検索要求５１の入力を受け付ける。
【００４２】
次に、データ管理部２１６のインデクス検索処理部２１３は、データベース６０の定義情報６１を参照して、インデクス６３の利用を決定する（Ｓ１６）。つまり、インデクス検索処理部２１３は、定義情報６１を参照して、データベース６０のインデクス６３を読み出す。
【００４３】
そして、インデクス検索処理部２１３は、インデクス６３に、検索要求５１で指定された条件を満たすインデクス（検索要求５１に示される文字に関するインデクス）があるか否かを判断する（Ｓ１７）。そして、インデクス検索処理部２１３は、この判断結果を端末装置２０５のアプリケーションプログラム２３２へ送信する。つまり、インデクス６３に、検索要求５１で指定された条件を満たすインデクスがあれば、そのインデクスを用いてデータベース６０から検索したデータを端末装置２０５のアプリケーションプログラム２３２へ送信する。一方、インデクス６３に、検索要求５１で指定された条件を満たすインデクスがなければ、Ｓ１８へ進む。
【００４４】
次に、登録バッファ用インデクス検索処理部２２２は、登録バッファ用インデクス４０に、検索要求５１で指定された条件を満たすインデクスがあるか否かを判断する（Ｓ１８）。そして、登録バッファ用インデクス検索処理部２２２は、この検索結果を、端末装置２０５のアプリケーションプログラム２３２へ送信する。つまり、登録バッファ用インデクス４０に、検索要求５１で指定された条件を満たすインデクスを検索した結果、検索要求５１で指定された条件を満たすインデクスがあれば、そのインデクスを用いて登録用テキストバッファ３９から検索したデータを端末装置２０５のアプリケーションプログラム２３２へ送信する。一方、検索要求５１で指定された条件を満たすデータが見つからなかったときは、Ｓ１９へ進む。
【００４５】
次に、登録バッファ用インデクス検索処理部２２２は、登録用テキストバッファ３９から検索要求５１で指定された条件を満たすデータを検索する。そして、この検索したデータのデータ番号（符号３３参照）を読み出す。このとき、登録バッファ用インデクス登録処理部２２１は、検索要求５１で指定された条件に対して、前記読み出したデータ番号を対応付けた登録バッファ用インデクス４０を作成する（Ｓ１９）。
【００４６】
なお、この登録バッファ用インデクス４０は、例えば、1-gramインデクス方式とする。この1-gramインデクス方式についての説明は後述する。次に、登録用テキストバッファ削除処理部２１７は、登録バッファ用インデクス４０に登録済みになった登録用テキストバッファ３９内にあるデータを削除する（Ｓ２０）。つまり、登録用テキストバッファ削除処理部２１７は、登録用テキストバッファ３９のデータのうち、そのデータのすべての部分の登録バッファ用インデクス４０が作成されたデータを、登録用テキストバッファ３９から削除する。
【００４７】
なお、一般に1-gramインデクス方式とは、連接する１文字（1-gram）に対して各々がどの文書のどの位置に出現するかをインデクスとして登録したものである。ここでは、インデクス作成処理を容易にするため、登録バッファ用インデクス４０は、1-gramインデクス方式である場合を例に説明するが、2-gram以上のインデクス方式であってもよい。
【００４８】
このようにしてデータベースアクセス制御部２１０は、いったん登録用テキストバッファ３９を検索したデータ（例えば、検索文字）についてインデクスを作成し登録バッファ用インデクス４０に登録する。従って、例えば、データベースアクセス制御部２１０が、再度同じ検索文字に関する検索要求を受信したとき、登録用テキストバッファ３９をスキャン（検索）する必要がなくなるので、検索を効率的に行うことができる。
【００４９】
以下、図５を用いて、図４のＸＭＬデータの検索処理の詳細を説明する。図５は、図４のＸＭＬデータの検索処理の詳細を示すフローチャートである。
【００５０】
まず、データベース管理システム１０のデータベースアクセス制御部２１０が、アプリケーションプログラム２３１からＸＭＬデータの検索要求５１の入力を受け付ける（Ｓ４０１）。
【００５１】
そして、インデクス検索処理部２１３は、インデクス６３に、検索要求５１で指定された条件を満たすインデクスがあるか否かを判断する（Ｓ４０２）。
【００５２】
次に、登録バッファ用インデクス検索処理部２２２は、登録バッファ用インデクス４０に、検索要求５１で指定された条件を満たすインデクスがあるか否かを判断する（Ｓ４０３）。なお、この登録バッファ用インデクス検索処理部２２２の処理の詳細は図６を用いて後記する。
【００５３】
次に、登録バッファ用インデクス登録処理部２２１は、登録用テキストバッファ３９に格納されているテキストデータを１件取得する（Ｓ４０４）。
【００５４】
そして、登録バッファ用インデクス登録処理部２２１は、Ｓ４０４で取得したテキストデータが検索要求で指定された条件を満たすか否かを判断する（Ｓ４１０）。ここで、Ｓ４０４で取得したテキストデータが検索要求で指定された条件を満たすとき（Ｓ４１０で“Ｙｅｓ”）、検索要求処理を実行する（Ｓ４１１）。このＳ４１１の処理については後記する。一方、Ｓ４０４で取得したテキストデータが検索要求で指定された条件を満たさないとき（Ｓ４１０で“Ｎｏ”）、Ｓ４２０へ進む。Ｓ４２０の処理については後記する。また、この登録バッファ用インデクス登録処理部２２１の処理の詳細は図７を用いて後記する。
【００５５】
Ｓ４１１の検索要求処理は、以下の（１）および（２）の処理を並行に実行する。すなわち、（１）登録バッファ用インデクス検索処理部２２２は、登録用テキストバッファ３９から検索要求５１で指定された条件を満たすデータを取得し、このデータの問い合わせ元（例えば、端末装置２０５のアプリケーションプログラム２３２）へ送信する。（２）登録バッファ用インデクス登録処理部２２１は、登録用テキストバッファ３９の検索要求５１で指定された条件を満たすデータについて、この検索要求５１で指定された条件と対応付けた登録バッファ用インデクス４０を作成する。この登録用テキストバッファ３９内の全データの登録バッファ用インデクス４０の登録が完了したら、登録用テキストバッファ削除処理部２１７は、登録用テキストバッファ３９のデータを削除する。そして、Ｓ４２０へ進む。なお、この登録用テキストバッファ削除処理部２１７の処理の詳細は、図８を用いて後記する。
【００５６】
このような処理の後、登録バッファ用インデクス登録処理部２２１は、登録用テキストバッファ３９に格納されたすべてのテキストデータを評価したか否かを判断し（Ｓ４２０）、すべてのテキストデータを評価し終わっている場合は（Ｓ４２０の“Ｙｅｓ”）、処理を終了する。一方、まだ登録用テキストバッファ３９に評価していないテキストデータがある場合は（Ｓ４２０の“Ｎｏ”）、Ｓ４０４に戻る。
【００５７】
このようにしてデータベースアクセス制御部２１０は、いったん登録用テキストバッファ３９を検索したデータ（例えば、文字列等）について登録バッファ用インデクス４０を作成していく。
【００５８】
なお、ここでは説明を省略したが、Ｓ４０４で取得したテキストデータが検索要求で指定された条件を満たさないとき、その旨を示す情報を登録バッファ用インデクス４０に書き込むようにしてもよい。例えば、登録バッファ用インデクス４０の当該検索要求に示される文字に関する文字位置の情報に「−１」を書き込むようにしてもよい。
【００５９】
以下、図５のＳ４０３,４０４,４１１,４１２の処理を、図６を用いて具体的に説明する。図６は、図５のＳ４０３,４０４,４１１,４１２の処理の具体例を示した図である。
【００６０】
ここでは、データベースアクセス制御部２１０が検索キーワード「適材適所」を含む検索要求に基づき、「適材適所」を含むデータのデータ番号と、その文字位置を検索する場合を例に説明する。なお、この「適材適所」という検索キーワードは、現在まで検索処理が行われていないものとする。また、登録用テキストバッファ３９には、データ番号「００１」〜「００３」の３件のデータが格納されているものとする。さらに、登録バッファ用インデクス４０には初期状態でデータは登録されていないものとする。
【００６１】
まず、図５のＳ４０３の具体例について説明する。登録バッファ用インデクス管理部２２０は、検索キーワード「適材適所」について登録バッファ用インデクス４０と登録用テキストバッファ３９の検索を開始する（Ｓ５００）。まず、登録バッファ用インデクス検索処理部２２２は、この検索キーワード「適材適所」について登録バッファ用インデクス４０を検索する（Ｓ５０１）。この場合、登録バッファ用インデクス管理部２２０は1-gramインデクスの登録バッファ用インデクスを作成するので、具体的には、「適」、「材」、「適」、「所」という文字１つ１つについて、この文字に合致する登録バッファ用インデクス４０を検索する。
【００６２】
また、登録バッファ用インデクス登録処理部２２１は登録用テキストバッファ３９の検索時に（つまり、いったん検索した後に）、登録バッファ用インデクス４０を作成する。なお、まだ登録用テキストバッファ３９の検索が実行されていない状態（初期状態）では、登録バッファ用インデクス４０にデータは格納されていない。従って、Ｓ５０１で登録バッファ用インデクス検索処理部２２２が登録バッファ用インデクス４０を検索しても、その検索文字を含むデータを発見できない。
【００６３】
次に、図５のＳ４０４の具体例について説明する。登録バッファ用インデクス登録処理部２２１は、登録用テキストバッファ３９を検索する（Ｓ５０２）。例えば、登録バッファ用インデクス登録処理部２２１は、まず符号９２０に示すデータ番号「００１」のデータについて検索キーワード「適材適所」に合致する文字列があるか否かを判断する。結果、登録バッファ用インデクス登録処理部２２１は、このデータ番号「００１」のデータの文字位置「１６、１７、１８、１９」の文字が検索キーワードと合致することを発見する。
【００６４】
続いて、登録バッファ用インデクス登録処理部２２１は、符合９２１に示すデータ番号「００２」のデータについても、検索キーワード「適材適所」に合致する文字があるか否かを判断する。結果、検索キーワードと合致する文字列はない。
【００６５】
続いて、登録バッファ用インデクス登録処理部２２１は、符号９２２に示すデータ番号「００３」も、検索キーワード「適材適所」に合致する文字があるか否かを判断する。結果、検索キーワードに合致する文字はない。
【００６６】
このようにして、登録バッファ用インデクス登録処理部２２１は、登録用テキストバッファ３９に格納されたすべてのデータについて、検索キーワードに合致する文字があるか否かを判断する。
【００６７】
次に、図５のＳ４１２の具体例について説明する。登録バッファ用インデクス登録処理部２２１は、検索キーワード「適材適所」に対する登録バッファ用インデクス４０を作成する（Ｓ５０３）。まず、登録バッファ用インデクス登録処理部２２１は、符号９２０に示すデータ番号「００１」のデータに対する登録バッファ用インデクス４０を作成する。このデータ番号「００１」のデータは文字位置「１６、１７、１８、１９」で検索キーワードと合致したため、登録バッファ用インデクス登録処理部２２１は、登録バッファ用インデクス４０の検索文字９０２に「適」という文字を格納し、その列に当該データのデータ番号「００１」と、その文字の文字位置「１６」を格納する。また、この「適」という文字は文字位置「１８」にも登場するので、登録バッファ用インデクス登録処理部２２１は、同じ列に文字位置として「１８」も格納する。
【００６８】
続いて、登録バッファ用インデクス登録処理部２２１は、登録バッファ用インデクス４０の検索文字９０２に「材」を格納し、その列にデータ番号「００１」と文字位置「１７」を格納する。次に、登録バッファ用インデクス登録処理部２２１は、登録バッファ用インデクス４０の検索文字９０２に「所」を格納し、その列にデータ番号「００１」と文字位置「１９」を格納する。
【００６９】
このようにして登録バッファ用インデクス登録処理部２２１は、データ番号「００１」に関する登録バッファ用インデクス４０を作成する。
【００７０】
次に、登録バッファ用インデクス登録処理部２２１は、符号９２１に示すデータ番号「００２」のデータに対する登録バッファ用インデクス４０を作成する。このデータ番号「００２」のデータは、検索キーワードと合致しなかったため（Ｓ５０２参照）、登録バッファ用インデクス登録処理部２２１は、登録バッファ用インデクス４０の検索文字９０２の「適」が格納された列にデータ番号「００２」と文字位置「−１」を格納する。
【００７１】
次に、登録バッファ用インデクス登録処理部２２１は、符号９２２に示すデータ番号「００３」のデータに対する登録バッファ用インデクス４０を作成する。このデータ番号「００３」のデータは、検索キーワードと合致しなかったため（Ｓ５０２参照）、登録バッファ用インデクス登録処理部２２１は、登録バッファ用インデクス４０の検索文字９０２の「適」が格納された列に、データ番号「００３」と文字位置「−１」を格納する。また、登録バッファ用インデクス登録処理部２２１は、検索文字９０２の「在」、「所」が格納された列にも、データ番号「００３」と文字位置「−１」を格納する。
【００７２】
このようにして登録バッファ用インデクス登録処理部２２１は、登録用テキストバッファ３９に格納されたデータ番号「００２」および「００３」のデータに関する登録バッファ用インデクス４０を作成する。
【００７３】
次に、図５のＳ４１１の検索要求処理において、登録バッファ用インデクス検索処理部２２２が、登録用テキストバッファ３９から検索要求５１で指定された条件を満たすデータを取得し、このデータの問い合わせ元へ送信する処理について説明する。例えば、登録バッファ用インデクス登録処理部２２１は、検索キーワード「適材適所」に対する検索結果を問合わせ元（例えば、端末装置２０５のアプリケーションプログラム２３２）へ返却する（Ｓ５０４）。ここでは、データ番号「００１」のデータのみが検索キーワードと合致したため、検索結果として、データ番号１１０１が「００１」、文字位置（当該検索キーワードの文字列の開始位置）１１０２が「１６」を問合わせ元へ返却する。
【００７４】
次に、図７を用いて、図１の登録バッファ用インデクス検索処理部２２２の処理手順を説明する。図７は、図１の登録バッファ用インデクス検索処理部の処理手順を示したフローチャートである。
【００７５】
まず、データベースアクセス制御部２１０が登録バッファ用インデクス管理部２２０の登録バッファ用インデクス検索処理部２２２を呼び出す（Ｓ６００）。呼び出された登録バッファ用インデクス検索処理部２２２は、登録バッファ用インデクス４０（図３参照）に格納されているレコードを１件取得する（Ｓ６０１）。
【００７６】
そして、登録バッファ用インデクス検索処理部２２２は、Ｓ６０１で取得したレコードにおける検索文字が、検索要求で指定された条件を満たすか否かを判断する（Ｓ６０２）。例えば、登録バッファ用インデクス検索処理部２２２は、当該レコードが検索要求で指定された検索キーワードを含むか否かを判断する。
【００７７】
ここで、Ｓ６０１で取得したレコードにおける検索文字が検索要求で指定された条件を満たす場合（Ｓ６０２の“Ｙｅｓ”）、登録バッファ用インデクス検索処理部２２２は、当該レコードに示されるデータ番号と文字位置を検索結果格納エリアへ格納する（Ｓ６０３）。
【００７８】
そして、登録バッファ用インデクス検索処理部２２２は、登録バッファ用インデクス４０に格納されたレコードすべてに対して評価したか否かを判断する（Ｓ６０４）。ここで、レコードすべてに対して、検索要求で指定された条件を評価した場合は（Ｓ６０４の“Ｙｅｓ”）、検索結果格納エリアの先頭レコードのデータ番号、文字位置を問合せ元へ返却し（Ｓ６０５）、処理を終了する。つまり、登録バッファ用インデクス検索処理部２２２は、当該検索キーワードを含むデータのデータ番号と、その検索キーワードの開始位置とを問合せ元へ返却する。
【００７９】
一方、Ｓ６０２において、Ｓ６０１で取得したレコードにおける検索文字が検索要求で指定された条件を満たさない場合（Ｓ６０２の“Ｎｏ”）、Ｓ６０４へ進む。また、登録バッファ用インデクス検索処理部２２２は、登録バッファ用インデクス４０に格納されたレコードすべてに対する評価が完了していない場合（Ｓ６０４の“Ｎｏ”）、Ｓ６０１へ戻る。
【００８０】
このようにして登録バッファ用インデクス検索処理部２２２は、登録バッファ用インデクス４０を用いて検索要求に示される検索キーワードを含むデータのデータ番号と、その検索キーワードの開始位置とを読み出す。
【００８１】
次に、図８を用いて、図１の登録バッファ用インデクス管理部２２０が登録用テキストバッファ３９を検索する手順を説明する。図８は、図１の登録用テキストバッファ３９の検索手順を示したフローチャートである。
【００８２】
登録バッファ用インデクス管理部２２０の登録バッファ用インデクス登録処理部２２１は、登録用テキストバッファ３９に格納されているテキストデータ（データ）を１件取得する。そして、このテキストデータの検索結果判定フラグへ「０（初期値）」を格納する（Ｓ７００）。
【００８３】
登録バッファ用インデクス登録処理部２２１は、Ｓ７００で取得したテキストデータが検索要求で指定された条件を満たすか否かを判断する（Ｓ７０１）。つまり、登録バッファ用インデクス登録処理部２２１は、検索要求に指定された検索キーワードを１文字１文字について、当該テキストデータが検索要求で指定された検索キーワードを含むか否かを判断する。ここで取得したテキストデータが検索要求で指定された条件を満たす場合は（Ｓ７０１の“Ｙｅｓ”）、登録バッファ用インデクス登録処理部２２１は、このテキストデータのデータ番号と、検索要求に示される検索キーワードの文字位置を検索結果格納エリア４２へ格納する。そして、登録バッファ用インデクス登録処理部２２１は、登録用テキストバッファ３９の当該テキストデータのうち当該検索文字に合致する部分に登録バッファ用インデクスフラグ（図２の符号１００３参照）に「１」を設定し（Ｓ７０５）、Ｓ７１０へ進む。つまり、登録バッファ用インデクス登録処理部２２１は、登録用テキストバッファ３９のテキストデータにおける当該文字について検索要求に指定された検索キーワードと合致することを登録用テキストバッファ３９に記録する。
【００８４】
一方、Ｓ７０１において、Ｓ７００で取得したテキストデータが検索要求で指定された条件を満たさない場合は（Ｓ７０１の“Ｎｏ”）、Ｓ７３０へ進む。Ｓ７３０については後記する。
【００８５】
次に、登録バッファ用インデクス登録処理部２２１は、検索要求で指定された条件が登録バッファ用インデクス４０に既に格納されているか否かを判断する（Ｓ７１０）。つまり、登録バッファ用インデクス登録処理部２２１は、検索要求で指定された検索キーワード（例えば、「適材適所」の「適」）に合致する文字に関するレコードが登録バッファ用インデクス４０に格納されているか否かを判断する。ここで、検索要求で指定された条件が登録バッファ用インデクス４０に既に格納されている場合（Ｓ７１０の“Ｙｅｓ”）、登録バッファ用インデクス登録処理部２２１は、登録バッファ用インデクス４０内の前記検索要求の条件に合致した（つまり、検索要求で指定された条件を満たす）検索文字の同一文字リンク先として、このテキストデータのレコード番号と、文字位置を格納する。また、検索結果判定フラグ４１に「１」を設定する（Ｓ７２０）。
【００８６】
例えば、図２に例示した登録バッファ用インデクス４０において、既に検索文字「適」に関するレコードが格納されているところ、登録バッファ用インデクス登録処理部２２１が、同じテキストデータから別の文字位置で「適」という文字を発見した場合、この「適」という検索文字の同一文字リンク先としてテキストデータのレコード番号「００１」と、文字位置「１８」を格納する。
【００８７】
一方、検索要求で指定された条件が登録バッファ用インデクス４０に格納されていない場合は（Ｓ７１０の“Ｎｏ”）、登録バッファ用インデクス登録処理部２２１は、前記条件に合致した文字と検索結果格納エリア４２に格納された情報（データ番号と文字位置）を登録バッファ用インデクス４０へ格納する（Ｓ７２１）。
【００８８】
次に、登録バッファ用インデクス登録処理部２２１は、登録用テキストバッファ３９に格納されているすべてのテキストデータに対して、検索要求で指定された条件を評価したか否かを判断する（Ｓ７３０）。ここで、登録用テキストバッファ３９に格納されているすべてのテキストデータに対して、検索要求で指定された条件を評価したとき（Ｓ７３０の“Ｙｅｓ”）、Ｓ７４０へ進む。一方、まだ評価していないテキストデータがある場合は（Ｓ７３０の“Ｎｏ”）、Ｓ７００へ戻る。
【００８９】
次に、登録バッファ用インデクス登録処理部２２１は、検索結果判定フラグ４１の値が「０」か否かを判断する（Ｓ７４０）。ここで、検索結果判定フラグ４１の値が「０」の場合は（Ｓ７４０の“Ｙｅｓ”）、登録バッファ用インデクス登録処理部２２１は、この検索要求で指定された文字列を含むデータのデータ番号と、文字位置「−１」を登録バッファ用インデクス４０へ格納する（Ｓ７５０）。そして、登録バッファ用インデクス検索処理部２２２は、この登録用テキストバッファ３９のデータと条件（検索要求で指定された条件）が合致しなかったことを問合わせ元へ返却する（Ｓ７５２）。一方、検索結果判定フラグ４１の値が「０」でない場合は（Ｓ７４０の“Ｎｏ”）、登録バッファ用インデクス検索処理部２２２は、この登録用テキストバッファ３９のデータと検索要求で指定された条件が合致したこと（検索結果）を問合せ元へ返却し（Ｓ７５１）、処理を終了する。
【００９０】
このようにして登録バッファ用インデクス管理部２２０は、登録用テキストバッファ３９の検索を行う。
【００９１】
次に、図９を用いて、図１の登録用テキストバッファ削除処理部２１７の処理手順を説明する。図９は、図１の登録用テキストバッファ削除処理部の処理手順を示したフローチャートである。
【００９２】
まず、データベースアクセス制御部２１０は、データ管理部２１６の登録用テキストバッファ削除処理部２１７を呼び出す（Ｓ８００）。次に、呼び出された登録用テキストバッファ削除処理部２１７は、登録用テキストバッファ３９すべてのテキストデータに対して登録バッファ用インデクス４０を作成したか否かを判断する（Ｓ８０１）。ここで、登録用テキストバッファ３９のすべてのテキストデータに対して登録バッファ用インデクス４０を作成済みの場合（Ｓ８０１の“Ｙｅｓ”）、登録用テキストバッファ削除処理部２１７は、登録用テキストバッファ３９内の登録バッファ用インデクスフラグ（図２の符号１００３）がすべて「１」になっているか否かの判断を行う（Ｓ８０２）。つまり、登録用テキストバッファ削除処理部２１７は、登録用テキストバッファ３９に格納されるテキストデータのうち、まだ登録バッファ用インデクス４０が作成されていない文字があるか否かを判断する。
【００９３】
ここで、登録用テキストバッファ３９内の登録バッファ用インデクスフラグがすべて「１」の場合（Ｓ８０２の“Ｙｅｓ”）、登録用テキストバッファ削除処理部２１７は登録用テキストバッファ３９を削除し（Ｓ８０５）、処理を終了する。
【００９４】
一方、登録用テキストバッファ３９のテキストデータに、まだ登録バッファ用インデクス４０を作成していないものがある場合（Ｓ８０１の“Ｎｏ”）、および、登録用テキストバッファ３９の登録バッファ用インデクスフラグに「０」が含まれている場合（Ｓ８０１の“Ｎｏ”）、登録用テキストバッファ３９を削除せず、処理を終了する。
【００９５】
このようにすることで、登録用テキストバッファ削除処理部２１７は、登録用テキストバッファ３９のすべてのテキストデータ、すべての文字列について登録バッファ用インデクス４０が作成されたことを確認した上で、登録用テキストバッファ３９を削除できる。
また、このように登録バッファ用インデクス４０を作成済みの登録用テキストバッファ３９を主記憶部２０３上から削除することで、主記憶部２０３のメモリ容量を有効活用できる。また、データベースアクセス制御部２１０は、登録用テキストバッファ３９を検索する必要がなくなるので検索時間を短縮できる。
【００９６】
なお、登録用テキストバッファ削除処理部２１７は、前記した実施の形態において登録用テキストバッファ３９のテキストデータのうち、登録バッファ用インデクス４０を作成済みのテキストデータのみを削除するようにしてもよい。つまり、登録用テキストバッファ削除処理部２１７は、登録用テキストバッファ３９のテキストデータを部分的に削除するようにしてもよい。例えば、登録用テキストバッファ削除処理部２１７は、登録用テキストバッファ３９のテキストデータのうち、すべての文字に登録バッファ用インデクスフラグ（図２の符号１００３参照）「１」が付与されたテキストデータを削除する。
【００９７】
なお、インデクス反映処理部２１４は、前記した手順により作成された登録バッファ用インデクス４０を、インデクス６３へ反映する。そして、インデクス反映処理部２１４はインデクス６３へ反映した登録バッファ用インデクス４０を削除する。このときのタイミングは、例えば、登録バッファ用インデクス４０に格納されたインデクスのデータ量が所定の閾値を超えたときとする。このようにすることで、登録バッファ用インデクス４０にある程度のインデクスが蓄積された段階でインデクス６３へ反映することになるので、インデクス６３へ反映するための処理回数を低減できる。
【００９８】
インデクス６３へ反映するタイミングは前記した例の他に、（１）外部装置から検索要求を受信したとき、（２）外部装置から所定の条件を含む検索要求を受信したとき、（３）登録バッファ用インデクス４０に格納されるインデクスのデータ量または個数がある閾値を超えたとき、（４）登録バッファ用インデクス４０にインデクスが登録されたとき、（５）ＣＰＵ２０２の使用率がある閾値以下になったとき、（６）データベースアクセス制御部２１０の検索性能がある閾値以下になったとき、（７）過去におけるインデクス６３の反映タイミングと似た状況になったとき、（８）予め設定された反映日時になったとき、（９）前回のインデクス６３の反映から所定時間経過したとき、（１０）登録バッファ用インデクス４０に格納できる残量が減ってきたときが考えられる。
【００９９】
また、インデクス反映処理部２１４は、登録バッファ用インデクス４０をすべてインデクス６３へ反映するのではなく、その一部を反映するようにしてもよい。このときインデクス反映処理部２１４は、登録バッファ用インデクス４０のインデクスのうち、反映待ち時間の長いものから優先的に選択するようにしてもよいし、ランダムに選択するようにしてもよい。さらに、インデクス６３へ反映する登録バッファ用インデクス４０のインデクスの数は、時間帯によって変更するようにしてもよい。
【０１００】
なお、このようにインデクス反映処理部２１４が登録バッファ用インデクス４０をインデクス６３へ反映するために用いるパラメータは、主記憶部２０３の所定領域に記憶される。
【０１０１】
また、前記した実施の形態において、登録バッファ用インデクス４０およびインデクス６３のグラム数は同じグラム数（例えば、1-gram）としてもよい。このようにすることで、インデクス反映処理部２１４が、登録バッファ用インデクス４０をインデクス６３へ反映するときの処理負荷を小さくすることができる。
【０１０２】
さらに、前記した実施の形態における検索処理は、文字の検索を例に説明したが、記号の検索処理に適用してもよい。
【図面の簡単な説明】
【０１０３】
【図１】本実施の形態のデータベースシステムの全体構成を示した図である。
【図２】図１の登録用テキストバッファを例示した図である。
【図３】図１の登録バッファ用インデクスを例示した図である。
【図４】図１のデータベースシステムの動作の概略を説明した図である。
【図５】図４のＸＭＬデータの検索処理の詳細を示すフローチャートである。
【図６】図５のＳ４０３,４０４,４１１,４１２の処理の具体例を示した図である。
【図７】図１の登録バッファ用インデクス検索処理部の処理手順を示したフローチャートである。
【図８】図１の登録バッファ用インデクス管理部の処理手順を示したフローチャートである。
【図９】図１の登録用テキストバッファ削除処理部の処理手順を示したフローチャートである。
【符号の説明】
【０１０４】
１０    データベース管理システム
３９    登録用テキストバッファ
４０    登録バッファ用インデクス
４１    検索結果判定フラグ
４２    検索結果格納エリア
６０    データベース
６１    定義情報
６３    インデクス
２０１  コンピュータ
２０２  ＣＰＵ
２０３  主記憶部
２０４,２０５  端末装置
２０６  ネットワーク
２０７  ディスク装置（記憶部）
２１０  データベースアクセス制御部
２１１  インデクス管理部
２１２  インデクス登録処理部
２１３  インデクス検索処理部
２１４  インデクス反映処理部
２１６  データ管理部
２１７  登録用テキストバッファ削除処理部
２２０  登録バッファ用インデクス管理部
２２１  登録バッファ用インデクス登録処理部
２２２  登録バッファ用インデクス検索処理部
２３１,２３２  アプリケーションプログラム
【図１】
2009037359.tif 000005
【図２】
2009037359.tif 000006
【図３】
2009037359.tif 000007
【図４】
2009037359.tif 000008
【図５】
2009037359.tif 000009
【図６】
2009037359.tif 000010
【図７】
2009037359.tif 000011
【図８】
2009037359.tif 000012
【図９】
2009037359.tif 000013