(57)【要約】【課題】検索処理時間を短縮できる文書検索装置を提供する。【解決手段】文書検索装置は、検索式を構文木に解析する構文解析部５０と２種類のモジュールを作成するモジュール作成部５２と、構文木の各ノードをそれぞれ対応するモジュールに置き換えて接続して、文書検索プログラムを作成するプログラム作成部５４と、文書検索プログラム６２を所定数の検索結果が得られるまで実行する実行部と、複数のＤＢからなるＤＢ群４２とを有する。各ＤＢには、それぞれ対応付けられた検索語を含む文書の文書情報が文書ＩＤの順に記録されている。文書ＩＤ取得モジュール５８は、このＤＢを読み込み所定の文書ＩＤを取得する。論理演算モジュール６０は、下位モジュールから入力された文書ＩＤが所定の条件を満たすかを判別し、満たす場合には上位モジュールへ出力する。【選択図】図５
2005165521.tif 000002
【特許請求の範囲】
【請求項１】
入力された検索式に基づいて、文書を検索する文書検索装置であって、
入力された検索式を解析し、複数のノードから構成される構文木を作成する構文解析手段と、
検索の際に用いられる複数の検索語それぞれに対応付けられた複数のデータベースであって、それぞれ対応する検索語を含む文書の文書情報を文書ＩＤの順に記録している複数のデータベースと、
複数の検索語毎に用意された複数の取出手段であって、出力要求に応じて、それぞれ対応する検索語のデータベースから文書ＩＤの順に文書情報を一つずつ取出して出力する複数の取出手段と、
検索式で用いられる論理演算子毎に用意される複数の論理演算手段であって、出力要求に応じて、下位に位置する他手段から入力された文書情報の中に各論理演算子で示される条件を満たす適合文書情報が有るかを判別し、有ると判別した場合は適合文書情報を出力し、無いと判断した場合は適合文書情報を得るまで他手段に対して入力要求を行う論理演算手段と、
構文木に基づいて、構文木を構成する各ノードをそれぞれ対応する取出手段または論理演算手段に置き換えて接続することにより、検索式に対応する文書情報を出力する文書検索手段を生成する生成手段と、
検索要求に応じて、所定数の文書情報を取得するまで文書検索手段を動作させ、得られた文書情報を検索結果として出力する制御手段と、
を有することを特徴とする文書検索装置。
【請求項２】
請求項１に記載の文書検索装置であって、
複数の論理演算手段は、ＡＮＤ演算子に対応するＡＮＤ演算手段を有し、
ＡＮＤ演算手段は、入力された複数の文書情報に記録された複数の文書ＩＤが同一でない場合、複数の文書ＩＤのうち最も順番が後の文書ＩＤを次候補ＩＤとして他手段に渡し、
検索手段は、次候補ＩＤが渡された場合、次候補ＩＤ以降の文書ＩＤを有する文書情報のうち、最も順番が前の文書ＩＤを有した文書情報を出力することを特徴とする文書検索装置。
【請求項３】
請求項１から３のいずれか１に記載の文書検索装置であって、
複数の論理演算手段は、その入出力形式が統一されていることを特徴とする文書検索装置。
【請求項４】
コンピュータを、請求項１から３のいずれか１に記載の文書検索装置として機能させるコンピュータプログラム。
【請求項５】
入力された検索式に基づいて、文書を検索する文書検索方法であって、
構文解析手段が入力された検索式を解析し、複数のノードから構成される構文木を作成するステップと、
データベース作成手段が検索の際に用いられる複数の検索語それぞれに対応付けられた複数のデータベースであって、それぞれ対応する検索語を含む文書の文書情報を文書ＩＤの順に記録している複数のデータベースを作成するステップと、
取出モジュール作成手段が複数の検索語毎に用意された複数の取出モジュールであって、出力要求に応じて、それぞれ対応する検索語のデータベースから文書ＩＤの順に文書情報を一つずつ取出して出力する複数の取出モジュールを作成するステップと、
論理演算モジュール作成手段が、検索式で用いられる論理演算子毎に用意される複数の論理演算手段であって、出力要求に応じて、下位に位置する他手段から入力された文書情報の中に各論理演算子で示される条件を満たす適合文書情報が有るかを判別し、有ると判別した場合は適合文書情報を出力し、無いと判断した場合は適合文書情報を得るまで他手段に対して入力要求を行う論理演算手段を作成するステップと、
生成手段が構文木に基づいて、構文木を構成する各ノードをそれぞれ対応する取出手段または論理演算手段に置き換えて接続することにより、検索式に対応する文書情報を出力する文書検索手段を生成するステップと、
制御手段が検索要求に応じて、所定数の文書情報を取得するまで文書検索手段を動作させ、得られた文書情報を検索結果として出力するステップと、
を有することを特徴とする文書検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力された検索式に基づいて所定の条件を満たす文書を検索する文書検索装置、および、その方法、プログラムに関する。
【背景技術】
【０００２】
従来から、蓄積された大量の文書の中から所望の文書を取得するための装置として文書検索装置が知られている。これは、予め、各文書に含まれる語（検索語）と各文書の文書情報とを関連付けて記録したインデックス（索引）を作成し、このインデックスに基づいて所望の検索語を含む文書の検索を行うものである。
【０００３】
この装置を用いて文書検索をする場合、通常、ユーザーは、所望の文書の条件を表す検索式を入力する。検索式は、文書に含まれる検索語や論理演算子を組み合わせて、所望の文書の条件を表したものである。文書検索装置は、入力された検索式が示す条件を満たす文書をインデックスから探し、出力する。
【０００４】
【特許文献１】特開２００１−２２７５７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、従来の文書検索装置では、検索処理に時間がかかるという問題があった。特に、実際に出力される検索結果（検索式の示す条件を満たす文書）の数が数百件の場合であっても、多数（数千、数万件）の検索結果を出力する場合と同じ程度の処理時間がかかっていた。これは、数百件のみを出力する場合であっても、検索処理においては検索式の示す条件を満たす文書を全て検索していたなどの理由による。このように検索処理に時間がかかると、検索開始から結果出力までのレスポンスが悪化し、ひいては、文書検索装置を利用するユーザーに不快感を与えていた。
【０００６】
そのため、従来から検索処理時間を短縮するための種々の技術が開示されている。例えば、特許文献１には、ＳＱＬによる関係データベースにアクセスする際に、ＳＱＬの構文解析木を走査し、複数の結合処理を展開し、一元的な表の並びとした中間オブジェクトを生成するデータベースアクセス方法が開示されている。これによれば、より高速に関係データベースにアクセスすることができる。しかしながら、この技術は、関係データベースという特殊なデータベースにおいて効力を発揮するものであり、文書検索装置への適用は困難であった。
【０００７】
そこで、本発明では、検索処理時間を短縮できる文書検索装置およびその方法、プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の文書検索装置は、入力された検索式に基づいて、文書を検索する文書検索装置であって、入力された検索式を解析し、複数のノードから構成される構文木を作成する構文解析手段と、検索の際に用いられる複数の検索語それぞれに対応付けられた複数のデータベースであって、それぞれ対応する検索語を含む文書の文書情報を文書ＩＤの順に記録している複数のデータベースと、複数の検索語毎に用意された複数の取出手段であって、出力要求に応じて、それぞれ対応する検索語のデータベースから文書ＩＤの順に文書情報を一つずつ取出して出力する複数の取出手段と、検索式で用いられる論理演算子毎に用意される複数の論理演算手段であって、出力要求に応じて、下位に位置する他手段から入力された文書情報の中に各論理演算子で示される条件を満たす適合文書情報が有るかを判別し、有ると判別した場合は適合文書情報を出力し、無いと判断した場合は適合文書情報を得るまで他手段に対して入力要求を行う論理演算手段と、構文木に基づいて、構文木を構成する各ノードをそれぞれ対応する取出手段または論理演算手段に置き換えて接続することにより、検索式に対応する文書情報を出力する文書検索手段を生成する生成手段と、検索要求に応じて、所定数の文書情報を取得するまで文書検索手段を動作させ、得られた文書情報を検索結果として出力する制御手段と、を有することを特徴とする。
【０００９】
好適な態様では、複数の論理演算手段は、ＡＮＤ演算子に対応するＡＮＤ演算手段を有し、ＡＮＤ演算手段は、入力された複数の文書情報に記録された複数の文書ＩＤが同一でない場合、複数の文書ＩＤのうち最も順番が後の文書ＩＤを次候補ＩＤとして他手段に渡し、検索手段は、次候補ＩＤが渡された場合、次候補ＩＤ以降の文書ＩＤを有する文書情報のうち、最も順番が前の文書ＩＤを有した文書情報を出力することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、文書検索装置での検索処理時間を短縮できる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施の形態について図面を参照して説明する。
【００１２】
図１は、本発明の実施の形態である文書検索装置１０のハードウェア構成を示すブロック図である。文書検索装置１０には、各部を制御する機能を有する中央処理装置（以下、「ＣＰＵ」という）１２、ＲＯＭやＲＡＭ等で構成されたメモリ１４、検索対象の文書及びその文書情報等を記憶するハードディスク１６、キーボードやマウス等で検索条件や種々の指示を与える入力部２０、ＣＲＴまたは液晶ディスプレイ等で構成され検索結果等を表示する表示部２２、フレキシブルディスクに対するデータの読み書きを行なうフレキシブルディスクドライブ（ＦＤＤ）２４、ＣＤ−ＲＯＭからのデータの読み出しを行なうＣＤ−ＲＯＭドライブ２６、他の通信装置と信号及びデータを遣り取りするための通信部１８等をそれぞれバスによって接続して構成されている。
【００１３】
図２は文書検索装置１０の機能構成を示すブロック図である。文書検索装置１０は、入力処理部３０、検索条件作成部３２、検索処理部３４、出力処理部３６、インデックス作成部３８を有している。これらは、ＣＰＵ１２によって制御される。また、多数の文書データを格納する文書格納部４０、各文書データの索引（インデックス）を格納するインデックスデータベース群（以下、「インデックスＤＢ群」という）４２も有している。これらは、ハードディスク１６または通信部１８を介して通信される他のコンピュータのハードディスクに設けられる。
【００１４】
入力処理部３０は、ユーザーによって入力された検索条件を表す入力内容を取得し、検索条件作成部３２に出力するものである。ユーザーが入力する内容としては、所望の文書に含まれるであろう語（検索語）や論理演算子などがある。
【００１５】
検索条件作成部３２では、入力された内容に基づいて、検索条件を表す検索式を作成する。検索式とは、検索したい文書の条件を検索語や論理演算子などで表したものである。論理演算子は、検索語に対して条件付けを行うもので、「ＡＮＤ（＊（すべてを含む））」、「ＯＲ（＋（いずれかを含む））」、「ＮＯＴ（！（含まない））」の３種類がある。したがって、例えば、「語Ａと語Ｂの全てを含む」という条件は、（＊  Ａ  Ｂ）という検索式で表される。
【００１６】
作成された検索式は、検索処理部３４に出力される。検索処理部３４は、後述するように作成された検索式に基づいて、所定の条件を満たす文書の検索処理を行う。検索処理部３４の処理により得られた検索結果は、出力処理部３６で所定の出力形式に整えられ、出力される。
【００１７】
インデックス作成部３８は、文書格納部４０に格納された多数の文書データを読み込み、各文書に含まれる検索語とその文書の文書情報とを関連付けたインデックスを作成する。文書情報としては、文書の識別子となる文書ＩＤやその文書の作成日、文書の所在を示すアドレスなどがある。インデックスは、各検索語毎に作成され、各検索語用データベース（以下、「各検索語用ＤＢ」という）としてインデックスＤＢ群４２に記録される。
【００１８】
インデックスＤＢ群４２について図３を用いて説明する。インデックスＤＢ群４２には、図３に示すように、各検索語毎に作成されたインデックスである各索語用ＤＢ４２ａ，４２ｂ・・・が格納されている。したがって、例えば、検索語「ａａａ」を含む文書についての文書情報は、ａａａ用ＤＢ４２ａにまとめて記録されている。その記録の順序は、文書ＩＤの昇順となっている。また、検索語「ｂｂｂ」を含む文書についての文書情報は、ｂｂｂ用ＤＢ４２ｂに文書ＩＤの順にまとめて記録されている。インデックスＤＢ群４２には、このような各検索語用ＤＢが複数格納されている。したがって、例えば、検索語「ａａａ」を含む文書の情報を取得したい場合には、全てのＤＢを読み込むことなく、ａａａ用ＤＢ４２ａのみを読み込めばよい。つまり、所定の検索語を含む文書の文書情報を得たい場合は、その検索語に対応付けられた各検索語用ＤＢにアクセスすればよい。
【００１９】
なお、ここでは、インデックスＤＢ群４２を別個の複数のＤＢの集まりとしているが、図４に示すように１個のツリー構造ＤＢで実現してもよい。図４は、各検索語を含む文書の文書情報をツリー構造で記録したツリー構造ＤＢ４３の一例を示す図である。このツリー構造ＤＢ４３の最下層ノード４３ｄには、各検索語を含む文書の文書情報が記録されている。その記録の順番は、検索語を第１キー、文書ＩＤを第２キーとしてソートした順番である。したがって、最下層ノード４３ｄでは、ある検索語を含む文書の文書情報が文書ＩＤの順に連続して記録されている。言い換えれば、各検索語用ＤＢ４２を横に並べた場合と同じようになる。
【００２０】
また、中間ノード４３ｂ，４３ｃは、それぞれ、複数の下位ノードのうち、最も先頭に位置する下位ノードに記録された検索語と同じ検索語を記録している。例えば、あるノード４３ｂ１が、下位ノードとして検索語「Ａ」を記録したノード４３ｃ１、検索語「Ｂ」を記録したノード４３ｃ２、検索語「Ｃ」を記録したノード４３ｃ３を有する場合、あるノード４３ｂ１は、下位ノードのうち先頭に位置するノード４３ｃ１に記録された検索語「Ａ」を記録している。
【００２１】
このように、各ノードが最も先頭に位置する下位ノードに記録された検索語を記録することにより、所望の検索語を記録したノードに容易に到達することができる。すなわち、上位ノードから順に下位ノードへ移動する際に、常に、所望の検索語より手前または同じ検索語を記録した下位ノードへと移動することにより、最短の距離で所望の最下層ノードへと到達することができる。
【００２２】
次に、図２における検索処理部３４について詳説する。図５に検索処理部３４の詳細な機能ブロック図を示す。検索処理部３４は、構文解析部５０、モジュール作成部５２、プログラム作成部５４、実行部５６を有する。構文解析部５０は、入力された検索式を解析し、図６に示すような構文木を作成する。構文木は、検索式を左から順に走査し、その検索式に含まれる各要素（検索語や論理演算子）の関係を木構造で表現したものである。したがって、例えば、（＊  （＋  Ａ  Ｂ）  Ｃ）という検索式は、図６に示すような構文木６４として表現できる。すなわち、ルートノード６６の下に論理演算子ＡＮＤ「＊」６８が接続され、論理演算子ＡＮＤ「＊」６８の下に論理演算子ＯＲ「＋」７０と検索語「Ｃ」７２とが接続され、論理演算子ＯＲ「＋」７０の下に検索語「Ａ」７４と検索語「Ｂ」７６とが接続された構文木６４として表現できる。
【００２３】
モジュール作成部５２は、後述する論理演算モジュール６０および文書ＩＤ取得モジュール５８を作成する。論理演算モジュール６０は論理演算子の種類ごとに、文書ＩＤ取得モジュール５８は各検索語ごとに作成される。この２種類のモジュール５８，６０は、予め、作成され保存されていてもよいし、構文木が作成される度に構文木に基づいて作成されてもよい。
【００２４】
プログラム作成部５４は、作成された構文木の各ノードを対応するモジュール５８，６０に置き換えて接続して、検索式で示す条件を満たす文書情報を出力する文書検索プログラム６２を作成する。この文書検索プログラム６２は、文書検索処理を行うためのプログラムであり、実行部５６へと出力される。
【００２５】
実行部５６では、文書検索プログラム６２を実行し、実際に文書の検索処理を行う。また、実行部５６には、予め、所定の数である必要結果数が記録されている。そして、実行部５６は、文書検索プログラム６２の実行の結果得られる文書情報（検索結果）が、必要結果数に達すれば、その実行を中止する。このように所定の数に達すれば検索プログラム６２の実行を中止するのは、次の理由による。
【００２６】
多くの場合、ユーザーが必要とする文書検索結果の数は、数百件程度であることが多い。文書検索結果として数千件を取得しても、ユーザーは、その全ての結果を閲覧することが困難だからである。したがって、文書検索処理の際には、実際にユーザーが閲覧可能な程度の値を必要結果数として設定し、必要結果数分の文書情報（検索結果）が得られれば検索処理を中止するようにする。こうすることで、不必要な検索処理を省くことができ、検索処理時間を短縮できる。
【００２７】
ところで、本実施の形態において、必要結果数の文書情報を得た時点で、文書検索プログラム６２の実行を中止できるのは、後述するように文書検索プログラム６２がストリーム型プログラムであるからであるが、これについては後に詳説する。
【００２８】
次に、検索プログラム６２の処理の流れについて簡単に説明する。図７は、検索式（＊（＋Ａ  Ｂ）  Ｃ）についての検索プログラム６２の処理を概念的に示した図である。検索プログラム６２は、構文木の各ノードを、それぞれ、モジュール作成部５２で作成された文書ＩＤ取得モジュール５８または論理演算モジュール６０に置き換えて接続したものである。したがって、図７において構文木の各ノードに対応する各ブロック６０ａ，６０ｂ，５８ａ，５８ｂ，５８ｃは、それぞれ、文書ＩＤ取得モジュール５８または論理演算モジュール６０に相当する。各モジュール５８，６０への入出力関係は、図７における矢印で示されている。
【００２９】
図７において、最下層ノードに相当する各検索語用の文書ＩＤ取得モジュール５８ａ，５８ｂ，５８ｃは、上位ノードからの出力要求に応じて、各検索語用ＤＢ４２ａ，４２ｂ４２ｃにアクセスして所定の文書ＩＤを一つ取得する。そして取得した１つの文書ＩＤを上位ノードに出力する。
【００３０】
図７において、＊ブロックまたは＋ブロックで表される論理演算モジュール６０ａ，６０ｂは、上位モジュール（又はルートノード）からの出力要求に応じて、下位モジュールに対して入力要求（下位モジュールにとっては出力要求）を出力する。そして、下位モジュールから入力された文書ＩＤのうち、各論理演算子の示す条件を満たした文書ＩＤ（適合ＩＤ）があるかを判別する。適合ＩＤがある場合は、それを上位ノードに一つ出力し、無い場合は、再度、下位モジュールに対して入力要求を出す。
【００３１】
例えば、図７に示した例では、ルートノードから出力要求があった場合、ＡＮＤ演算モジュール６０ａは、下位モジュールであるＯＲ演算モジュール６０ｂと検索語Ｃ用文書ＩＤ取得モジュール５８ｃとに入力要求（下位モジュールにとっては出力要求）を出力する。
【００３２】
上位モジュールであるＡＮＤ演算モジュール６０ａから出力要求を受けたＯＲ演算モジュール６０ｂは、さらに、下位モジュールである検索語Ａ用文書ＩＤ取得モジュール５８ａと検索語Ｂ用文書ＩＤ取得モジュール５８ｂとに文書ＩＤの入力要求を出力する。検索語Ａ用文書ＩＤ取得モジュール５８ａは、Ａ用ＤＢ４２ａにアクセスし、所定の文書ＩＤを１つ取得する。そして取得した１つの文書ＩＤをＯＲ演算モジュール６０ｂに出力する。また、検索語Ｂ用文書ＩＤ取得モジュール５８ｂも所定の１つの文書ＩＤをＯＲ演算モジュール６０ｂに出力する。ＯＲ演算モジュール６０ｂは、２つの下位モジュールから入力された２つの文書ＩＤの中に、所定の条件を満たす適合ＩＤがあるかを判別し、有る場合には１つの文書ＩＤを一つ上位モジュール（ＡＮＤ演算モジュール６０ａ）に出力する。無い場合には、適合文書ＩＤを一つ得られるまで、下位モジュール（検索語Ａ用文書ＩＤ取得モジュール５８ａ、検索語Ｂ用文書ＩＤ取得モジュール５８ｂ）に入力要求を出力する。
【００３３】
一方、上位モジュールであるＡＮＤ演算モジュール６０ａから出力要求を受けた検索語Ｃ用文書ＩＤ取得モジュール５８ｃもＣ用ＤＢ４２ｃにアクセスして所定の文書ＩＤを一つ取得し、ＡＮＤ演算モジュール６０ａに出力する。
【００３４】
ＡＮＤ演算モジュール６０ａは、ＯＲ演算モジュール６０ｂおよび検索語Ｃ用文書ＩＤ取得モジュール５８ｃから入力された２つの文書ＩＤの中に、所定の条件を満たす文書ＩＤ（適合ＩＤ）があるかを判別する。適合ＩＤが有る場合にはそれを出力し、無い場合には、再度、下位モジュールに対して入力要求を出力する。
【００３５】
この検索プログラム６２は、実行の都度にプログラムに記載された命令を解釈するインタプリタ型ではなく、予め、機械語にコンパイルされたコインパイル型プログラムである。したがって、実行の度に、命令解釈をする必要がない。
【００３６】
また、この検索プログラム６２は、所定の条件を満たす文書ＩＤを１つ得るために上位モジュールから下位モジュールに向かって順次処理を行うストリーム型プログラムとなっている。
【００３７】
これに対し、従来の多くの文書検索装置では、各ノードごとに各ノードで示す条件を満たす全文書の文書ＩＤを取得し、これを上位ノードに出力していた。したがって、例えば、図７の例では、最下層ノードである検索語Ａ用文書ＩＤ取得モジュール５８ａは、ＤＢ全部を読み込み、検索語Ａを含む全文書の文書ＩＤを取得し、上位ノードに出力していた。つまり、各ノード毎に中間出力として所定の条件を満たす全文書ＩＤを出力していた。
【００３８】
このような中間出力を出力していたのは、従来の文書検索装置では、各ノード毎に中間出力を出力しなければ、最終的に出力される検索結果の最適性（検索結果が検索式で示す条件を満たしているということ）が担保できなかったからである。特にＡＮＤ検索を行う場合には、中間出力を出力しなければＡＮＤ条件を満たしているかの正確な判断ができなかった。
【００３９】
しかしながら、中間出力を出力する従来の方式では、ＤＢ全部を読み込まなければならず、全体の検索処理時間が長くなってしまっていた。特に、所定の数（例えば、数百件など）の検索結果のみが必要な場合であっても、所定の条件を満たす文書を全て出力しなければならず、必要数の検索結果が得られた時点での検索処理の中止ができなかった。したがって、必要以上に検索処理時間がかかっていた。
【００４０】
一方、本実施の形態では、上述したように、所定の条件を満たす文書ＩＤを１つ得るために上位モジュールから下位モジュールに向かって順次処理を行うストリーム型プログラムとなっている。そして、各モジュール（ノード）それぞれが、各モジュール（ノード）の示す条件を満たす文書ＩＤを１つ取得し、それを上位モジュールに出力する。したがって、所定の数の検索結果が得られた時点で検索処理を中止できる。したがって、その所定の数の検索結果を得るために必要となる最低限の時間で検索処理を行うことができる。
【００４１】
このようなストリーム型プログラムであっても、その出力の最適性が保障されるのは、インデックスＤＢ群の構成、および、文書検索プログラム６２を構成する各モジュール５８，６０の処理の方式に特徴があるからである。そこで、各モジュール５８，６０での処理について図８〜図１２を用いて説明する。
【００４２】
はじめに、文書ＩＤ取得モジュール５８の処理について図８を用いて説明する。文書ＩＤ取得モジュール５８では、上位モジュールから出力要求があった場合、対応する検索語用ＤＢを読み込む（Ｓ１０）。例えば、検索語「ａａａ」用の文書ＩＤ取得モジュールでは、検索語「ａａａ」を含む文書の文書情報を記録したａａａ用ＤＢを読み込む。したがって、文書ＩＤ取得モジュールは、ＤＢの中から対応する検索語を探す必要はなく、各検索語用ＤＢに記録されている順番に文書情報を読み込めばよい。
【００４３】
そして、各検索語用ＤＢにおいてＮ番目に記録されている文書ＩＤを取得する（Ｓ１２）。ここで、Ｎは、文書ＩＤ取得モジュールが備えているカウンタの値である。このカウンタの初期値は１となっているため、文書ＩＤ取得モジュールは、最初は、各検索語用ＤＢに１番目に記録されている文書ＩＤを取得する。そして、取得した文書ＩＤを上位ノードに出力する（Ｓ１４）。なお、本実施の形態では、文書ＩＤのみを取得し、出力しているが、他の文書情報、例えば、文書データのアドレスや作成日なども取得出力してもよい。
【００４４】
文書ＩＤを出力すれば、カウンタの値Ｎを一つインクリメントする（Ｓ１６）。したがって、次に出力要求があった場合は、前回出力した文書ＩＤの次に記録された文書ＩＤを出力する。言い換えれば、文書ＩＤ取得モジュールは、文書ＩＤを各検索語用ＤＢに記録されている順に一つずつ取得、出力する。
【００４５】
ここで、各検索語用ＤＢは、各検索語を含む文書の文書情報を文書ＩＤの順に記録されている。また、文書ＩＤ取得モジュールは、文書ＩＤを記録されている順に一つずつ取得、出力する。したがって、文書ＩＤ取得モジュールは、各検索語を含む文書の文書情報を文書ＩＤの順に取得、出力することになる。
【００４６】
また、文書ＩＤ取得モジュールは、各検索語用ＤＢに記録されている順に文書ＩＤを一つずつ取得し、出力する。したがって、各検索語用ＤＢ全てを読み込む必要はなく、一つの文書ＩＤを取得出力するための処理時間は、極めて、短時間ですむことになる。
【００４７】
次に、論理演算モジュールの処理について図９を用いて説明する。論理演算モジュールは、上位モジュールから出力要求があれば、対象下位モジュールに対して入力要求（下位モジュールにとっての出力要求）を出力する（Ｓ２０）。ここで、対象下位モジュールとは、論理演算モジュールの下位に位置する１以上の下位モジュールのうち、入力要求を出す対象となる下位モジュールである。この対象下位モジュールは、初期では、論理演算モジュールの下位に位置する全ての下位モジュールであり、２回目以降では後述する適合ＩＤの有無判別処理において判別された下位モジュールである。
【００４８】
次に下位モジュールから文書ＩＤが入力されれば、これを取得する（Ｓ２２）。そして得られた文書ＩＤに基づいて文書ＩＤテーブル８０を更新する（Ｓ２４）。文書ＩＤテーブル８０は、図９に示すように各下位モジュールから出力された文書ＩＤを記録したテーブルである。ここには、どの下位モジュールがどの文書ＩＤを出力したかが関連付けられて記録される。ただし、ここで各下位モジュールは、何番目の下位モジュールであるかのみが認識されており、その下位モジュールの具体的種類、論理演算モジュールであるのか、取得モジュールであるか、などの認識はなされない。したがって、各論理モジュールが何で有るかを認識しなくてよい。
【００４９】
文書ＩＤテーブル８０を更新すれば、その文書ＩＤテーブル８０に記録された文書ＩＤのうち、所定の条件を満たす文書ＩＤである適合ＩＤがあるかを判別する（Ｓ２６）。この適合ＩＤの有無判別の処理は、各論理演算子毎に決められている。そして、適合ＩＤがあると判別した場合は、それを上位モジュールに出力する（Ｓ３０）。一方、適合ＩＤが無いと判別した場合は、対象下位モジュールに再度、入力要求を出力する（Ｓ２０）。そして、適合ＩＤが得られるまで、これを繰り返す。
【００５０】
次に、各論理演算子毎に決められる適合ＩＤの有無判別について図１０〜図１２を用いて説明する。初めにＯＲ用の論理演算モジュールであるＯＲ演算モジュールでの適合ＩＤの有無判別について図１０を用いて説明する。
【００５１】
ＯＲ演算モジュールは、適合ＩＤの有無を判別する場合、まず、文書ＩＤテーブルに記録された文書ＩＤを比較する（Ｓ３２）。ここで、ＯＲは、「いずれかを含む」を表す論理演算子である。したがって、ＯＲ演算モジュールは、複数の下位モジュールが示す複数の条件のうち、いずれか１つの条件を満たす文書ＩＤを出力すればよい。また、各下位モジュールはそれぞれが示す条件を満たした文書ＩＤを出力する。したがって、ＯＲ演算モジュールは、複数の下位モジュールから出力される複数の文書ＩＤであれば、どれであっても適合ＩＤとすることができる。言い換えれば、ＯＲ演算モジュールは、下位モジュールから文書ＩＤが入力されれば、常に、適合ＩＤが有ると判別することができる。
【００５２】
ただし、下位モジュールから複数の文書ＩＤが出力されても、ＯＲ演算モジュールが出力する文書ＩＤは、１つずつである。そこで、ＯＲ演算モジュールは、文書ＩＤテーブル８０に記憶された複数の文書ＩＤのうち、最小の文書ＩＤを適合ＩＤとして判別する（Ｓ３６）。
【００５３】
また、適合ＩＤを出力した下位モジュールを、次に入力要求を出力する対象下位モジュールとして設定する（Ｓ３８）。最小の文書ＩＤが２以上の下位モジュールから出力されていた場合には、その２以上の下位モジュールを対象下位モジュールとしてセットする。
【００５４】
次にＡＮＤ演算モジュールの適合ＩＤの有無判別処理について図１１を用いて説明する。ＡＮＤは、「すべてを含む」を表す論理演算子である。したがって、ＡＮＤ演算モジュールは、複数の下位モジュールが示す複数の条件全てを満たす文書ＩＤを出力する。
【００５５】
上述したように下位モジュールは、各モジュールが示す条件を満たす文書ＩＤを出力している。したがって、各下位モジュールから出力された文書ＩＤが一致する場合、その文書ＩＤは、各下位モジュールで示す複数の条件全てを満たす文書の文書ＩＤであると判断できる。例えば、検索語「Ａ」を含み、かつ、検索語「Ｂ」を含むという条件は、図１５に示すような構文木で表すことができる。このとき、Ａ用文書ＩＤ取得モジュール５８ａは検索語Ａを含む文書の文書ＩＤを、Ｂ用文書ＩＤ取得モジュール５８ｂは検索語Ｂを含む文書の文書ＩＤを、それぞれ出力する。したがって、Ａ用文書ＩＤ取得モジュール５８ａで出力された文書ＩＤとＢ用文書ＩＤ取得モジュール５８ｂで出力された文書ＩＤとが同じである場合、その文書ＩＤの文書は、「検索語Ａを含み、かつ、検索語Ｂを含む」と判断できる。
【００５６】
したがって、ＡＮＤ演算モジュールは、適合ＩＤの有無判別において、文書ＩＤテーブル８０に記録された文書ＩＤが全て一致するかを判別する（Ｓ４０）。全て一致する場合は、適合文書ＩＤがあると判断し（Ｓ４２）、一致した文書ＩＤを適合ＩＤとして出力する（Ｓ４４）。また、全下位ノードを対象下位ノードにセットする（Ｓ４６）。
【００５７】
一方、全文書ＩＤが一致しなかった場合は、適合文書ＩＤは無いと判別する（Ｓ４８）。そして、全文書ＩＤのうち、最小の文書ＩＤを出力したモジュールを対象下位モジュールにセットする（Ｓ５０）。これにより、次回は、最小の文書ＩＤを出力したモジュールから新たな文書ＩＤが入力される。
【００５８】
このように判別する理由について簡単に説明する。例えば、図１５に示す構文木において、最初の入力要求に対して、Ａ用文書ＩＤ取得モジュール５８ａから文書ＩＤ「０００３」が出力され、Ｂ用文書ＩＤ取得モジュール５８ｂから「０００４」が出力された場合について考える。各文書ＩＤ取得モジュール５８ａ，５８ｂは文書ＩＤを昇順に出力する。したがって、Ｂ用文書ＩＤ取得モジュール５８ｂから「０００４」が出力された場合、検索語Ｂは文書ＩＤ「０００４」より小さい文書ＩＤの文書には含まれないと判断できる。言い換えれば、文書ＩＤ「０００３」の文書には、検索語Ｂは含まれないと判別できる。一方で、文書ＩＤ「０００４」の文書には検索語Ａが含まれるか否かは、まだ不明である。したがって、文書ＩＤ「０００３」を出力したＡ用文書ＩＤ取得モジュール５８ａを対象下位モジュールにセットし、Ａ用文書ＩＤ取得モジュール５８ａに対して再度の入力要求を出力する。
【００５９】
そして、Ａ用文書ＩＤ取得モジュール５８ａから文書ＩＤ「０００４」が出力されれば、全文書ＩＤが一致するため「０００４」を適合ＩＤと判別できる。一方、Ａ用文書ＩＤ取得モジュール５８ａから「０００４」より後の文書ＩＤが出力されれば、文書ＩＤ「０００４」の文書には検索語Ａが含まれないことが確実となる。その場合、今度は、Ｂ用文書ＩＤ取得モジュール５８ｂを対象下位モジュールにセットして、再度の入力要求を出力する。
【００６０】
このように、各モジュールで示す条件を満たす文書ＩＤが昇順で出力されるため、ＡＮＤ演算モジュールは、下位モジュールから入力される文書ＩＤが一つずつであっても、ＡＮＤ条件を満たす文書の文書ＩＤを取得できる。したがって、各モジュール毎に所定の条件を満たす全文書ＩＤを中間出力として出力する必要がない。そのため、所定の数の検索結果が必要な場合、その検索結果を得るのに最低限必要な処理時間で検索処理を行うことができる。
【００６１】
次に、ＮＯＴ演算モジュールでの判別について図１２を用いて説明する。ＮＯＴは「含まない」を示す論理演算子である。したがって、ＮＯＴ演算モジュールは、下位モジュールから出力された文書ＩＤ以外の文書ＩＤを適合文書ＩＤとして出力すればよい。ただし、このＮＯＴ演算モジュールも、文書ＩＤを昇順に一つずつ出力しなければならない。したがって、前回出力した適合ＩＤを前回適合ＩＤとして記録しておき、前回適合ＩＤに１を加算した値を適合ＩＤとして出力するようにすればよい。ただし、この前回適合ＩＤに１を加算した値が下位モジュールから入力された文書ＩＤと一致する場合はＮＯＴ条件に反する。したがって、その場合は、適合ＩＤ無しと判断できる。
【００６２】
したがって、ＮＯＴ演算モジュールでの判別処理は、図１２に示すように、まず、下位モジュールから入力された文書ＩＤが前回適合ＩＤ＋１より大きいかを判別する（Ｓ５２）。入力された文書ＩＤのほうが大きい場合は、適合ＩＤ有りと判別する（Ｓ５４）。そして、前回適合ＩＤに１を加算した値を今回の適合ＩＤとして判別する（Ｓ５６）。このとき、対象下位モジュールとしては、ＮＵＬＬをセットする（Ｓ６０）。すなわち、次の出力要求の際には、どの下位モジュールに対しても入力要求を出力しない。
【００６３】
一方、下位モジュールから入力された文書ＩＤと前回適合ＩＤ＋１とが等しい場合は、適合文書ＩＤ無しと判別する（Ｓ６２）。また、入力された文書ＩＤを前回適合ＩＤとして記録する（Ｓ６４）。そして、全下位モジュールを対象下位モジュールにセットし（Ｓ６６）、再度の入力要求を出力する。
【００６４】
このように、下位モジュールからの入力される文書ＩＤが常に文書ＩＤの順で入力されることが明らかなため、ＮＯＴ論理演算モジュールにおいても、下位モジュールから文書ＩＤが一つずつの入力されても、正確な判断をすることができる。
【００６５】
以上、説明したように、各論理演算モジュールは、下位モジュールから入力される文書ＩＤが１つずつ入力されても、その文書ＩＤを所定の手順で比較することにより、所定の条件を満たすか否かを正確に判別することができる。これは、文書ＩＤ取得モジュールが常に各検索語を含む文書の文書ＩＤを昇順に出力するようになっており、ひいては、各論理演算モジュールも所定の条件を満たす文書ＩＤを昇順に出力するようになっているからである。
【００６６】
また、各モジュールは、各モジュールの示す条件を満たす文書ＩＤを一つずつ出力する。したがって、各モジュールが示す条件を満たす文書ＩＤを全て取得してから上位モジュールに出力する方法に比べてより短時間で検索処理を行うことができる。
【００６７】
また、全ての論理演算モジュールは、その入出力の形式が統一されている。すなわち、各論理演算モジュールは、その下位および上位に位置するモジュールがどのようなモジュールであっても、１以上の文書ＩＤを入力とし、一つの文書ＩＤを出力する形式となる。したがって、これら論理演算モジュールを組み合わせて文書検索プログラムを作成する際に、その入出力の形式を改めて整える必要は無い。そのため、より容易に文書検索プログラムを作成することができる。
【００６８】
なお、ＡＮＤ演算モジュールにおいて、下位モジュールに対して入力要求とともに次回での適合ＩＤ候補である次候補ＩＤを出力すれば、より効率的に検索処理を行うことができる。これについて図１３を用いて説明する。
【００６９】
図１３は、他のＡＮＤ演算モジュールでの処理の流れを示す図である。このＡＮＤ演算モジュールでは、下位モジュールから入力された文書ＩＤが一致しなかった場合、適合ＩＤ無しと判断するとともに、文書ＩＤテーブルに記憶された文書ＩＤのうち最大の文書ＩＤを「次候補ＩＤ」としてセットする（Ｓ８０）。そして、対象下位ノードに対して入力要求を出力する際に次候補ＩＤも出力する。
【００７０】
最大ＩＤを次候補ＩＤとするのは、次の理由による。上述したように下位モジュールそれぞれからは、文書ＩＤが文書ＩＤの昇順に入力される。したがって、例えば、例えば図１５の構文木において、Ａ用文書ＩＤ取得モジュール５８ａから文書ＩＤ「０００５」が出力され、Ｂ用文書ＩＤ取得モジュール５８ｂから文書ＩＤ「０００２」が出力された場合、文書ＩＤ「０００５」より前の文書ＩＤを有する文書は、検索語Ａを含む文書は無いことが確実である。一方、文書ＩＤ「０００５」の文書は、検索語Ｂを含むか否かは不明である。したがって、この時点では、文書ＩＤ「０００５」が最も有力な適合ＩＤの候補であるといえる。そこで、ＡＮＤ演算モジュール６０は、文書ＩＤテーブルに記録された文書ＩＤが不一致の場合、そのうち最大の文書ＩＤを「次候補ＩＤ］として記録し、これを対象モジュールに出力する。
【００７１】
一方、文書ＩＤ取得モジュールにおいては、上位モジュールから次候補ＩＤが渡された場合、図１４に示すような処理を行う。すなわち、各検索語用ＤＢを読み込みＮ番目の文書ＩＤを取得した後、次候補ＩＤが上位モジュールから渡されているかを判別する（Ｓ８２）。次候補ＩＤが渡されていない場合は、そのまま、取得した文書ＩＤを上位ノードに出力し、カウンタの値Ｎをインクリメントして処理を終了する（Ｓ１４、Ｓ１６）。
【００７２】
次候補ＩＤが上位モジュールから渡されている場合は、取得した文書ＩＤと次候補ＩＤとを比較する（Ｓ８６）。そして取得した文書ＩＤより次候補ＩＤのほうが大きいと判断した場合、カウンタＮの値をインクリメントし、再度、文書ＩＤの取得を行う（Ｓ８４，Ｓ１２）。
【００７３】
すなわち、文書ＩＤ取得モジュールは、次候補ＩＤが上位モジュールから渡されている場合、その次候補ＩＤより小さい文書ＩＤを上位モジュールに出力しないようになっている。すなわち、上述したように、次候補ＩＤより小さい文書ＩＤは、上位に位置するＡＮＤ演算モジュールの示す条件を満たさないことが確実である。したがって、そのような文書ＩＤを出力しても無駄な処理となってしまう。そこで、次候補ＩＤが上位モジュールから渡された場合は、次候補ＩＤより小さい文書ＩＤは、出力しないようにする。
【００７４】
こうすることで無駄な処理を省くことができ、より、効率的に検索処理を行うことができる。
【００７５】
なお、以上の説明では、各検索語用ＤＢに文書情報が文書ＩＤの昇順に記録されているとしているが、当然ながら降順であってもよい。その場合、各論理演算モジュールでの適合ＩＤの有無判別も適宜変更する。また、本実施の形態では、論理演算モジュールは、文書ＩＤテーブルに基づいて適合ＩＤの有無や対象下位モジュールの判別などを行っているが、下位モジュールから入力された文書ＩＤの中に適合ＩＤが有るかを判別し、有ると判別した場合は適合ＩＤを出力し、無いと判断した場合は適合ＩＤを得るまで下位モジュールに対して入力要求を出力するものであれば、他の処理方式であってもよい。
【図面の簡単な説明】
【００７６】
【図１】本発明の実施の形態である文書検索装置のハードウェア構成を示すブロック図である。
【図２】文書検索装置の機能構成を示すブロック図である。
【図３】インデックスＤＢ群を説明するための図である。
【図４】他のインデックスＤＢ群の例を示す図である。
【図５】検索処理部の機能構成を示すブロック図である。
【図６】構文木の一例を示す図である。
【図７】文書検索プログラムの処理の概念図である。
【図８】文書ＩＤ取得モジュールのフローチャートである。
【図９】論理演算モジュールのフローチャートである。
【図１０】ＯＲ演算モジュールにおける適合ＩＤの有無判別のフローチャートである。
【図１１】ＡＮＤ演算モジュールにおける適合ＩＤの有無判別のフローチャートである。
【図１２】ＮＯＴ演算モジュールにおける適合ＩＤの有無判別のフローチャートである。
【図１３】他のＡＮＤ演算モジュールにおける適合ＩＤの有無判別のフローチャートである。
【図１４】他の文書ＩＤ取得モジュールのフローチャートである。
【図１５】構文木の一例を示す図である。
【符号の説明】
【００７７】
１０  文書検索装置、３０  入力処理部、３２  検索条件作成部、３４  検索処理部、３６  出力処理部、３８  インデックス作成部、４０  文書格納部、４２  インデックスＤＢ群、５２  モジュール作成部、５４  プログラム作成部、５６  実行部、５８  文書ＩＤ取得モジュール、６０  論理演算モジュール、６２  文書検索プログラム、６２  検索プログラム、６４  構文木。
【図１】
2005165521.tif 000003
【図２】
2005165521.tif 000004
【図３】
2005165521.tif 000005
【図４】
2005165521.tif 000006
【図５】
2005165521.tif 000007
【図６】
2005165521.tif 000008
【図７】
2005165521.tif 000009
【図８】
2005165521.tif 000010
【図９】
2005165521.tif 000011
【図１０】
2005165521.tif 000012
【図１１】
2005165521.tif 000013
【図１２】
2005165521.tif 000014
【図１３】
2005165521.tif 000015
【図１４】
2005165521.tif 000016
【図１５】
2005165521.tif 000017