(57)【特許請求の範囲】
【請求項１】
論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置の評価方法であって、
前記検索装置は、
前記論理式に含まれる各論理変数の論理値を計算するための時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定ステップと、
前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定ステップと、
前記決定された評価順序の優先順位に基づいて、前記計算コストの少ない論理変数を木構造の上位位置に配置し、前記計算コストの大きい論理変数を前記木構造の下位位置に配置して、前記計算コストの大きい論理変数を経由しないで、前記論理式の真または偽の論理結果を得る経路を有する２分木を生成して前記論理式を評価する評価ステップと、
を含んだことを特徴とする評価方法。
【請求項２】
前記計算コストの少ない論理変数の論理値を予め計算し、前記検索クエリの評価時に、必要に応じて前記計算コストの大きい論理変数の論理値を計算する論理値計算ステップを更に含んだことを特徴とする請求項１に記載の評価方法。
【請求項３】
前記計算コスト判定ステップは、過去の経験則、あるいは前記論理変数が真であるか否かを判定する条件式の種別に基づいて計算コストの大きい論理変数と計算コストの少ない論理変数とを判定することを特徴とする請求項１または請求項２に記載の評価方法。
【請求項４】
前記優先順位決定ステップは、前記論理式を先頭から順に読み出す過程において、前記計算コストの大きい論理変数を前記計算コストの少ない論理変数の後に並べ、前記計算コストの大きい論理変数の後に演算子を並べる処理を繰り返し実行することで、前記論理式を変換し、変換後の論理式に基づき、論理変数の前記評価順序の優先順位を決定することを特徴とする請求項１、２または３に記載の評価方法。
【請求項５】
前記優先順位決定ステップは、逆ポーランド表記を利用し前記検索クエリに含まれる論理式を変換した結果である変換後の論理式に基づき、論理変数の前記評価順序の優先順位を決定することを特徴とする請求項１、２または３に記載の評価方法。
【請求項６】
論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置であって、
前記論理式に含まれる各論理変数の論理値を計算するための計算時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定手段と、
前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定手段と、
前記決定された評価順序の優先順位に基づいて、前記計算コストの少ない論理変数を木構造の上位位置に配置し、前記計算コストの大きい論理変数を前記木構造の下位位置に配置して、前記計算コストの大きい論理変数を経由しないで、前記論理式の真または偽の論理結果を得る経路を有する２分木を生成して前記論理式を評価する評価手段と、
を備えたことを特徴とする検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置の評価方法等に関するものである。
【背景技術】
【０００２】
近年、ＸＭＬ（Extensible  Markup  Language）等のマークアップ言語によって文書データ（以下、ＸＭＬデータと表記する）が作成され、各種のコンピュータで利用されている。ＸＭＬは、異なるシステム間であっても、インターネット等を介して、構造化された文書や構造化されたデータの供給を容易にすることが出来るため、ますます多用されている。
【０００３】
そして、ＸＭＬデータの特定の照合位置を指定するものとして、検索クエリが用いられる。この検索クエリは、ＸＭＬデータのための標準クエリ言語であり、ＸＭＬデータの複雑な木構造に対して検索式を記述する能力を持つ。
【０００４】
また、近年では、検索クエリの論理式の評価式を簡易にすることで、検索クエリによるデータ検索処理の負荷等を軽減させる技術が考案されている（例えば、特許文献１）。この特許文献１では、検索クエリの論理式のノードの数を少なくするＢＤＤ（Binary  Decision  Diagrams）手法をベースとして、さらに、論理式の最終判断に影響しないノード（ドントケア条件を満たすノード）部分を削除することで、手順の簡略化を図っている。
【０００５】
【特許文献１】特公平０７−１２０３６５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した周知技術（例えば、特許文献１）のように、ＢＤＤ手法をより向上させて論理式のノードの数を減らしたとしても、論理式に含まれる各論理変数の真偽結果を計算する場合の計算コストを評価していないため、必ずしも検索処理を高速化することが出来ないという問題があった。
【０００７】
すなわち、周知の技術では、論理式のノードの数が少ない場合であっても、個々の論理式に含まれる論理変数の計算コストが高い場合があり、そのような場合には、真偽結果を計算する処理が重くなるので、検索処理の高速化を妨げてしまう。
【０００８】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、評価式の真偽結果にかかる計算コストを評価して検索クエリによる検索処理を高速化することが出来る評価方法および検索装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、この評価方法は、論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置の評価方法であって、前記検索装置は、前記論理式に含まれる各論理変数の論理値を計算するための時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定ステップと、前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定ステップと、前記決定された評価順序の優先順位に基づいて、計算コストの少ない論理変数を含む条件部分から先に評価する評価ステップと、を含んだことを要件とする。
【００１０】
また、この評価方法は、上記の評価方法において、前記計算コストの少ない論理変数の論理値を予め計算し、前記検索クエリの評価時に、必要に応じて前記計算コストの大きい論理変数の論理値を計算する論理値計算ステップを更に含んだことを要件とする。
【００１１】
また、この評価方法は、上記の評価方法において、前記計算コスト判定ステップは、過去の経験則、あるいは前記論理変数が真であるか否かを判定する条件式の種別に基づいて計算コストの大きい論理変数と計算コストの少ない論理変数とを判定することを要件とする。
【００１２】
また、この評価方法は、上記の評価方法において、前記優先順位決定ステップは、逆ポーランド表記を利用し前記検索クエリに含まれる論理式を変換した結果である変換後の論理式に基づき、論理変数の前記評価順序の優先順位を決定することを要件とする。
【００１３】
また、この検索装置は、論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置であって、前記論理式に含まれる各論理変数の論理値を計算するための計算時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定手段と、前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定手段と、前記決定された評価順序の優先順位に基づいて、計算コストの少ない論理変数を含む条件部分から先に評価する評価手段と、を備えたことを要件とする。
【発明の効果】
【００１４】
この評価方法によれば、検索クエリを取得した場合に、論理式に含まれる各論理変数の論理値を計算するための時間を予測することで、計算コストの大きい論理変数（第１論理変数）と計算コストの少ない論理変数（第２論理変数）とを判定し、計算コストの少ない論理変数が計算コストの大きい論理変数よりも前になるように、検索クエリに含まれる論理変数の評価順序の優先順位を変換し、変換した検索クエリに基づいて計算コストの少ない論理変数を含む条件式から先に評価するので、検索クエリによる検索処理を高速化することが可能となる。
【００１５】
すなわち、第２論理変数が第１論理変数の前に配置される場合と、第２論理変数が第１論理変数の後ろに配置される場合とを比較すると、第２論理変数が第１論理変数の前に配置される方が第１論理変数の論理値が必要となる機会が少なくなるので、結果的に、計算コストの大きい論理値を算出すべき回数が減り、検索クエリによる検索処理を高速化することが出来る。
【００１６】
また、この評価方法によれば、計算コストの少ない論理変数の論理値のみを予め算出しておき、必要に応じて計算コストの大きい論理変数の論理値を算出するので、計算コストの大きい論理変数の論理値を算出すべき回数を減らし、検索処理の負荷を軽減させることが出来る。
【００１７】
また、この評価方法によれば、過去の経験則、あるいは前記論理変数が真であるか否かを判定する条件式の種別に基づいて計算コストの大きい論理変数と計算コストの少ない論理変数とを判定するので、論理変数の計算コストが大きいか否かを的確に判定することが出来る。
【００１８】
また、この評価方法によれば、逆ポーランド表記を利用することにより、検索クエリに含まれる論理変数の評価順序の優先順位を変換するので、括弧が不要となり、コンピュータが単純なスタック構造を構築するだけで演算が出来る。
【発明を実施するための最良の形態】
【００１９】
以下に添付図面を参照して、この発明に係る評価方法および検索装置の好適な実施の形態を詳細に説明する。
【実施例１】
【００２０】
まず、周知技術のＢＤＤ（Binary  Decision  Diagrams）法について説明する。このＢＤＤ法は、論理変数の入力順序（この入力順序が、論理変数の評価順序の優先順位となる）を定義することにより、検索クエリに含まれる論理式を２分木で表現し、評価する手法である。図１は、周知技術のＢＤＤ法を説明するための図である。
【００２１】
例えば、論理式「a  and  b  or  c  and  d」をそのまま２分木で表現すると、２分木２０のように表現することが出来る。図１に示すように、この２分木２０は、論理式の論理変数「ａ〜ｄ」に対応するノード「Ａ〜Ｄ」によって構成されている。なお、２分木２０は、レベルテーブル２０ａおよび遷移テーブル２０ｂによって定義される。
【００２２】
レベルテーブル２０ａは、各ノードのレベルと、ノードに対応する論理変数を管理するテーブルである。例えば、ノードテーブル２０ａの１段目では、ノード「Ｄ」のレベルが「０」であり、ノード「Ｄ」に対応する論理変数が「ｄ」である旨の情報が登録されている。そして、各ノードに割り当てられたレベルが、すなわち、入力順序となっている。
【００２３】
遷移テーブル２０ｂは、各ノードの論理値と、論理値に対応したノードの遷移先を管理するテーブルである。例えば、遷移テーブル２０ｂの１段目では、ノード「Ｄ」の論理値が「０」である場合に、ノード「Ｂ」に遷移する旨の情報が登録されている。
【００２４】
そして、論理変数ａ〜ｄの論理値が、論理値テーブル１０ａのように既に計算されているものとすれば、文書ＩＤ「０」の各論理変数の論理値は、「a=0  b=1  c=0  d=1」なので、２分木２０より、文書ＩＤ「０」の文書データに対する論理式の評価結果は「０（偽）」となる。一方、文書ＩＤ「１」の各論理変数の論理値は、「a=1  b=1  c=1  d=0」なので、２分木２０より、文書ＩＤ「１」の文書データに対する論理式の評価結果は「１（真）」となる。
【００２５】
しかしながら、従来の技術では、図１に示したように、予め、全ての論理変数の論理値を計算しておく必要があり、論理値の計算コストが高い場合（論理値が「１」か「０」かを計算する時間が所定時間以上となる場合）には、処理時間が大きくなるという問題があった。また、従来の技術では、論理変数のレベルを決定する際に、各論理変数の計算コストを考慮してこなかった。上述した特許文献１も、ノードの数を減らすことしか言及しておらず、最終的に残ったノードの入力順序を各論理変数の計算コストを考慮して決定してはいない。
【００２６】
更に、計算コストを考慮しないノードの入力順序では、例えば、次のような問題が起きてしまう。図１を参照すると、ノードＣは入力順序ではノードＤに続く第二番目の順序となっている。そして、ノードＣの計算コストが他のノードよりも非常に大きいとする。このような条件でも、検索対象となる全ての文書について必ずノードＣを評価しなければならない場合は、計算コストの観点から見れば全体的な処理コストはどのような入力順序でもあまり影響ないかもしれない。しかし、図１の場合、文書ＩＤ「１」のように論理値が、「a=1  b=1  c=1  d=0」となる場合には、ノードＣを通過していないので、ノードＣの論理変数を利用しておらず、論理変数「ｃ」の論理値の計算時間が無駄となっている。そして、このようにノードＣの論理変数を利用しない文書が多数ある場合は、ノードＣにかけた計算時間の無駄は無視できなくなってしまう。だから、ノードＣの入力順序を極力後方へもってくる方が望ましい。そうすることで、ノードＣを評価する以前の段階で、最終的な真偽決定が決定されノードＣの計算処理が不要となるケースを増やすことができる。
【００２７】
次に、本実施例１にかかる検索装置の概要および特徴について説明する。図２は、本実施例にかかる検索装置の概要および特徴を説明するための図である。本実施例１にかかる検索装置は、検索クエリの論理式に含まれる各論理変数の論理値を計算するための計算時間を予測することで、計算コストの大きい論理変数（以下、第１論理変数）と計算コストの少ない論理変数（以下、第２論理変数）とを判定し、第２論理変数が第１論理変数の前になるように、検索クエリに含まれる論理変数の順序を変換し、変換した検索クエリに基づいて、計算コストの少ない論理変数を含む部分から先に評価する。
【００２８】
また、本実施例１にかかる検索装置は、計算コストの少ない第２論理変数の論理値のみを予め算出しておき、検索クエリの評価の過程で必要になった場合にはじめて、該当する第１論理変数の論理値を算出する。
【００２９】
例えば、検索装置は、図２に示すように、検索クエリの論理式「A  and  B  or(C  and  D  or  E)and  (F  or  G  and  H)」を評価する場合に、各論理変数Ａ〜Ｈの論理値を計算するための時間を予測することで、各論理変数Ａ〜Ｈが第１論理変数か第２論理変数かを判定する。
【００３０】
検索装置は、過去の経験則、あるいは論理変数の論理値が真であるか否かを判定するための条件式の種別に基づいて、論理変数Ａ〜Ｈが第１論理変数か第２論理変数かを判定する。ここでは一例として、論理変数Ａ，Ｃが第１論理変数に属し、その他の論理変数Ｂ，Ｄ，Ｅ，Ｆ，Ｇ，Ｈが第２論理変数に属するものとする。
【００３１】
そして、検索装置は、逆ポーランド表記などを用いることにより、変換前の検索クエリと、変換後の検索クエリとの関係を等価（変換前の検索クエリと変換後の検索クエリとの評価結果が等価）に保った状態で、第２論理変数が第１論理変数の前になるように、検索クエリに含まれる論理変数の順序を変換する。図２に示す例では、検索クエリの論理変数の順序を「Ｂ，Ａ，Ｄ，Ｃ，Ｅ，Ｆ，Ｇ，Ｈ」から「Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ，Ｂ，Ａ」に変換している。
【００３２】
図２の２分木３０は、変換前の検索クエリの２分木を表し、２分木４０は、変換後の検索クエリの２分木を示している。ここで、２分木３０と２分木４０とを比較すると、２分木３０では、ノードＢの論理値が「１」というだけで、計算コストの大きいノードＡの論理値が必要となるが、２分木４０では、ノードＢの論理値が「１」だとしても、論理変数Ｈ，Ｇ，Ｆ，Ｅ，Ｄ次第で、計算コストの大きな論理値Ａ，Ｃを評価しなくて済む。
【００３３】
このように、本実施例にかかる検索装置は、各論理変数の計算コストに基づいて、第２論理変数が第１論理変数の前になるように、検索クエリに含まれる論理変数の順序を変更することで、第１論理変数の論理値を評価する機会を減らし、必要な場合にのみ、第１論理変数の論理値を算出するので、検索クエリの評価時における計算処理負荷を軽減させることができ、検索処理を高速化することが出来る。
【００３４】
次に、本実施例にかかる検索装置を備えた検索システムの構成について説明する。図３は、本実施例にかかる検索システムの構成を示す図である。同図に示すように、この検索システムは、端末装置６０と検索装置１００とをネットワーク５０で接続して構成される。
【００３５】
端末装置６０は、入力装置（図示略）を介して利用者等から検索クエリを入力された場合に、検索クエリを検索装置に送信し、検索装置１００からの検索結果を出力装置（図示略）に出力する装置である。
【００３６】
検索装置１００は、端末装置６０から検索クエリを受信した場合に、検索クエリを評価し、ＸＭＬデータから該当するデータを検索して検索結果を端末装置６０に送信する装置である。以下において、本実施例３にかかる検索装置１００の構成を具体的に説明する。
【００３７】
図４は、本実施例にかかる検索装置１００の構成を示す機能ブロック図である。同図に示すように、この検索装置１００は、入力部１１０と、出力部１２０と、通信制御ＩＦ部１３０と、入出力制御ＩＦ部１４０と、記憶部１５０と、制御部１６０とを備えて構成される。
【００３８】
入力部１１０は、各種の情報を入力する入力手段であり、例えば、キーボードやマウス、マイクなどによって構成される。なお、後述するモニタ（出力部１２０）も、マウスと協働してポインティングデバイス機能を実現する。
【００３９】
出力部１２０は、各種の情報を出力する出力手段であり、モニタ（若しくはディスプレイ、タッチパネル）やスピーカなどによって構成される。通信制御ＩＦ部１３０は、主に端末装置６０との間における通信を制御する手段である。なお、入出力制御ＩＦ部１４０は、入力部１１０、出力部１２０、通信制御ＩＦ部１３０、記憶部１５０、制御部１６０によるデータの入出力を制御する手段である。
【００４０】
記憶部１５０は、制御部１６０による各種処理に必要なデータおよびプログラムを記憶する記憶手段であり、特に本発明に密接に関連するものとしては、ＸＭＬデータ１５０ａと、検索クエリ１５０ｂと、分解検索クエリ１５０ｃと、計算量見積テーブル１５０ｄと、計算量テーブル１５０ｅと、抽出結果テーブル１５０ｆと、論理値テーブル１５０ｇと、変換論理式データ１５０ｈと、論理式判定ダイアグラムデータ１５０ｉと、評価結果テーブル１５０ｊと、検索結果データ１５０ｋとを備える。
【００４１】
ここで、ＸＭＬデータ１５０ａは、要素識別子「＜」、「＜／」等により要素が区切られた階層構造を有する文書データである。図５は、ＸＭＬデータ１５０ａのデータ構造の一例を示す図である。なお、同図に示す例では、「/busyo」で表される要素が３種類あるので、説明の便宜上、「name」要素に「第一開発部」、「ID」要素に「２２２２」を有する「/busyo」の要素を第１要素、「name」要素に「第一研究部」、「ID」要素に「３３３３」を有する「/busyo」の要素を第２要素、「name」要素に「第三開発部」、「ID」要素に「１２２３」を有する「/busyo」の要素を第３要素とする。
【００４２】
検索クエリ１５０ｂは、ＸＭＬデータ１５０ａから照合位置のデータを取り出すためのデータである。図６は、検索クエリ１５０ｂのデータ構造の一例を示す図である。同図に示す検索クエリは、「/busyo」で表される各要素のうち、「name」の要素に「開発部」を含み、かつ「ID」の要素に「"1.*3"」（先頭の数字が１、末尾の数字が３となる数列）を含む要素を選択し、選択した要素の「name」に登録された文書データを検索対象として指定する検索クエリである。
【００４３】
例えば、図５に示したＸＭＬデータ１５０ａに対して、図６に示した検索クエリ１５０ｂが指定された場合には、第３要素、すなわち、「name」の要素に「第三開発部」、「ID」の要素に「１２２３」を有する「/busyo」の要素が検索クエリ１５０ｂの条件を満たすので、かかる第３要素の「name」に登録された文書データ「第三開発部」が検索対象のデータとなる。
【００４４】
分解検索クエリ１５０ｃは、検索クエリ１５０ｂが検索クエリ分解部１６０ａ（後述する）によって分解された結果得られるデータである。図７は、分解検索クエリ１５０ｃのデータ構造の一例を示す図である。
【００４５】
同図に示すように、この分解検索クエリ１５０ｃは、検索クエリ（図６参照）を論理変数および論理演算子で表した論理式「Q=q1  and  q2」と、各論理変数ｑ１，ｑ２の評価式「q1./busyo/name="開発部"」、「q2./busyo/ID=="1.*3"」と、検索結果を送信する際の定義式「Return  /bunsyo/name/test()」を有する。
【００４６】
ここで、論理変数ｑ１，ｑ２には、評価式の評価結果に応じて、「１（真）」または「０（偽）」の論理値が算出される。例えば、ｑ１の評価式「q1./busyo/name="開発部"」によって第１要素を評価すると、「name」の要素に、開発部が含まれるので、評価結果は「１」となる。一方、ｑ２の評価式「q2./busyo/ID=="1.*3"」によって第１要素を評価すると、「ID」の要素に、該当文書データが含まれないので、評価結果（論理値）は「０」となる。
【００４７】
計算量見積テーブル１５０ｄは、論理変数の論理値を評価する評価式の計算コストを管理するテーブルである。図８は、計算量見積テーブル１５０ｄのデータ構造の一例を示す図である。同図に示すように、この計算量見積テーブル１５０ｄは、評価式種別と、計算コストとを対応付けて記憶しており、例えば、評価式種別は、単純検索、正規表現、数値演算、日時計算、近傍検索を有する。また、各評価式種別に対応する計算コストの値は、管理者の経験により適宜設定・更新される。
【００４８】
ここで、単純検索に分類される評価式は、所定の文書データが、検索対象の要素に含まれているか否かを判定する評価式である。例えば、図７の評価式ｑ１が単純検索の評価式に該当する。
【００４９】
正規表現に分類される評価式は、各種の複雑な処理を要する評価式である。数値演算に分類される評価式は、比較や四則演算、複雑な関数などを含む（単なる一致判定は含まない）評価式である。たとえば、図７の評価式ｑ２が数値演算に該当する。
【００５０】
日時計算に分類される評価式は、２００８年１月以降以前などのように、様々なフォーマットに対応しながら判定が必要となる評価式である。近傍検索に分類される評価式は、「情報」と「統合」の間が５文字以内などのように、文字間隔等を数える必要がある評価式である。
【００５１】
計算量テーブル１５０ｅは、評価式に対応する計算コストを管理するテーブルである。図９は、計算量テーブル１５０ｅのデータ構造の一例を示す図である。同図に示すように、この計算量テーブル１５０ｅは、論理式識別情報と、計算コストとを対応付けて記憶している。ここでは、評価式「ｑ１」の計算コストが「１」、評価式「ｑ２」の計算コストが「１００」となっている。
【００５２】
抽出結果テーブル１５０ｆは、評価式の評価対象となる情報と、検索クエリ１５０ｂの評価結果が真であった場合に、端末装置６０に返答する項目を管理するテーブルである。図１０は、抽出結果テーブル１５０ｆのデータ構造の一例である。同図に示すように、この抽出結果テーブル１５０ｆは、データ種別と、第１論理変数情報と、第２論理変数情報と、返答項目とを有する。なお、データ種別「Ｄａｔａ０〜２」は、図５に示した、第１〜３要素の情報にそれぞれ対応する。
【００５３】
例えば、図１０の１段目では、データ種別「Ｄａｔａ０」の第１論理変数情報（ここでは、評価式ｑ１の文書「開発部」が存在しているか否かを示す情報）が「○（存在している）」、第２論理変数情報（ここでは、評価式ｑ２の比較対象となる情報）が「２２２２」、返答項目が「第一開発部」となっている。
【００５４】
論理値テーブル１５０ｇは、各評価式の評価結果（初期段階では、計算コストの大きい論理変数の評価結果を除く）を管理するテーブルである。図１１は、論理値テーブル１５０ｇのデータ構造の一例を示す図である。同図に示すように、この論理値テーブル１５０ｇは、データ種別と、第１論理値と、第２論理値とを有する。
【００５５】
ここで、第１論理値は、評価式（例えば、評価式ｑ１）による第１論理変数の評価結果であり、第２論理値は、評価式（例えば、評価式ｑ２）による第１論理変数の評価結果である。なお、図１１に示す論理値テーブル１５０ｇは、第２論理変数の計算コストが大きい場合の論理値テーブルであるため、初期段階では、計算コストの大きい第２論理値は未評価となっている。
【００５６】
ただし、データ種別「Ｄａｔａ０」および「Ｄａｔａ２」に対応する第２論理値は、検索クエリ１５０ｂの論理式（図７参照）を評価する場合に、第２論理値の値が必要となるので、必要となった時点で、評価式ｑ２によって論理値を求める。一方、データ種別「Ｄａｔａ１」に対応する第２論理値は、第１論理値が「０」であるため、検索クエリの論理式より、第２論理値の値によらず、評価結果が「０」となる（第２論理値の論理値を算出しなくて良い）。
【００５７】
変換論理式データ１５０ｈは、論理式（図７参照）が、論理式変換部１６０ｅ（後述する）によって変換されたデータである。論理式判定ダイアグラムデータ１５０ｉは、ダイアグラム生成部１６０ｆ（後述する）によって生成されるデータである。
【００５８】
図１２は、論理式判定ダイアグラムデータ１５０ｉのデータ構造の一例を示す図である。同図に示すように、この論理式判定ダイアグラムデータ１５０ｉは、レベルテーブル１５１、遷移テーブル１５２を有する。
【００５９】
レベルテーブル１５１は、各ノードのレベルと、ノードに対応する論理変数を管理するテーブルである。例えば、ノードテーブル１５１の１段目では、ノード「ｑ１」のレベルが「０」であり、ノード「ｑ１」に対応する論理変数が「ｑ１」である旨の情報が登録されている。なお、レベルテーブル１５１において、レベル「２」のノードが最終レベルのノードとなり、ノード「０」あるいはノード「１」が、検索クエリ１５０ｂの評価結果となる。
【００６０】
遷移テーブル１５２は、各ノードの論理値と、論理値に対応したノードの遷移先を管理するテーブルである。例えば、遷移テーブル１５２の１段目では、ノード「ｑ１」の論理値が「０」である場合に、ノード「０」に遷移する旨の情報が登録されている。なお、図１２に示すレベルテーブル１５１および遷移テーブル１５２によって、図１２の下段に示す２分木が定義される。
【００６１】
評価結果テーブル１５０ｊは、各データ種別（例えば、Ｄａｔａ０〜２）に対する評価結果を管理するテーブルである。図１３は、評価結果テーブル１５０ｊのデータ構造の一例を示す図である。同図に示すように、この評価結果テーブル１５０ｊは、データ種別と評価結果とを対応付けて記憶している。
【００６２】
例えば、図１３の１段目では、データ種別「Ｄａｔａ０」に対する論理式の評価結果が「０（偽）」である旨の情報が登録されている。なお、図１３の３段目では、データ種別「Ｄａｔａ２」に対する論理式の評価結果が「１（真）」である旨の情報が登録されている。
【００６３】
検索結果データ１５０ｋは、ＸＭＬデータ１５０ａに対する検索クエリ１５０ｂの検索結果を記憶するデータである。この検索結果データは、評価結果テーブル１５０ｊ（図１３参照）の評価結果が「１」となるデータ種別の返答項目が記憶される。図１３を参照すると、この場合は、データ種別「Ｄａｔａ２」の評価結果が「１」となっているので、データ種別「Ｄａｔａ２」の返答項目（図１０参照）が、検索結果データ１５０ｋに記憶される。図１４は、検索結果データ１５０ｋのデータ構造の一例を示す図である。
【００６４】
図４の説明に戻ると、制御部１６０は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する制御手段であり、特に本発明に密接に関連するものとしては、図４に示すように、検索クエリ分解部１６０ａと、計算量見積部１６０ｂと、抽出結果テーブル生成部１６０ｃと、論理値算出部１６０ｄと、論理式変換部１６０ｅと、ダイアグラム生成部１６０ｆと、ダイアグラム実行部１６０ｇと、検索結果出力部１６０ｈとを備える。
【００６５】
このうち、検索クエリ分解部１６０ａは、端末装置６０から検索クエリを受信した場合に、受信した検索クエリを検索クエリ１５０ｂとして記憶部１５０に記憶すると共に、周知の手法を用いて、検索クエリ１５０ｂ（図６参照）から分解検索クエリ１５０ｃ（図７参照）を生成する手段である。
【００６６】
計算量見積部１６０ｂは、分解検索クエリ１５０ｃに含まれる各評価式（図７に示す例では、評価式ｑ１，ｑ２）の計算コストを判定し、計算量テーブル１５０ｅ（図９参照）を生成する処理部である。具体的に、計算量見積部１６０ｂは、分解検索クエリ１５０ｃの評価式と、計算量見積テーブル１５０ｄ（図８参照）とを比較することにより、評価式の計算コストを判定する。
【００６７】
抽出結果テーブル生成部１６０ｃは、分解検索クエリ１５０ｃに含まれる評価式に基づいて、第１〜ｎ（ｎ＞１）論理変数および返答項目をＸＭＬデータ１５０ａ（図５参照）から抽出し、抽出結果テーブル１５０ｆを生成する手段である。
【００６８】
例えば、抽出結果テーブル生成部１６０ｃは、評価式が「/busyo/name="開発部"」である場合には、「busyo」要素を親とする「name」要素に「開発部」が含まれているか否かを判定し、含まれている場合には、「○」を抽出結果テーブル１５０ｆに登録し、含まれていない場合には、「×」を抽出結果テーブル１５０ｆに登録する。
【００６９】
また、抽出結果テーブル生成部１６０ｃは、評価式が「/busyo/ID=="1.*3"」である場合には、「busyo」要素を親とする「ID」要素に含まれる数列をＸＭＬデータ１５０ａから抽出し、抽出結果テーブル１５０ｆに登録する。
【００７０】
論理値算出部１６０ｄは、計算コストに基づいて検索クエリ１５０ｂの各論理変数を第１論理変数あるいは第２論理変数に属するのかを判定すると共に、第２論理変数に属する論理変数の論理値のみを算出して（評価式を評価して）、論理値テーブル１５０ｇ（図１１参照）を生成する手段である。
【００７１】
具体的に、論理値算出部１６０ｄは、計算コストが１００以上となる論理変数を第１論理変数に属すると判定し、計算コストが１００未満となる論理変数を第２論理変数に属すると判定する。例えば、図９に示すように、論理変数ｑ１の計算コストが「１」、論理変数ｑ２の計算コストが「１００」に設定されている場合には、論理値算出部１６０ｄは、論理変数ｑ１を第２論理変数と判定し、論理変数ｑ２を第１論理変数と判定する。
【００７２】
そして、論理値算出部１６０ｄは、第２論理変数の評価式と、抽出結果テーブル１５０ｆ（図１０参照）とを比較することにより、論理値を算出する。なお、論理変数ｑ１の評価式の種別は、単純検索に属しているため、抽出結果テーブル１５０ｆの「○」が「１（真）」に対応し、「×」が「０（偽）」に対応する。
【００７３】
一方、論理値算出部１６０ｄは、初期の段階で、第１論理変数の論理値を算出しない。論理値算出部１６０ｄは、ダイアグラム実行部１６０ｇ（後述する）からの要求に応じて、該当する第２論理変数の論理値を算出する。
【００７４】
論理式変換部１６０ｅは、逆ポーランド記法を用いることにより、変換前の検索クエリと、変換後の検索クエリとの関係を等価に保った状態で、第２論理変数が第１論理変数の前になるように、検索クエリの論理式に含まれる論理変数の順序を変換する手段である。論理式変換部１６０ｅは、変換後の論理式を変換論理式データ１５０ｈとして記憶部１５０に記憶する。
【００７５】
逆ポーランド記法は、括弧が不要なので、コンピュータが単純なスタック構造を構築するだけで演算が出来るという特徴があり、論理式変換部１６０ｅが逆ポーランド記法を用いることで、論理式変換にかかる処理負荷を軽減させることが出来る。
【００７６】
図１５は、論理式変換部１６０ｅの処理を説明するための図である。なお、ここでは説明の便宜上、変換前の検索クエリの論理式を「（Ａ＆Ｂ）｜（〜（（〜Ｄ＆Ｃ）｜Ｅ）＆（（Ｈ＆Ｇ）｜Ｆ））」とする。ここで、Ａ〜Ｆは、論理式の論理変数を示し、論理変数Ａ，Ｃが第１論理変数に属し、論理変数Ｂ、Ｄ〜Ｆが第２論理変数に属しているものとする。なお、上記論理式中の「＆」は論理積、「｜」は論理和、「〜」は否定を示す。
【００７７】
まず、論理式変換部１６０ｅは、論理式を逆ポーランド表記する。例えば、論理式「（Ａ＆Ｂ）｜（〜（（〜Ｄ＆Ｃ）｜Ｅ）＆（（Ｈ＆Ｇ）｜Ｆ））」を逆ポーランド表記すると「ＡＢ＆Ｄ〜Ｃ＆Ｅ｜〜ＨＧ＆Ｆ｜＆｜」となる。
【００７８】
そして、論理式変換部１６０ｅは、逆ポーランド表記した論理式の先頭（図１５に示す例では、論理変数Ａ）から、論理変数および演算子を順次読み出し、各種の処理を実行する。ここで、論理式変換部１６０ｅが論理変数を取り出した場合の処理、および演算子を読み出した場合の処理について説明する。
【００７９】
（論理変数を読み出した場合の処理）
論理式変換部１６０ｅが論理変数を読み出した場合には、論理変数をスタック（一時記憶部＜スタック＞に論理変数を登録する。かかる一時記憶部に一番最後に登録された論理変数が、一番最初に取り出される。）すると共に、論理変数に対応する評価関数値を対応付けて記憶する。なお、各論理変数に対する評価関数値は、論理変数が、第１論理変数に属する場合には「１」、第２論理変数に属する場合には「０」となる。この評価関数値は、論理式を並びかえる場合の指標となる値である。
【００８０】
（演算子を読み出した場合の処理）
論理式変数部１６０ｅが演算子を読み出した場合には、スタックをポップし第１項とし、さらに、スタックをポップ（スタックに登録された論理変数のうち、一番最後に登録されたものを取り出す）し第２項とする。そして、第１項を先に第２項を後に並べた場合の評価関数値（以下、第１評価関数値）と、第２項を先に第１項を後に並べた場合の評価関数値（第２評価関数値）とをそれぞれ算出する。
【００８１】
論理式変換部１６０ｅは、第１評価関数値と第２評価関数値とを比較して、第１評価関数値が第２評価関数値よりも小さい場合には、第１項を先に第２項を後ろに並べたものの後ろに演算子を加え、スタックする。
【００８２】
一方、論理式変換部１６０ｅは、第２評価関数値が第１論理関数値よりも小さい場合には、第２項を先に第１項を後ろに並べたものの後ろに演算子を加え、スタックする。なお、第１評価関数値と第２評価関数値とが等しい場合には、予め、管理者に設定された順序に各項を並べ、並べたものの後ろに演算子を加え、スタックする。
【００８３】
ここで、逆ポーランド表記Ｘから論理変数だけを取り出した列をｘｎ−１・・・ｘ０として、評価関数値を算出するための評価関数ｅ（Ｘ）を定義すると、
【数１】
0005223380.tif 000002
となる。ただし、ｘｉが第１論理変数に属する場合には、ｆ（ｘｉ）＝１となり、ｘｉが第２論理変数に属する場合には、ｆ（ｘｉ）＝０となる。
【００８４】
例えば、逆ポーランド表記の論理式「ＡＢ〜Ｃ＆｜〜」から、論理変数だけを取り出した列を、「Ａ，Ｂ，Ｃ」とし、論理変数Ａ，Ｃが第１論理変数、論理変数Ｂが第２論理変数に属する場合には、
ｅ（ＡＢ〜Ｃ＆｜〜）＝２２×ｆ（Ａ）＋２１×ｆ（Ｂ）＋２０×ｆ（Ｃ）
＝４×１＋２×０＋１×１
＝５
となる。
【００８５】
次に、論理式変換部１６０ｅが逆ポーランド記法された論理式を変換する処理を具体的に説明する（ここでは、変換対象の論理式「ＡＢ＆Ｄ〜Ｃ＆Ｅ｜〜ＨＧ＆Ｆ｜＆｜」を変換する場合について説明する）。図１５に示すように、論理式変換部１６０ｅは、論理式の論理変数Ａ、Ｂを読み出して、順にスタックする（ステップＳ１０）。「Ａ」の評価関数値は「１」、「Ｂ」の評価関数は「０」となる。
【００８６】
論理式変換部１６０ｅは、演算子「＆」を読出し、第１項「Ｂ」、第２項「Ａ」に対する第１評価関数値（ＢＡの評価関数値）および第２評価関数値（ＡＢの評価関数値）を比較すると、第１評価関数値＜第２評価関数値となるので、「ＢＡ＆」をスタックする。また、論理式変換部１６０ｅは、論理変数「Ｄ〜」、「Ｃ」を順次読出し、スタックする（ステップＳ１１）。「ＢＡ＆」の評価関数値は「１」、「Ｄ〜」の評価関数値は「０」、「Ｃ」の評価関数値は「１」となる。
【００８７】
論理式変換部１６０ｅは、演算子「＆」を読出し、第１項「Ｃ」、第２項「Ｄ（Ｄ〜）」に対する第１評価関数値（ＣＤの評価関数値「２」）および第２評価関数値（ＤＣの評価関数値「１」）を比較すると、第２評価関数値＜第１評価関数値となるので、「Ｄ〜Ｃ＆」をスタックする。また、論理式変換部１６０ｅは、論理変数「Ｅ」を読み出してスタックする（ステップＳ１２）。「Ｄ〜Ｃ＆」の評価関数値は「１」、「Ｅ」の評価関数値は「０」となる。
【００８８】
論理式変換部１６０ｅは、演算子「｜」を読出し、第１項「Ｅ」、第２項「ＤＣ（Ｄ〜Ｃ＆）」に対する第１評価関数値（ＥＤＣの評価関数値「１」）および第２評価関数値（ＤＣＥの評価関数値「２」）を比較すると、第１評価関数値＜第２評価関数値となるので、「ＥＤ〜Ｃ＆｜」をスタックする。また、否定「〜」を読み出し、第１項の最後尾に否定「〜」を付加する（ステップＳ１３）。「ＥＤ〜Ｃ＆｜〜」の評価関数値は「１」となる。
【００８９】
論理式変換部１６０ｅは、論理変数「Ｈ」，「Ｇ」を読み出して、順にスタックする。また、論理式変換部１６０ｅは、演算子「＆」を読み出し、第１項「Ｈ」、第２項「Ｇ」に対する第１評価関数値（ＨＧの評価関数値「０」）および第２評価関数値（ＨＧの評価関数値「０」）を比較すると、第２評価関数値＝第１評価関数値となるので、例えば、「ＨＧ＆」をスタックする（ステップＳ１４）。「ＨＧ＆」の評価関数値は「０」となる。
【００９０】
論理式変換部１６０ｅは、論理変数「Ｆ」を読み出して、スタックする。そして、論理式変換部１６０ｅは、演算子「｜」を読み出し、第１項「Ｆ」、第２項「ＨＧ（ＨＧ＆）」に対する第１評価関数値（ＦＨＧの評価関数値「０」）および第２評価関数値（ＨＧＦの評価関数値「０」）を比較すると、第２評価関数値＝第１評価関数値となるので、例えば、「ＨＧ＆Ｆ｜」をスタックする（ステップＳ１５）。「ＨＧ＆Ｆ｜」の評価関数値は「０」となる。
【００９１】
論理式変換部１６０ｅは、演算子「＆」を読み出し、第１項「ＨＧＦ（ＨＧ＆Ｆ｜）」、第２項「ＥＤＣ（ＥＤ〜Ｃ＆｜〜）」に対する第１評価関数値（ＨＧＦＥＤＣの評価関数値「１」）および第２評価関数値（ＥＤＣＨＧＦの評価関数値「８」）を０比較すると、第１評価関数値＜第２評価関数値となるので、「ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆」をスタックする（ステップＳ１６）。
【００９２】
論理式変換部１６０ｅは、演算子「｜」を読出し、第１項「ＨＧＦＥＤＣ（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆）」、第２項「ＢＡ（ＢＡ＆）」に対する第１評価関数値（ＨＧＦＥＤＣＢＡの評価関数値「５」）および第２評価関数値（ＢＡＨＧＦＥＤＣの評価関数値「６４」）を比較すると、第１評価関数値＜第２評価関数値となるので、「ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜」をスタックする（ステップＳ１７）。「ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜」の評価関数値は、「５」となる。
【００９３】
論理式変換部１６０ｅは、上記ステップＳ１０〜１７を実行することによって、逆ポーランド表記の論理式「ＡＢ＆Ｄ〜Ｃ＆Ｅ｜〜ＨＧ＆Ｆ｜＆｜」を論理式「ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜」に変換する。
【００９４】
このように、論理式変換部１６０ｅが、第１評価関数値と第２評価関数値との比較結果に基づいて、評価関数値の小さい方の論理変数の集合を、評価関数値の大きい方の論理変数の集合の前に出すことにより、論理式を変換するので、第１論理変数の前に第２論理変数を配置することができ、結果的に、計算コストの大きい論理変数の論理値を求めなければならない機会を減らすことが出来る。
【００９５】
図４の説明に戻ると、ダイアグラム生成部１６０ｆは、変換論理式データ１５０ｈに基づいて、論理式判定ダイアグラムデータを生成する手段である。ダイアグラム生成部１６０ｆは、変換論理式データ１５０ｈ（逆ポーランド表記の論理式）の文字を先頭から順次読出し、読み出した文字（演算子、論理変数等）に応じて、レベルテーブル１５１、遷移テーブル１５２に各種の情報を登録する。
【００９６】
以下において、ダイアグラム生成部１６０ｆが、論理変数を読み出した場合の処理、否定（〜）を読み出した場合の処理、ＡＮＤ（＆）を読み出した場合の処理、ＯＲ（｜）を読み出した場合の処理、終了時の処理（最後の文字を読み出した後の処理）について順に説明する。なお、ダイアグラム生成部１６０ｆは、先頭（Ｔｏｐ）スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックを保持しているものとする。
【００９７】
（論理変数を読み出した場合の処理）
ダイアグラム生成部１６０ｆが、論理変数を読み出した場合には、新しいノード変数を定義し、定義したノード変数、現在のレベル、読み出した論理変数からなるエントリをレベルテーブル１５１（図１２参照）に追加する。
【００９８】
また、ダイアグラム生成部１６０ｆは、定義したノード変数を先頭スタックにプッシュ（一時記憶部＜スタック＞にノード変数を登録する）し、定義したノード変数１つからなる集合をＴｒｕｅスタック、Ｆａｌｓｅスタックにプッシュすると共に、現在のレベルに１を加算する。
【００９９】
（否定「〜」を読み出した場合の処理）
ダイアグラム生成部１６０ｆは、否定を読み出した場合には、新しくユニークなノード変数Ｔ，Ｆを定義し、Ｔｒｕｅスタックをポップ（一時記憶部＜スタック＞に一番最後に登録された情報を取り出す）し、ポップした集合内の各ノード変数において、ノード変数、論理値１、遷移先ノード変数Ｆからなるエントリを遷移テーブル１５２（図１２参照）に追加する。
【０１００】
また、ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックをポップし、ポップした集合内の各ノード変数において、ノード変数、論理値０、遷移先ノード変数Ｔからなるエントリを遷移テーブル１５２に追加する。ダイアグラム生成部１６０ｆは、Ｔｒｕｅスタックにノード変数Ｔからなる集合をプッシュし、Ｆａｌｓｅスタックにノード変数Ｆからなる集合をプッシュする。
【０１０１】
（ＡＮＤ「＆」を読み出した場合の処理）
ダイアグラム生成部１６０ｆは、ＡＮＤを読み出した場合には、先頭スタックをポップし、ポップしたノード変数をＡとする。そして、ダイアグラム生成部１６０ｆは、Ｔｒｕｅスタックを２回ポップし、１回目にポップした集合をＴｒｕｅスタックにプッシュする。
【０１０２】
ダイアグラム生成部１６０ｆは、２回目にポップした集合内の各ノード変数をノード項目として、論理値１、遷移先ノード変数Ａとをあわせたエントリを遷移テーブル１５２に追加する。また、ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数すべてからなる集合をＦａｌｓｅスタックにプッシュする。
【０１０３】
（ＯＲ「｜」を読み出した場合の処理）
ダイアグラム生成部１６０ｆは、ＯＲを読み出した場合には、先頭スタックをポップし、ポップしたノード変数をＡとする。そして、ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックを２回ポップし、１回目にポップした集合をＦａｌｓｅスタックにプッシュする。
【０１０４】
ダイアグラム生成部１６０ｆは、２回目にポップした集合内の各ノード変数をノード項目として、論理値０、遷移先ノード変数Ａをあわせたエントリを遷移テーブル１５２に追加する。また、ダイアグラム生成部１６０ｆは、Ｔｒｕｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合をＴｒｕｅスタックにプッシュする。
【０１０５】
（終了時の処理）
ダイアグラム生成部１６０ｆは、新しいノード変数０，１を定義し、定義したノード変数、現在のレベル、論理変数ＮＵＬＬからなるエントリをレベルテーブルに追加する。また、ダイアグラム生成部１６０ｆは、Ｔｕｒｅスタックをポップし、ポップした集合内の各ノード変数において、論理値１と遷移先ノード変数１とを合わせたエントリを遷移テーブル１５２に追加する。
【０１０６】
ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックをポップし、ポップした集合内の各ノード変数において、論理値０と遷移先ノード変数０とを合わせたエントリを遷移テーブル１５２に追加する。そして、ダイアグラム生成部１６０ｆは、遷移テーブル１５２において、遷移先項目がノード変数Ｔ，Ｆとして生成されたノード変数である全てのエントリに対し、そのノード変数をノード項目としてもつエントリを削除し、削除したエントリの遷移先ノード変数を該当エントリの遷移先項目として上書きする。
【０１０７】
次に、ダイアグラム生成部１６０ｆの処理を具体的に説明する。ここでは、一例として、変換論理式データ１５０ｈが「ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜」であるものとする。図１６〜図１８は、ＴＯＰスタックとＴｒｕｅスタックとＦａｌｓｅスタックの状態変化を示す図であり、図１９〜図２７は、レベルテーブル１５１と遷移テーブル１５２の状態変化を示す図である。
【０１０８】
（「Ｈ」Ｇ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜）
まず、ダイアグラム生成部１６０ｆは、「Ｈ」を読み、（Ｈ＜ノード＞，０＜レベル＞，Ｈ＜論理変数＞）をレベルテーブル１５１に追加し、「Ｈ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「０」に１を加算する。
【０１０９】
（Ｈ「Ｇ」＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「Ｇ」を読み、（Ｇ，１，Ｇ）をレベルテーブル１５１に追加し、「Ｇ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「１」に１を加算する（ステップＳ２０および図１９の左側参照）。
【０１１０】
（ＨＧ「＆」Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「＆」を読み、先頭スタック「Ｇ」をポップする。そして、ダイアグラム生成部１６０ｆは、Ｔｕｒｅスタックを２回ポップし、１回目にポップした集合「Ｇ」をＴｕｒｅスタックにプッシュする。
【０１１１】
また、ダイアグラム生成部１６０ｆは、２回目にポップした集合「Ｈ」のノード変数が「Ｈ」なので、（Ｈ＜ノード＞，１＜論理値＞，Ｇ＜遷移先＞）を遷移テーブル１５２に追加する（図１９の右側参照）。ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｈ，Ｇ」をＦａｌｓｅスタックにプッシュする（ステップＳ２１）。
【０１１２】
（ＨＧ＆「Ｆ」｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「Ｆ」を読み、（Ｆ，２，Ｆ）をレベルテーブル１５１に追加し、「Ｆ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする（ステップＳ２２および図２０の左側参照）。また、現在のレベル「２」に１を加算する。
【０１１３】
（ＨＧ＆Ｆ「｜」ＥＤ〜Ｃ＆｜〜＆ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「｜」を読み、先頭スタック「Ｆ」をポップする。そして、ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックを２回ポップし、１回目にポップした集合「Ｆ」をＦａｌｓｅスタックにプッシュする。
【０１１４】
ダイアグラム生成部１６０ｆは、２回目にポップした集合「Ｈ，Ｇ」内の各ノード変数をノード項目として、論理値０と遷移先ノード変数「Ｆ」とを合わせたエントリを遷移テーブル１５２に追加する（図２０の右側参照）。
【０１１５】
ダイアグラム生成部１６０ｆは、Ｔｕｒｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｇ，Ｆ」をＴｒｕｅスタックにプッシュする（ステップＳ２３）。
【０１１６】
（ＨＧ＆Ｆ｜「Ｅ」Ｄ〜Ｃ＆｜〜＆ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「Ｅ」を読み、（Ｅ，３，Ｅ）をレベルテーブル１５１に追加し、「Ｅ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「３」に１を加算する。
【０１１７】
（ＨＧ＆Ｆ｜Ｅ「Ｄ」〜Ｃ＆｜〜＆ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「Ｄ」を読み、（Ｄ，４，Ｄ）をレベルテーブル１５１に追加し、「Ｄ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「４」に１を加算する（ステップＳ２４および図２１の左側参照）。
【０１１８】
（ＨＧ＆Ｆ｜ＥＤ「〜」Ｃ＆｜〜＆ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「〜」を読み、ユニークなノード「Ｄｔ」、「Ｄｆ」を定義し、Ｔｒｕｅスタックをポップし、ポップした集合内「Ｄ」のノード変数において、ノード変数「Ｄ」、論理値１、遷移先ノード変数「Ｄｆ」からなるエントリを遷移テーブル１５２に追加する。
【０１１９】
ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックをポップし、ポップした集合内「Ｄ」のノード変数において、ノード変数「Ｄ」、論理値０、遷移先ノード変数「Ｄｔ」からなるエントリを遷移テーブル１５２に追加する（図２１の右側参照）。また、ダイアグラム生成部１６０ｆは、Ｔｕｒｅスタックに「Ｄｔ」をプッシュし、Ｆａｌｓｅスタックに「Ｄｆ」をプッシュする（ステップＳ２５）。
【０１２０】
（ＨＧ＆Ｆ｜ＥＤ〜「Ｃ」＆｜〜＆ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「Ｃ」を読み、（Ｃ，５，Ｃ）をレベルテーブル１５１に追加し、「Ｃ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「５」に１を加算する（ステップＳ２６および図２２の左側参照）。
【０１２１】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ「＆」｜〜＆ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「＆」を読み、先頭スタック「Ｃ」をポップする。そして、ダイアグラム生成部１６０ｆは、Ｔｒｕｅスタックを２回ポップし、１回目にポップした集合「Ｃ」をＴｒｕｅスタックにプッシュする。
【０１２２】
また、ダイアグラム生成部１６０ｆは、２回目にポップした集合「Ｄｔ」のノード変数が「Ｄｔ」なので、（Ｄｔ，１，Ｃ）を遷移テーブル１５２に追加する（図２２の右側参照）。ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｄｆ，Ｃ」をＦａｌｓｅスタックにプッシュする（ステップＳ２７）。
【０１２３】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆「｜」〜＆ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「｜」を読み、先頭スタック「Ｄ」をポップする。そして、ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックを２回ポップし、１回目にポップした集合「Ｄｆ，Ｃ」をＦａｌｓｅスタックにプッシュする。
【０１２４】
ダイアグラム生成部１６０ｆは、２回目にポップした集合「Ｅ」のノード変数をノード項目として、論理値０と遷移先ノード変数「Ｄ」とを合わせたエントリを遷移テーブル１５２に追加する（図２３の左側参照）。
【０１２５】
ダイアグラム生成部１６０ｆは、Ｔｕｒｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｅ，Ｃ」をＴｒｕｅスタックにプッシュする（ステップＳ２８）。
【０１２６】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜「〜」＆ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「〜」を読み、ユニークなノード「Ｃｔ」、「Ｃｆ」を定義し、Ｔｒｕｅスタックをポップし、ポップした集合内「Ｅ，Ｃ」のノード変数において、ノード変数「Ｃ」、論理値１、遷移先ノード変数「Ｃｆ」からなるエントリを遷移テーブル１５２に追加する。また、ノード変数「Ｅ」、論理値１、遷移先ノード変数「ＣＦ」からなるエントリを遷移テーブル１５２に追加する。
【０１２７】
ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックをポップし、ポップした集合内「Ｄｆ，Ｃ」の各ノード変数において、ノード変数「Ｃ」、論理値０、遷移先ノード変数「Ｃｔ」からなるエントリを遷移テーブル１５２に追加すると共に、ノード変数「Ｄｆ」、論理値０、遷移先ノード変数「Ｃｔ」からなるエントリを遷移テーブル１５２に追加する（図２３の右側参照）。また、ダイアグラム生成部１６０ｆは、「Ｃｔ」をＴｒｕｅスタックにプッシュし、「Ｃｆ」をＦａｌｓｅスタックにプッシュする（ステップＳ２９）。
【０１２８】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜「＆」ＢＡ＆｜）
ダイアグラム生成部１６０ｆは、「＆」を読み、先頭スタック「Ｅ」をポップする。そして、ダイアグラム生成部１６０ｆは、Ｔｕｒｅスタックを２回ポップし、一回目にポップした集合「Ｃｔ」をＴｒｕｅスタックにプッシュする。
【０１２９】
また、ダイアグラム生成部１６０ｆは、２回目にポップした集合「Ｇ，Ｆ」内の各ノード変数が「Ｇ，Ｆ」なので、（Ｇ，１，Ｅ）および（Ｆ，１，Ｅ）を遷移テーブル１５２に追加する（図２４の左側参照）。ダイアグラム生成部１６０ｆは、Ｆａｌｅｓスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｃｆ，Ｆ」をＦａｌｓｅスタックにプッシュする（ステップＳ３０）。
【０１３０】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆「Ｂ」Ａ＆｜）
ダイアグラム生成部１６０ｆは、「Ｂ」を読み、（Ｂ，６，Ｂ）をレベルテーブル１５１に登録し、「Ｂ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「６」に１を加算する。
【０１３１】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆Ｂ「Ａ」＆｜）
ダイアグラム生成部１６０ｆは、「Ａ」を読み、（Ａ，７，Ａ）をレベルテーブル１５１に登録し、「Ａ」を先頭スタック、Ｔｒｕｅスタック、Ｆａｌｓｅスタックにプッシュする。また、現在のレベル「７」に１を加算する。
【０１３２】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ「＆」｜）
ダイアグラム生成部１６０ｆは、「＆」を読み、先頭スタック「Ａ」をポップする。そして、ダイアグラム生成部１６０ｆは、Ｔｒｕｅスタックを２回ポップし、１回目にポップした集合「Ａ」をＴｒｕｅスタックにプッシュする。
【０１３３】
また、ダイアグラム生成部１６０ｆは、２回目にポップした集合「Ｂ」のノード変数が「Ｂ」なので、（Ｂ，１，Ａ）を遷移テーブル１５２に追加する（図２４の右側参照）。ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ｂ，Ａ」をＦａｌｓｅスタックにプッシュする（ステップＳ３１）。
【０１３４】
（ＨＧ＆Ｆ｜ＥＤ〜Ｃ＆｜〜＆ＢＡ＆「｜」）
ダイアグラム生成部１６０ｆは、「｜」を読み、先頭トラック「Ｂ」をポップする。そして、ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックを２回ポップし、１回目にポップした集合「Ｂ，Ａ」をＦａｌｓｅスタックにプッシュする。
【０１３５】
ダイアグラム生成部１６０ｆは、２回目にポップした集合「Ｃｆ，Ｆ」の各ノード変数をノード項目として、ノード変数「Ｃｆ」、論理値０、遷移先ノード変数「Ｂ」と、ノード変数「Ｆ」、論理値０、遷移先ノード変数「Ｂ」を遷移テーブル１５２に追加する（図２５参照）。
【０１３６】
ダイアグラム生成部１６０ｆは、Ｔｕｒｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合「Ａ，Ｃｔ」をＴｒｕｅスタックにプッシュする（ステップＳ３２）。
【０１３７】
（終了時の処理）
ダイアグラム生成部１６０ｆは、新たしいノード変数「０」、「１」を定義し、定義したノード変数、現在のレベル、論理変数ＮＵＬＬからなるエントリをレベルテーブル１５１に追加する。そして、ダイアグラム生成部１６０ｆは、Ｔｒｕｅスタックをポップし、ポップした集合内「Ａ，Ｃｔ」の各ノード変数において、論理値１と遷移先ノード変数１とを合わせたエントリ（Ｃｔ，１，１，）および（Ａ，１，１）を遷移テーブル１５２に追加する。
【０１３８】
ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックをポップし、ポップした集合内「Ｂ，Ａ」の各ノード変数において、論理値０と遷移先ノード変数０とを合わせたエントリ（Ｂ，０，０）および（Ａ，０，０）を遷移テーブル１５２に登録する（ステップＳ３３および図２６参照）。
【０１３９】
ダイアグラム生成部１６０ｆは、遷移テーブル１５２（図２６参照）において、遷移先がノード変数Ｔ，Ｆとして生成されたノード変数（例えば、Ｄｔ，Ｄｆ，Ｃｔ，Ｃｆ）である全てのエントリに対し、そのノード変数をノード項目としてもつエントリを削除し、削除したエントリの遷移先ノード変数を該エントリの遷移先項目として上書きする（ステップＳ３４および図２７参照）。
【０１４０】
例えば、ダイアグラム生成部１６０ｆは、
（Ｅ，１，Ｃｆ）、（Ｃｆ，０，Ｂ）を（Ｅ，１，Ｂ）に変換し、
（Ｄ，０，Ｄｔ）、（Ｄｔ，１，Ｃ）を（Ｄ，０，Ｃ）に変換し、
（Ｄ，１，Ｄｆ）、（Ｄｆ，０，Ｃｔ）を（Ｄ，１，Ｃｔ）に変換し、
（Ｄ，１，Ｃｔ）、（Ｃｔ，１，１）を（Ｄ，１，１）に変換する。
【０１４１】
図４の説明に戻ると、ダイアグラム実行部１６０ｇは、論理値テーブル１５０ｇ（図１１参照）と、論理式判定ダイアグラムデータ１５０ｉ（図１２参照）とを比較して、論理式が「１（真）」であるか否かを判定する。
【０１４２】
そして、ダイアグラム実行部１６０ｇは、判定結果が「１」となったデータ種別に対応する返答項目を抽出結果テーブル１５０ｆ（図１０参照）から検出し、検出した返答項目を検索結果データ１５０ｋとして記憶部１５０に記憶する。例えば、データ種別「Ｄａｔａ３」の判定結果は「１」となるので、返答項目「第三開発部」を検索結果データ１５０ｋとして記憶する。
【０１４３】
なお、ダイアグラム実行部１６０ｇは、論理値テーブル１５０ｇと論理式判定ダイアグラムデータ１５０ｉとを比較している途中で、論理値未算出の第１論理変数にヒットした場合には、ヒットした第１論理値変数の論理値を論理値算出部１６０ｄに要求し、該当論理値を取得する。
【０１４４】
例えば、ダイアグラム実行部１６０ｇは、データ種別「Ｄａｔａ０」の第１論理変数「ｑ２」が必要になった場合には、データ種別「Ｄａｔａ０」の第１論理変数「ｑ２」の論理値を論理値算出部１６０ｄに要求する。論理値算出部１６０ｄは、データ種別「Ｄａｔａ０」の第１論理変数「ｑ２」の論理値の要求を受け付けた場合に、評価式ｑ２「q2./busyo/ID=="1.*3"」によって「２２２２」（図１０参照）を評価し、評価結果の論理値「この場合は０」をダイアグラム実行部１６０ｇに出力すると共に、算出した論理値を論理値テーブル１５０ｇに登録する。
【０１４５】
検索結果出力部１６０ｈは、記憶部１５０に記憶された検索結果データ１５０ｋを端末装置６０（図３参照）に送信する手段である。端末装置６０は、検索結果データ１５０ｋを受信した場合に、受信した検索結果データ１５０ｋをモニタ画面に出力する。図２８は、検索結果データを出力したモニタ画面の一例を示す図である。
【０１４６】
次に、本実施例１にかかる検索装置１００の処理手順について説明する。図２９は、本実施例１にかかる検索装置１００の処理手順を示すフローチャートである。同図に示すように、検索装置１００が検索クエリを受信し（ステップＳ１０１）、検索クエリ分解部１６０ａが分解検索クエリ１５０ｃを生成する（ステップＳ１０２）。
【０１４７】
そして、計算量見積部１６０ｂが、論理変数の計算量を見積もることで計算量テーブル１５０ｅを生成し（ステップＳ１０３）、抽出結果テーブル生成部１６０ｃが、分解検索クエリに対応するデータを抽出して、抽出結果テーブル１５０ｆを生成する（ステップＳ１０４）。
【０１４８】
続いて、論理値算出部１６０ｄが、計算量が閾値未満となる論理変数（第２論理変数）の論理値を算出することで論理値テーブル１５０ｇを生成し（ステップＳ１０５）、論理式変換部１６０ｅが、ＢＤＤ入力順序決定処理を実行する（ステップＳ１０６）。
【０１４９】
そして、ダイアグラム生成部１６０ｆがＢＤＤ構築処理を実行し（ステップＳ１０７）、ダイアグラム実行部１６０ｇが論理式判定ダイアグラム実行処理を行う（ステップＳ１０８）。ダイアグラム実行部１６０ｇは、評価結果データを格納し（ステップＳ１０９）、検索結果出力部１６０ｈが、返答項目出力処理を実行する（ステップＳ１１０）。
【０１５０】
次に、図２９のステップＳ１０６に示したＢＤＤ入力順序決定処理について説明する。図３０は、ＢＤＤ入力順序決定処理を示すフローチャートである。同図に示すように、論理式変換部１６０ｅは、論理式を逆ポーランド表記に変換し（ステップＳ２０１）、逆ポーランド表記の初めの文字を読み出す（ステップＳ２０２）。
【０１５１】
そして、演算子を読み出したか否かを判定し（ステップＳ２０３）、演算子でない場合には（ステップＳ２０４，Ｎｏ）、論理変数をスタックし（ステップＳ２０５）、ステップＳ２１２に移行する。
【０１５２】
一方、演算子を読み出した場合には（ステップＳ２０４，Ｙｅｓ）、スタックをポップして第１項に設定し、さらに、スタックをポップして第２項に設定し（ステップＳ２０６）、第１項、第２項の順に並べた場合の第１評価関数値と、第２項、第１項の順に並べた場合の第２評価関数値とを比較する（ステップＳ２０８）。
【０１５３】
第１評価関数値が第２評価関数値よりも小さい場合には（ステップＳ２０９，Ｙｅｓ）、第１項、第２項の順に並べたものの後に演算子を加えスタックし、（ステップＳ２１０）、ステップＳ２１２に移行する。
【０１５４】
一方、ステップＳ２０９の条件を満たさない場合には（ステップＳ２０９，Ｎｏ）、第２項、第１項の順に並べたものの後に演算子を加えスタックし（ステップＳ２１１）、次に文字が存在するか否かを判定する（ステップＳ２１２）。
【０１５５】
次に文字が存在する場合には（ステップＳ２１３，Ｙｅｓ）、次の文字を読出し（ステップＳ２１４）、ステップＳ２０３に移行する。一方、次の文字が存在しない場合には（ステップＳ２１３，Ｎｏ）、ＢＤＤ入力順序決定処理を終了する。
【０１５６】
次に、図２９のステップＳ１０７に示したＢＤＤ構築処理について説明する。図３１は、ＢＤＤ構築処理を示すフローチャートである。同図に示すように、ダイアグラム生成部１６０ｆは、現在のレベルを０に設定し（ステップＳ３０１）、逆ポーランド表記の初めの文字を読出し（ステップＳ３０２）、文字が論理変数か否かを判定する（ステップＳ３０３）。
【０１５７】
文字が論理変数である場合には（ステップＳ３０４，Ｙｅｓ）、論理変数対応処理を実行し（ステップＳ３０５）、ステップＳ３１６に移行する。一方、文字が論理変数ではない場合には（ステップＳ３０４，Ｎｏ）、文字が「ＮＯＴ」か否かを判定する（ステップＳ３０６）。
【０１５８】
文字がＮＯＴである場合には（ステップＳ３０７，Ｙｅｓ）、ＮＯＴ対応処理を実行し（ステップＳ３０８）、ステップＳ３１６に移行する。一方、文字がＮＯＴではない場合には（ステップＳ３０７，Ｎｏ）、文字が「ＡＮＤ」か否かを判定する（ステップＳ３０９）。
【０１５９】
文字がＡＮＤである場合には（ステップＳ３１０，Ｙｅｓ）、ＡＮＤ対応処理を実行し（ステップＳ３１１）、ステップＳ３１６に移行する。一方、文字がＡＮＤではない場合には（ステップＳ３１０，Ｎｏ）、文字が「ＯＲ」か否かを判定する（ステップＳ３１２）。
【０１６０】
文字がＯＲではない場合には（ステップＳ３１３，Ｎｏ）、エラーを出力する（ステップＳ３１４）。一方、文字がＯＲの場合には（ステップＳ３１３，Ｙｅｓ）、ＯＲ対応処理を実行し（ステップＳ３１５）、次に文字が存在するか否かを判定する（ステップＳ３１６）。
【０１６１】
次の文字が存在する場合には（ステップＳ３１７，Ｙｅｓ）、次の文字を読出し（ステップＳ３１８）、ステップＳ３０３に移行する。一方、次の文字が存在しない場合には（ステップＳ３１７，Ｎｏ）、終了処理を実行し（ステップＳ３１９）、ＢＤＤ構築処理を終了する。
【０１６２】
次に、図３１のステップＳ３０５に示した論理変数対応処理について説明する。図３２は、論理変数対応処理を示すフローチャートである。同図に示すように、ダイアグラム生成部１６０ｆは、新しいノード変数を定義し（ステップＳ４０１）、定義したノード変数、現在のレベル、読み出した論理変数からなるエントリをレベルテーブル１５１に追加する（ステップＳ４０２）。
【０１６３】
そして、ダイアグラム生成部１６０ｆは、定義したノード変数を先頭スタックにプッシュし（ステップＳ４０３）、定義したノード変数１つからなる集合をＴｒｕｅスタック、Ｆａｌｓｅスタックにプッシュし（ステップＳ４０４）、現在のレベルに１を加算し（ステップＳ４０５）、論理変数対応処理を終了する。
【０１６４】
次に、図３１のステップＳ３０８に示したＮＯＴ対応処理について説明する。図３３は、ＮＯＴ対応処理を示すフローチャートである。同図に示すように、ダイアグラム生成部１６０ｆは、新しくユニークなノード変数Ｔ，Ｆを定義し（ステップＳ５０１）、Ｔｒｕｅスタックをポップし、ポップした集合内の各変数において、ノード変数、論理値１、遷移先ノード変数Ｆからなるエントリを遷移テーブル１５２に追加する（ステップＳ５０２）。
【０１６５】
そして、ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックをポップし、ポップした集合内の各ノード変数において、ノード変数、論理値０、遷移先ノード変数Ｔからなるエントリを遷移テーブル１５２に追加し（ステップＳ５０３）、Ｔｒｕｅスタックにノード変数Ｔからなる集合をプッシュし、Ｆａｌｓｅスタックにノード変数Ｆからなる集合をプッシュし（ステップＳ５０４）、ＮＯＴ対応処理を終了する。
【０１６６】
次に、図３１のステップＳ３１１に示したＡＮＤ対応処理について説明する。図３４は、ＡＮＤ対応処理を示すフローチャートである。同図に示すように、ダイアグラム生成部１６０ｆは、先頭スタックをポップし、ポップしたノードを変数Ａに設定し（ステップＳ６０１）、Ｔｒｕｅスタックを２回ポップし、１回目にポップした集合をＴｒｕｅスタックにプッシュする（ステップＳ６０２）。
【０１６７】
そして、２回目にポップした集合内の各ノード変数をノード項目として、論理値１、遷移先ノード変数Ａと合わせたエントリを遷移テーブルに追加し（ステップＳ６０３）、Ｆａｌｓｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合をＦａｌｓｅスタックにプッシュし（ステップＳ６０４）、ＡＮＤ対応処理を終了する。
【０１６８】
次に、図３１のステップＳ３１５に示したＯＲ対応処理について説明する。図３５は、ＯＲ対応処理を示すフローチャートである。同図に示すように、ダイアグラム生成部１６０ｆは、先頭スタックをポップし、ポップしたノードを変数Ａに設定し（ステップＳ７０１）、Ｆａｌｓｅスタックを２回ポップし、１回目にポップした集合をＦａｌｓｅスタックにプッシュする（ステップＳ７０２）。
【０１６９】
そして、２回目にポップした集合内の各ノード変数をノード項目として、論理値０、遷移先ノード変数Ａと合わせたエントリを遷移テーブル１５２に追加し（ステップＳ７０３）、Ｔｒｕｅスタックを２回ポップし、１回目および２回目にポップした集合内のノード変数全てからなる集合をＴｕｒｅスタックにプッシュする（ステップＳ７０４）。
【０１７０】
次に、図３１のステップＳ３１９に示した終了処理について説明する。図３６は、終了処理を示すフローチャートである。同図に示すように、ダイアグラム生成部１６０ｆは、新しいノード変数０，１を定義し、定義したノード変数、現在のレベル、論理変数ＮＵＬＬからなるエントリをレベルテーブル１５１に追加し（ステップＳ８０１）、Ｔｒｕｅスタックをポップし、ポップした集合内の各ノード変数において、論理値１と、遷移先ノード変数１とを合わせたエントリを遷移テーブル１５２に追加する（ステップＳ８０２）。
【０１７１】
そして、ダイアグラム生成部１６０ｆは、Ｆａｌｓｅスタックをポップし、ポップした集合内の各ノード変数において、論理値０と、遷移先ノード変数０とを合わせたエントリを遷移先テーブルに追加する（ステップＳ８０３）。
【０１７２】
続いて、ダイアグラム生成部１６０ｆは、遷移テーブル１５２において、遷移先項目がノード変数Ｔ，Ｆとして生成されたノード変数である全てのエントリに対し、そのノード変数をノード項目としてもつエントリを削除し、削除したエントリの遷移先ノード変数を該エントリの遷移先項目として上書きする（ステップＳ８０４）。
【０１７３】
次に、図２９のステップＳ１０８に示した論理式判定ダイアグラム実行処理について説明する。図３７は、論理式判定ダイアグラム実行処理を示すフローチャートである。同図に示すように、ダイアグラム実行部１６０ｇは、初期ノードを現在のノードに設定し（ステップＳ９０１）、ノードテーブルを参照し、現在のノードレベルと論理変数とを取得する（ステップＳ９０２）。
【０１７４】
ダイアグラム実行部１６０ｇは、ノードレベルが最終レベルか否かを判定し（ステップＳ９０３）、最終レベルの場合には（ステップＳ９０４，Ｙｅｓ）、ノードに割り当てられている真偽値（論理値）を評価結果として判定し（ステップＳ９０５）、他の論理式判定ダイアグラムが存在するか否かを判定する（ステップＳ９０６）。
【０１７５】
他の論理式判定ダイアグラムが存在する場合には（ステップＳ９０７，Ｙｅｓ）、未選択の論理式判定ダイアグラムを選択し（ステップＳ９０８）、ステップＳ９０１に移行する。一方、他の論理式判定ダイアグラムが存在しない場合には（ステップＳ９０７，Ｎｏ）、論理式判定ダイアグラム実行処理を終了する。
【０１７６】
ところで、ステップＳ９０４において、ノードレベルが最終レベルでない場合には（ステップＳ９０４，Ｎｏ）、論理変数の論理値が既知か否かを判定し（ステップＳ９０９）、既知でない場合には（ステップＳ９１０，Ｎｏ）、論理値算出部１６０ｄが論理変数の論理値を算出し（ステップＳ９１１）、ステップＳ９１３に移行する。
【０１７７】
一方、論理値が既知の場合には（ステップＳ９１０，Ｙｅｓ）、論理値を論理値テーブルから読出し（ステップＳ９１２）、遷移テーブル１５２を参照し、遷移先情報を取得し（ステップＳ９１３）、現在のノードを遷移先のノードに設定し（ステップＳ９１４）、ステップＳ９０２に移行する。
【０１７８】
次に、図２９のステップＳ１１０に示した返答項目出力処理について説明する。図３８は、返答項目出力処理を示すフローチャートである。同図に示すように、検索結果出力部１６０ｈは、評価結果テーブルを読出し（ステップＳ１００１）、評価結果が真であるか否かを判定する（ステップＳ１００２）。
【０１７９】
評価結果が偽である場合には（ステップＳ１００３，Ｎｏ）、ステップＳ１００６に移行する。評価結果が真である場合には（ステップＳ１００３，Ｙｅｓ）、抽出結果テーブル１５０ｆから対応する返答項目を抽出し（ステップＳ１００４）、返答項目を送信先に出力する（ステップＳ１００５）。
【０１８０】
そして、検索結果出力部１６０ｈは、他の評価結果が存在するか否かを判定し（ステップＳ１００６）、他の評価結果が存在する場合には（ステップＳ１００７，Ｙｅｓ）、未選択の評価結果を読出し（ステップＳ１００８）、ステップＳ１００２に移行する。一方、他の評価結果が存在しない場合には（ステップＳ１００７，Ｎｏ）、返答項目出力処理を終了する。
【０１８１】
上述してきたように、本実施例１にかかる検索装置１００は、端末装置６０から検索クエリを取得した場合に、論理式に含まれる各論理変数の論理値を計算するための時間を予測することで、計算コストの大きい論理変数（第１論理変数）と計算コストの少ない論理変数（第２論理変数）とを判定し、計算コストの少ない論理変数が計算コストの大きい論理変数よりも前になるように、検索クエリに含まれる論理変数の順序を変換し、変換した検索クエリに基づいて計算コストの少ない論理変数を含む条件式から先に評価するので、検索クエリによる検索処理を高速化することが可能となる。
【０１８２】
すなわち、第２論理変数が第１論理変数の前に配置される場合と、第２論理変数が第１論理変数の後ろに配置される場合とを比較すると、第２論理変数が第１論理変数の前に配置される方が第１論理変数の論理値が必要となる機会が少なくなるので、結果的に、計算コストの大きい論理値を算出すべき回数が減るので、検索クエリによる検索処理を高速化することが出来る。
【実施例２】
【０１８３】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例１以外にも種々の異なる形態にて実施されて良いものである。そこで、以下では、実施例２として本発明に含まれる他の実施例を説明する。
【０１８４】
（１）計算コストについて
例えば、上記の実施例１では、評価式と計算量見積テーブル１５０ｄとを比較することにより（評価式の種別に基づいて）計算コストを算出していたが、これに限定されるものではなく、過去の経験則に基づいて、計算コストを算出しても良い。
【０１８５】
例えば、計算量見積部１６０ｂは、抽出結果テーブル１５０ｆ（図１０参照）の第１〜ｎ論理変数情報から論理値を実際に算出する場合に、計算時間を計測し、計測時間に応じて所定の計算コスト設定（論理値の計算にｎ秒以上費やした場合には、計算コストを１００とする）し、計算コストを各論理変数情報に割り当てたテーブルを生成する。そして、計算量見積部１６０ｂは、上記の経験則に基づいたテーブルと、評価式によって評価される論理変数とを比較して、計算コストを設定しても良い。
【０１８６】
（２）システムの構成等
ところで、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部あるいは一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１８７】
また、図４に示した検索装置１００の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部がＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１８８】
図３９は、実施例１にかかる検索装置１００を構成するコンピュータ２００のハードウェア構成を示す図である。図３９に示すように、このコンピュータ（検索装置）２００は、入力装置２０１、モニタ２０２、ＲＡＭ（Random  Access  Memory）２０３、ＲＯＭ（Read  Only  Memory）２０４、記憶媒体からデータを読み取る媒体読取装置２０５、他の装置（例えば、端末装置６０）との間でデータの送受信を行う通信装置２０６、ＣＰＵ（Central  Processing  Unit）２０７、ＨＤＤ（Hard  Disk  Drive）２０８をバス２０９で接続して構成される。
【０１８９】
そして、ＨＤＤ２０８には、上記した検索装置１００の機能と同様の機能を発揮する検索プログラム２０８ｂ、が記憶されている。ＣＰＵ２０７が、検索プログラム２０８ｂを読み出して実行することにより、検索プロセス２０７ａが起動される。ここで、検索プロセス２０７ａは、図４に示した、検索クエリ分解部１６０ａ、計算量見積部１６０ｂ、抽出結果テーブル生成部１６０ｃ、論理値算出部１６０ｄ、論理式変換部１６０ｅ、ダイアグラム生成部１６０ｆ、ダイアグラム実行部１６０ｇ、検索結果出力部１６０ｈに対応する。
【０１９０】
また、ＨＤＤ２０８は、ＸＭＬデータ１５０ａ、検索クエリ１５０ｂ、分解検索クエリ１５０ｃ、計算量見積テーブル１５０ｄ、計算量テーブル１５０ｅ、抽出結果テーブル１５０ｆ、論理値テーブル１５０ｇ、変換論理式データ１５０ｈ、論理式判定ダイアグラムデータ１５０ｉ、評価結果テーブル１５０ｊ、検索結果データ１５０ｋに対応する各種データ２０８ａを記憶する。ＣＰＵ２０７は、ＨＤＤ２０８に格納された各種データ２０８ａを読み出して、ＲＡＭ２０３に格納し、ＲＡＭ２０３に格納された各種データ２０３ａを利用して、検索クエリを評価する。
【０１９１】
ところで、図３９に示した検索プログラム２０８ｂは、必ずしも最初からＨＤＤ２０８に記憶させておく必要はない。たとえば、コンピュータに挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」、または、コンピュータの内外に備えられるハードディスクドライブ（ＨＤＤ）などの「固定用の物理媒体」、さらには、公衆回線、インターネット、ＬＡＮ、ＷＡＮなどを介してコンピュータに接続される「他のコンピュータ（またはサーバ）」などに検索プログラム２０８ｂを記憶しておき、コンピュータがこれらから検索プログラム２０８ｂを読み出して実行するようにしてもよい。
【０１９２】
上記の実施例を含む実施形態に関し、以下の付記を開示する。
【０１９３】
（付記１）論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置の評価方法であって、
前記検索装置は、
前記論理式に含まれる各論理変数の論理値を計算するための時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定ステップと、
前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定ステップと、
前記決定された評価順序の優先順位に基づいて、計算コストの少ない論理変数を含む条件部分から先に評価する評価ステップと、
を含んだことを特徴とする評価方法。
【０１９４】
（付記２）前記計算コストの少ない論理変数の論理値を予め計算し、前記検索クエリの評価時に、必要に応じて前記計算コストの大きい論理変数の論理値を計算する論理値計算ステップを更に含んだことを特徴とする付記１に記載の評価方法。
【０１９５】
（付記３）前記計算コスト判定ステップは、過去の経験則、あるいは前記論理変数が真であるか否かを判定する条件式の種別に基づいて計算コストの大きい論理変数と計算コストの少ない論理変数とを判定することを特徴とする付記１または２に記載の評価方法。
【０１９６】
（付記４）前記優先順位決定ステップは、逆ポーランド表記を利用し前記検索クエリに含まれる論理式を変換した結果である変換後の論理式に基づき、論理変数の前記評価順序の優先順位を決定することを特徴とする付記１、２または３に記載の評価方法。
【０１９７】
（付記５）論理式を含む検索クエリを評価して、階層構造を有する文書データから該当するデータを検索する検索装置であって、
前記論理式に含まれる各論理変数の論理値を計算するための計算時間を予測することで、計算コストの大きい論理変数と計算コストの少ない論理変数とを判定する計算コスト判定手段と、
前記計算コストの少ない論理変数が前記計算コストの大きい論理変数よりも前になるように、前記論理変数それぞれについて評価順序の優先順位を決定する優先順位決定手段と、
前記決定された評価順序の優先順位に基づいて、計算コストの少ない論理変数を含む条件部分から先に評価する評価手段と、
を備えたことを特徴とする検索装置。
【０１９８】
（付記６）前記計算コストの少ない論理変数の論理値を予め計算し、前記検索クエリの評価時に、必要に応じて前記計算コストの大きい論理変数の論理値を計算する論理値計算手段を更に備えたことを特徴とする付記５に記載の検索装置。
【０１９９】
（付記７）前記計算コスト判定手段は、過去の経験則あるいは、前記論理変数が真であるか否かを判定する条件式の種別に基づいて計算コストの大きい論理変数と計算コストの少ない論理変数とを判定することを特徴とする付記５または６に記載の検索装置。
【０２００】
（付記８）前記検索クエリ変換手段は、逆ポーランド表記を利用し前記検索クエリに含まれる論理式を変換した結果である変換後の論理式に基づき、論理変数の前記評価順序の優先順位を決定することを特徴とする付記５、６または７に記載の検索装置。
【産業上の利用可能性】
【０２０１】
以上のように、本発明にかかる評価方法および検索装置は、検索クエリを基にして文書データから該当データを検索する検索システムなどに有用であり、特に、検索クエリによる検索処理を高速化する必要がある場合に適している。
【図面の簡単な説明】
【０２０２】
【図１】周知技術のＢＤＤ法を説明するための図である。
【図２】本実施例１にかかる検索装置の概要および特徴を説明するための図である。
【図３】本実施例１にかかる検索システムの構成を示す図である。
【図４】本実施例１にかかる検索装置の構成を示す機能ブロック図である。
【図５】ＸＭＬデータのデータ構造の一例を示す図である。
【図６】検索クエリのデータ構造の一例を示す図である。
【図７】分解検索クエリのデータ構造の一例を示す図である。
【図８】計算量見積テーブルのデータ構造の一例を示す図である。
【図９】計算量テーブルのデータ構造の一例を示す図である。
【図１０】抽出結果テーブルのデータ構造の一例である。
【図１１】論理値テーブルのデータ構造の一例を示す図である。
【図１２】論理式判定ダイアグラムデータのデータ構造の一例を示す図である。
【図１３】評価結果テーブルのデータ構造の一例を示す図である。
【図１４】検索結果データのデータ構造の一例を示す図である。
【図１５】論理式変換部の処理を説明するための図である。
【図１６】ＴＯＰスタックとＴｒｕｅスタックとＦａｌｓｅスタックの状態変化を示す図（１）である。
【図１７】ＴＯＰスタックとＴｒｕｅスタックとＦａｌｓｅスタックの状態変化を示す図（２）である。
【図１８】ＴＯＰスタックとＴｒｕｅスタックとＦａｌｓｅスタックの状態変化を示す図（３）である。
【図１９】レベルテーブルと遷移テーブルの状態変化を示す図（１）である。
【図２０】レベルテーブルと遷移テーブルの状態変化を示す図（２）である。
【図２１】レベルテーブルと遷移テーブルの状態変化を示す図（３）である。
【図２２】レベルテーブルと遷移テーブルの状態変化を示す図（４）である。
【図２３】レベルテーブルと遷移テーブルの状態変化を示す図（５）である。
【図２４】レベルテーブルと遷移テーブルの状態変化を示す図（６）である。
【図２５】レベルテーブルと遷移テーブルの状態変化を示す図（７）である。
【図２６】レベルテーブルと遷移テーブルの状態変化を示す図（８）である。
【図２７】レベルテーブルと遷移テーブルの状態変化を示す図（９）である。
【図２８】検索結果データを出力したモニタ画面の一例を示す図である。
【図２９】本実施例１にかかる検索装置の処理手順を示すフローチャートである。
【図３０】ＢＤＤ入力順序決定処理を示すフローチャートである。
【図３１】ＢＤＤ構築処理を示すフローチャートである。
【図３２】論理変数対応処理を示すフローチャートである。
【図３３】ＮＯＴ対応処理を示すフローチャートである。
【図３４】ＡＮＤ対応処理を示すフローチャートである。
【図３５】ＯＲ対応処理を示すフローチャートである。
【図３６】終了処理を示すフローチャートである。
【図３７】論理式判定ダイアグラム実行処理を示すフローチャートである。
【図３８】返答項目出力処理を示すフローチャートである。
【図３９】実施例１にかかる検索装置を構成するコンピュータのハードウェア構成を示す図である。
【符号の説明】
【０２０３】
５０    ネットワーク
６０    端末装置
１００    検索装置
１１０    入力部
１２０    出力部
１３０    通信制御ＩＦ部
１４０    入出力制御ＩＦ部
１５０    記憶部
１５０ａ  ＸＭＬデータ
１５０ｂ  検索クエリ
１５０ｃ  分解検索クエリ
１５０ｄ  計算量見積テーブル
１５０ｅ  計算量テーブル
１５０ｆ  抽出結果テーブル
１５０ｇ  論理値テーブル
１５０ｈ  変換論理式データ
１５０ｉ  論理式判定ダイアグラムデータ
１５１    レベルテーブル
１５２    遷移テーブル
１５０ｊ  評価結果テーブル
１５０ｋ  検索結果データ
１６０    制御部
１６０ａ  検索クエリ分解部
１６０ｂ  計算量見積部
１６０ｃ  抽出結果テーブル生成部
１６０ｄ  論理値算出部
１６０ｅ  論理式変換部
１６０ｆ  ダイアグラム生成部
１６０ｇ  ダイアグラム実行部
１６０ｈ  検索結果出力部
【図１】
0005223380.tif 000003
【図２】
0005223380.tif 000004
【図３】
0005223380.tif 000005
【図４】
0005223380.tif 000006
【図５】
0005223380.tif 000007
【図６】
0005223380.tif 000008
【図７】
0005223380.tif 000009
【図８】
0005223380.tif 000010
【図９】
0005223380.tif 000011
【図１０】
0005223380.tif 000012
【図１１】
0005223380.tif 000013
【図１２】
0005223380.tif 000014
【図１３】
0005223380.tif 000015
【図１４】
0005223380.tif 000016
【図１５】
0005223380.tif 000017
【図１６】
0005223380.tif 000018
【図１７】
0005223380.tif 000019
【図１８】
0005223380.tif 000020
【図１９】
0005223380.tif 000021
【図２０】
0005223380.tif 000022
【図２１】
0005223380.tif 000023
【図２２】
0005223380.tif 000024
【図２３】
0005223380.tif 000025
【図２４】
0005223380.tif 000026
【図２５】
0005223380.tif 000027
【図２６】
0005223380.tif 000028
【図２７】
0005223380.tif 000029
【図２８】
0005223380.tif 000030
【図２９】
0005223380.tif 000031
【図３０】
0005223380.tif 000032
【図３１】
0005223380.tif 000033
【図３２】
0005223380.tif 000034
【図３３】
0005223380.tif 000035
【図３４】
0005223380.tif 000036
【図３５】
0005223380.tif 000037
【図３６】
0005223380.tif 000038
【図３７】
0005223380.tif 000039
【図３８】
0005223380.tif 000040
【図３９】
0005223380.tif 000041