(57)【特許請求の範囲】
【請求項１】
プロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、検索対象の文書及び前記文書を検索するためのインデックス情報を格納する文書ＤＢとを用い、キーワードの論理式から成る検索式から文書を検索する文書検索装置において、
複数の検索式を、それぞれの予測検索速度に基づいて複数の検索式集合に振り分ける検索式制御部と、
振り分けられた前記複数の検索式集合を予測検索速度の速い集合から順次検索を行い、かつ、それぞれの検索処理では、対応する検索式集合内の検索式をまとめて一括検索する検索部と
を備えることを特徴とする文書検索装置。
【請求項２】
請求項１記載の文書検索装置において、前記検索部は、ある検索式集合１を一括検索している途中に到着した検索式の予測検索速度が検索式集合１の次に一括検索される検索式集合２の予測検索速度より速いとき、当該検索式を前記検索式集合２に含めて一括検索することを特徴とする文書検索装置。
【請求項３】
請求項１記載の文書検索装置において、一定長の連続文字列が出現する検索対象の文書リストを前記インデックス情報として前記文書ＤＢに格納し、前記一括検索では、前記インデックス情報を用い前記検索式内の各キーワードを構成する連続文字列の接続条件を考慮しないインデックス検索を行い、前記インデックス検索によって得られた各文書を、先頭の文字から走査しながら前記検索式内の各キーワードを構成する連続文字列の接続条件を検査し、前記検査に合格した文書を最終的な検索結果として出力することを特徴とする文書検索装置。
【請求項４】
請求項３記載の文書検索装置において、前記検索制御部は前記インデックス情報を用いて、前記検索式内の各キーワードを構成する各連続文字列に対してその連続文字列が出現する文書数を取得し、前記文書数の組み合わせから前記検索式のインデックス検索の結果の文書数を予測し、前記予測文書数を前記予測検索速度とすることを特徴とする文書検索装置。
【請求項５】
請求項３記載の文書検索装置において、過去に処理した検索式のインデックス検索の結果の文書数をデータとして蓄積し、前記検索制御部において検索式の振り分けを行う際に、振り分けのためのパラメータを前記蓄積したデータから計算することを特徴とする文書検索装置。
【請求項６】
請求項５記載の文書検索装置において、過去に処理した検索式の情報が無い初期状態ではあらかじめ指定したパラメータを振り分けに使い、検索式が一定個数蓄積される度に、それまでに蓄積したデータを用いて振り分けのためのパラメータを更新することを特徴とする文書検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書検索において、複数の検索式をまとめて効率良く検索する技術に関する。
【背景技術】
【０００２】
文書検索サービスを安定運用するためには、サービス混雑時にも一定時間内で検索結果を返さねばならない。サービス混雑時には複数の検索式が相次いで検索サーバに到着する。複数の検索式を処理する方式としては、先に到着した検索式から順番に処理する方式（逐次処理方式）や、ＯＳのタイムシェアリング機能を使い複数の検索式を並列に処理する方式（並列処理方式）が良く知られている。しかし、これらの方式は、検索式の同時処理数が増すにつれ各検索式に対する応答時間も比例して長くなってしまう。並列処理方式では、ＣＰＵが複数個あれば同時処理能力も高くなるが、それでも同時処理数が数十を超えると遅くなる。
【０００３】
そこで、複数の検索式をＯＲ結合して一括して検索を行う方式（一括処理方式）が提案されている（特許文献１）。一括処理方式の性能はその前提となる文書検索方式によって異なるが、ここでは、文書を先頭からスキャンしながら検索する検索方式（スキャン型検索）を考える。スキャン型検索の場合、逐次処理方式や並列処理方式が同じ文書を何度もスキャンしてしまうのに対し、一括処理方式ではスキャンは一回のみで済む。ただし、検索式をＯＲ結合しているので、ある文書がどの検索式でヒットしているのかを後で調べる必要がある。それでも、文書を複数回スキャンするのに比べれば高速に処理できる。
【０００４】
【特許文献１】特許第３４１３８６６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
一括処理方式では、ＯＲ結合された検索式の中で一番遅い検索式に検索速度が支配されてしまうことが多い。つまり、速く検索できる検索式でも、遅い検索式とＯＲ結合してしまうと遅くなってしまう。この性質が顕著に現れるのが、インデックス型検索とスキャン型検索を組み合わせたハイブリッド型検索である。ハイブリッド型検索では、インデックスにより絞り込んだ文書のみスキャンする。絞り込みによって１０文書しかスキャンする必要がない検索式と、絞り込んでも１万文書をスキャンせねばならない検索式とをＯＲ結合でまとめてしまうと、前者の検索式についても１万個強の文書をスキャンせねばならず、インデックスによる絞込みの効果がなくなってしまう。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するために、複数の検索式をそれぞれの予測検索速度に基づいて複数の集合に分割し、それぞれの集合内で検索式をＯＲ結合し、予測検索速度の速い検索式集合から順次一括検索を行う。ここでは、予測検索速度の推定方法と、集合への分割方法が問題となる。前者に関しては、上記のハイブリッド型検索を例にして、スキャン文書数の推定値を予測検索速度とする。スキャン文書数は、検索式の構成タームのヒット件数から推定することができる。集合への分割方法に関しては、過去に行った検索履歴から最適な分割パラメータを決定する。
【発明の効果】
【０００７】
本発明により、複数の検索式がほぼ同時に到着するサービス混雑時においても、通常時と大きく変わらない応答時間を得ることができる。
【発明を実施するための最良の形態】
【０００８】
以下、図面を参照して本発明の実施の形態を説明する。図１は、本発明による文書検索システムの構成例を示す図である。文書検索システムは、検索サーバ１０、ネットワーク１１、及び任意個の検索クライアント１２１〜１２３を備える。
【０００９】
検索サーバ１０は、ＣＰＵ１０１、メモリ１０２、文書ＤＢ１０３、検索制御部１０４、検索部１０５、及びデータ通信部１０６を備えている。ＣＰＵ１０１は、検索制御部１０４、及び検索部１０５を構成する各種プログラムを実行することによって各種処理を実行する。メモリ１０２は、ＣＰＵ１０１が実行するプログラム、及びプログラムを実行するために必要なデータを一時的に記憶する。文書ＤＢ１０３は、検索対象の文書とそれらを検索するために必要なインデックスを格納している。データ通信部１０６は、ネットワーク１１を介してデータ通信をするインターフェースであり、例えば、ＴＣＰ／ＩＰプロトコルによって通信可能なＬＡＮカードによって構成される。検索サーバ１０は、データ通信部１０６を介して、ネットワーク１１に接続された複数の検索クライアントと通信する。図１では１２１から１２３まで３つの検索クライアントがある。
【００１０】
それぞれの検索クライアントは、利用者からの検索式を受け付けて、ネットワーク１１を介して検索サーバ１０に検索式を送付し、検索サーバ１０から同じくネットワーク１１を介して検索結果を受け取り、利用者に提示する。検索クライアントの内部構成については説明を省略する。
【００１１】
検索サーバに複数の検索クライアントから検索式がほぼ同時に到着した場合の処理方式として、逐次処理方式（図２）、並列処理方式（図４）、一括処理方式（図６）がある。本発明の実施の形態を説明する前に、まず、それぞれの従来方式を説明する。
【００１２】
図２の逐次処理方式では、到着した検索式集合２１をなんらかの順番で一個ずつ処理する。最も単純な順番は検索式の到着順である。図２では、検索式１（２２１）から検索式ｎ（２３１）の順に検索１（２２）から検索ｎ（２３）までを逐次実行し、それぞれの検索結果である検索結果１（２２２）から検索結果ｎ（２３２）を検索クライアントに返す。
【００１３】
逐次処理方式のタイムチャートを図３に示す。ここでは３１、３２、３３の３つの検索式をこの順に処理している。それぞれの検索式を単独に発行すると、３Ｔ、１０Ｔ、２Ｔの検索時間を要する。ここでＴは単位時間であり、図中ではそれぞれの四角に相当する。また、ハッチングされた四角は検索中であることを、白抜きの四角は待機中であることを表す。
【００１４】
逐次処理方式では、後ろで実行される検索式は前の検索式が終了するまで待つことになる。よって、後ろで実行される検索式ほど待ち時間が長くなり応答時間も増してしまう。図３の例の場合、最初に実行される検索式１は３Ｔで検索が終了するが、次に実行される検索式２では３Ｔの待ち時間が生じる。検索時間と合わせると、３Ｔ＋１０Ｔ＝１３Ｔの応答時間になる。同様にして、最後に実行される検索式３の応答時間は１３Ｔ＋２Ｔ＝１５Ｔになる。検索式３は単独で検索すると２Ｔと高速に検索できるが、逐次処理方式では最後に検索されるため１３Ｔもの待ち時間が生じてしまう。
【００１５】
後ろで実行される検索式が不利になるという逐次処理方式の欠点を克服するためには、図４の並列処理方式のように、どの検索式も平等に処理を進めればよい。通常は、タイムシェアリング方式とよばれる方式により、細かく区切った時間毎に処理対象を切り替えながら平等に処理を進めていく。タイムシェアリング方式はＯＳで実装されていることが多いため、アプリケーションでは単純に並列に命令を発行すれば良い。図４では、検索式集合４１のｎ個の検索式４２１〜４３１のそれぞれに対して、検索１（４２）から検索ｎ（４３）までｎ個の検索処理を並列に実行している。
【００１６】
図５に並列処理方式のタイムチャートを示す。検索式は図３と同じである。最初の処理時間Ｔでは検索式１の検索を進め、次の処理時間Ｔでは検索式２の検索を進める。このように、単位時間毎に順番に検索処理を進めていくため、どの検索式の待ち時間も等しくなる。応答時間は、検索式１で７Ｔ、検索式２で１５Ｔ、検索式３で６Ｔとなり、単独処理時の検索時間に比例した時間となっている。合計応答時間（平均応答時間と等価）は、図３の逐次処理方式では３１Ｔ（３Ｔ＋１３Ｔ＋１５Ｔ）であるのに対し、並列処理方式では２８Ｔ（７Ｔ＋１５Ｔ＋６Ｔ）と短くなっている。
【００１７】
これまでの２つの方式では、各検索式を独立に処理するため、同じ処理を重複して実行している可能性がある。例えば、文書をスキャンして検索を行うスキャン型検索では、同じ文書を複数の検索式で重複してスキャンしてしまう可能性がある。そこで、図６に示す一括処理方式では、検索式集合６１内の検索式をＯＲで結合した新たな検索式を作り、この検索式を用いて一括検索処理６２を実行する。一括検索では、同じ文書の処理は一回しか行わないため、前述したような重複処理はなくなる。一括検索処理の詳細は後述する。
【００１８】
図７に一括処理方式のタイムチャートを示す。ここでは、一括処理対象のそれぞれの検索式の単独検索時間で最大のものを全体の一括処理時間としている。これは近似値であり、実際はこの最大時間よりも長い時間を要することが多い。図７に見られるように、一括処理方式には、検索が速く終わる検索式７１及び７３が遅い検索式７２につられて遅くなってしまうという問題がある。合計応答時間も３０Ｔ（１０Ｔ＋１０Ｔ＋１０Ｔ）と遅い。どのような検索式でも同じ検索速度を持つような検索方式であればこの問題は生じないが、大抵の検索方式では、検索式によってその検索時間も異なるため、上記の問題が顕在化する。
【００１９】
図８に、本発明の実施の形態のフロー図を示す。本発明の実施の形態では、検索式をその予測検索時間に基づいて複数の集合に振り分けて、それぞれの集合毎に一括処理を実行する。そのために、まず検索式振り分け処理８２で、一括処理する検索式集合８１をその予測検索時間に応じて複数の検索式集合（８３から８４までのｎ個）に分割する。検索式振り分け処理の詳細は後述する。次に、分割した検索式集合をその予測検索時間が短いものから順に処理する（８５から８６のｎ個の一括検索）。それぞれの一括検索処理では、通常の一括検索と同様に、複数の検索式をＯＲ結合でまとめて処理する。検索結果集合８７から８８が得られたら、その時点で検索クライアントに検索結果を返す。
【００２０】
図９に本発明の実施の形態の方式のタイムチャートを示す。ここでは、検索式１（９１）と検索式３（９２）を一括検索１としてまとめたと仮定している。前述したように、一括検索では、一番遅い検索式の検索時間が全体の検索時間となるが、この例のように、同等の検索速度を持つ検索式だけをまとめることができれば、速い検索式が遅い検索式につられて遅くなるという問題が生じ難くなる。例の場合、検索式３は２Ｔと速いが、同時に処理する検索式１も３Ｔと速いため、一括処理を行っても、１Ｔの無駄しか生じない。図７の従来方式だと、更に遅い検索式２により、検索式１も検索式３も１０Ｔの時間を要していた。本発明の実施の形態の方式では、残った検索式２（９３）は、一括検索１の結果を待って処理される。そのために一括検索１の処理時間である３Ｔの待ち時間が生じるが、全体の効率を考えるとこの方式の方が平均検索時間の点で有利である。実際に、合計応答時間は１８Ｔ（３Ｔ＋３Ｔ＋１３Ｔ）と従来のどの方式よりも短くなっている。
【００２１】
図８で示した方式では、検索式振り分け処理と一括検索処理を同じ処理フロー上で順次実行していたため、例えば、一括検索１（８５）を処理している間に到着した検索式の中で後方の一括検索で処理出来るものも次回の処理まで待たねばならなかった。図１０は、検索式振り分け処理と一括検索処理を別のスレッドで独立に実行するフロー図である。検索式振り分けスレッドは、一括検索とは無関係に、検索式集合１００１を検索式集合１（１００３）から検索集合ｎ（１００５）に振り分ける。検索スレッドは、一括検索１（１００６）から一括検索ｎ（１００８）までを順番に繰り返し実行する。ただし、それぞれの一括検索では、自分より前の一括検索で処理されるべき検索式集合も一括処理する。例えば、一括検索ｉ（１００７）では、一括検索ｉ用の検索式集合ｉ（１００４）だけでなく、自分より前である１からｉ−１番目の検索式集合に振り分けられている検索式も一括処理することになる。これは、自分より早い検索式を加えて一括検索しても全体の検索速度が悪くならないという性質を利用している。とはいえ、この性質が成り立たない場合もあるため、本来処理すべき検索式集合（例の場合は検索式集合ｉ（１００４））のみを処理する方式も考えられる。
【００２２】
本発明の実施の形態では、検索式振り分けスレッドは図１の検索制御部１０４で、検索スレッドは検索部１０５で実行される。
【００２３】
以上が本発明の実施の形態の概要である。以降では、本発明の実施の形態の主要部である、検索式振り分け処理と一括検索処理の詳細について説明していくが、その前に、本発明の実施の形態が前提とする検索方式について触れておく。
【００２４】
図１１は、代表的な文書検索方式を説明する図である。いずれの場合も、検索キーワード「情報検索」（１１０１）を含む文書を検索する。検索対象は、文書１（１１０２）、文書２（１１０３）、文書３（１１０４）の３文書である。文書１には「情報検索」という文字列が、文書２には「情報の検索」という文字列が、文書３には「画像検索」という文字列が含まれているため、本検索の検索結果は文書１になる。
【００２５】
まず、インデックス型検索１１０５では、インデックスと呼ばれる索引をあらかじめ作成しておき、インデックスを使って検索を行う。インデックスは、検索ターム毎に作成する。図１１では、２つの検索ターム「情報」と「検索」に対してインデックスを作成している。検索タームにも様々な種類のものがあるが、図１１では形態素とよばれる単位を検索タームとしている。各検索タームに対しては、出現文書リストとそれぞれの出現文書内での位置リストを事前に数え上げて格納しておく。例えば、検索ターム「情報」１１１０に対しては、「情報」が出現する文書１と文書２を出現文書リスト１１１１に格納する。同時に、例えば文書１に関してはその文書中で「情報」が出現する位置を位置リスト１１１２に格納する。位置はバイト単位でも文字単位でも良い。検索時には、まず出現文書リスト１１１１を使って、「情報」と「検索」が共に出現する文書（例の場合、文書１と文書２）を探し、それぞれに対して位置リストを使って、双方が連続して出現しているかどうかを検査する。例の場合、文書２は「情報の検索」であるから、「情報」と「検索」の間には１文字あり、ヒットしないこことが判明する。インデックス型検索では、インデックスにより高速な検索が出来るが、インデックスを事前に準備しておかねばならない。また、位置リストも含めるとインデックスの大きさは、元文書のサイズの数倍になってしまう。
【００２６】
一方、スキャン型検索１１０６では、インデックスのような二次データは使わず、検索対象の文書を直接先頭からスキャンしながらキーワードの有無を調べる。スキャン方式には様々なものがあるが、例えばＢＭ（Boyer-Moore）法と呼ばれる方式（Boyer R.S.,Moore J.S.,"A fast string search algorithm",Comminications of the ACM,20(10):762-772,1997）では、キーワードに符合しない不要な箇所を読み飛ばすことにより高速なスキャンを実現している。スキャン型検索は、インデックスが不要な反面、検索速度が遅いという欠点がある。
【００２７】
ハイブリッド型検索は、上記のインデックス型検索とスキャン型検索の欠点を補う方式である。まずは、位置情報無しのインデックスを用いて文書の絞込みを行う（１１０７）。位置情報無しのインデックスとは、各検索ターム１１１３に対し出現文書リスト１１１４のみを保持するインデックスである。位置情報が無いため、検索タームの接続条件の検査ができず検索エラーが混入するが、検索漏れは生じない。例の場合、文書１と文書２がヒットするが、文書２（「情報の検索」）は２つの検索ターム「情報」と「検索」が１文字離れて出現するために実際にはヒットすべきではない文書である。ハイブリッド型検索では、位置情報無しのインデックス型検索１１０７の後、検索結果の文書をスキャンして実際にキーワードが文書に出現するかどうかを調べる（１１０８）。通常のスキャン型検索と比べると、位置情報無しのインデックス検索によりスキャンすべき文書数が大幅に減り、通常のスキャン型検索における検索速度の問題が軽減される。また、位置情報無しインデックスは、位置情報有りインデックスに比べると格段に小さいため、通常のインデックス検索におけるインデックスサイズの問題が軽減できる。
【００２８】
本発明の実施の形態では、ハイブリッド型検索を採用するが、本発明は検索方式を問わない。以降では、まず、インデックスのデータ構造について説明した後、本発明の実施の形態の主要部である、検索式振り分け処理及び一括検索処理について説明していく。
【００２９】
図１２及び図１３は、ハイブリッド型検索で用いるインデックスの一例である。インデックスは図１の文書ＤＢ１０３に格納され、検索制御部１０４及び検索部１０５から参照される。
【００３０】
まず、図１２は検索タームを含む文書数を記録しておくテーブルの一例である。１２０１に検索タームの番号を、１２０２にその検索タームを含む文書数を記録し、プログラムにより検索タームの番号から即座にその検索タームを含む文書数を取得することができる。なお、検索ターム文字列を検索タームの番号に変換するためのテーブル（ハッシュ表等で実現）も別途用意されているが、ここでは説明を省く。
【００３１】
図１３がインデックスの実体の一例である。１３０１が検索タームの番号、１３０２がその検索タームを含む文書数、１３０３が実際の文書番号のリストである。なお、１３０３の文書数は図１２と重複するので省いても良い。もしくは、図１３で定義されるデータを用いて検索タームから文書数が高速に参照できるのであれば、図１２で定義したデータは不要である。
【００３２】
図１の文書ＤＢ１０３には、図１２や図１３のデータの他に文書本体のデータも必要であるが、ここでは説明を省く。
【００３３】
図１４は、本発明の実施の形態の検索式振り分け処理のフロー図である。本処理は図１の検索制御部１０４で実行される。また、本処理は既に説明した図８の８２及び図１０の１００２に相当している。以下、図１４をその例である図１５と合わせて説明する。
【００３４】
図１４のＳ１４０１は本処理の入出力定義である。本処理は、ｎ個の検索式を含む検索式集合Ｑ＝｛ｑ＿１，ｑ＿２，…，ｑ＿ｎ｝をｋ個の集合に振り分ける。振り分けた結果の集合がＱｏ＝｛Ｑ＿１，Ｑ＿２，…，Ｑ＿ｋ｝である。Ｎは検索対象の総文書数であり、振り分け処理でパラメータとして用いる。ｐ＿１，ｐ＿２，…，ｐ＿ｋは振り分けの比率で、これらはユーザもしくはシステム管理者が設定する。なお、各ｐ＿ｊは正の実数（＞０）であり昇順に並んでいる（ｐ＿ｊ＜ｐ＿ｊ＋１）。ただし、最後のｐ＿ｋは１である。この比率の決定方法については後述する。
【００３５】
図１５の例では、総文書数Ｎ＝５００（１５０１），比率はｐ＿１＝０．１，ｐ＿２＝１（１５０２）である。つまり各検索式を２個の集合に振り分けることに相当する。
【００３６】
振り分け処理では、それぞれの検索式からの検索速度を予測して、同程度の予測検索速度を持つ検索式をまとめる。つまり振り分け後には同程度の予測検索速度を持つ検索式のみが同じ集合に入っていることになる。ここでは、検索速度の予測方法が問題となる。本実施の形態では、検索方式としてハイブリッド型を選択した。ハイブリッド型検索では、前段のインデックス型検索の結果の文書数が、検索速度にほぼ比例するパラメータになっている。後段のスキャン型検索でこれらの文書数をスキャンし、全体の検索速度はスキャンする文書のサイズに大きく依存しているからである。よって、検索速度を予測することは、インデックス型検索の結果の文書数を予測することとほぼ等しい。本処理でもインデックス型検索の結果の文書数の予測値により検索式の振り分けを行う。
【００３７】
検索方式としてインデックス型検索を選択する場合は、調べるインデックスの個数が検索速度を予測するパラメータとして使える。また、検索方式としてスキャン型検索を選択する場合は、検索速度はほぼ一定になるが、読み飛ばしを行うスキャン方式の場合は、キーワードの最短長が検索速度を決める。以降ではハイブリッド型検索を選択した場合を詳しく説明する。
【００３８】
まずはＳ１４０２で、オリジナルの検索式からインデックス型検索用の検索式に変換する。この処理は、インデックスに登録してある検索タームの種類に依存するが、本発明の実施の形態では、最も一般的な方法として、文字２グラムをインデックスに登録したと仮定する。検索式変換のためには、オリジナルの各検索式ｑ＿ｊ中の各キーワードを、そのキーワードを構成する検索ターム（文字２グラム）の論理積で置き換える。
【００３９】
図１５の例で説明すると、オリジナルの検索式の「情報検索＋情報公開」（１５０４）の検索キーワード「情報検索」、「情報公開」をそれぞれ文字２グラムに分割して論理積で結合する。なお、ここでは論理和は「＋」、論理積は「＊」で表現する。変換の結果、オリジナルの検索式は、「（情報＊報検＊検索）＋（情報＊報公＊公開）」（１５０５）となる。
【００４０】
次にＳ１４０４で、変換後の各検索式ｑ＿ｊからインデックス型検索によるヒット文献数ｈ＿ｊ＝hit(ｑ＿ｊ)を推定する。ここでは、以下の簡単な方式により推定を行うが、この他にも様々な推定法が考えられる。
【００４１】
まずＯＲ結合されている式は、
hit(Ａ＋Ｂ＋…)＝min(Ｎ，hit(Ａ)＋hit(Ｂ)＋…)
で推定する。ＯＲ結合の場合は、式の構成要素の推定値を足した値が式全体の推定値となる。ただし、足した結果が総文書数を上回る場合は、総文書数Ｎを推定値とする。
【００４２】
ＡＮＤ結合されている式は、
hit(Ａ＊Ｂ＊…)＝min(hit(Ａ)，hit(Ｂ)，…)
で推定する。ＡＮＤ結合の場合は、式の構成要素の推定値の中で最小のものが式全体の推定値となる。
【００４３】
上記の規則で推定を再帰的に続けていくと、最終的には検索タームｔの推定値hit(ｔ)に到達する。これはｔのヒット文書数に等しく、この値は図１２のインデックスを用いれば正確な値がわかる。否定〜ｔの場合は総文書数からhit(ｔ)を引けば良い。
【００４４】
図１５の例では、変換後の検索式１５０５のヒット件数を推定すると３５になる（１５０６）。ここでは、各タームのヒット件数として１５０３の値を用いている。
【００４５】
ここで、本方式で推定したヒット件数は、実際のヒット件数の上限値になっていることに注意されたい。よって、本方式によって０件と推定された検索式は、実際のインデックス検索でもヒット件数が０件である。更に、ハイブリッド型検索では、インデックス型検索の結果は最終的な検索結果の文書数よりも多いことが保証されているため、最終的なヒット件数も０件になる。従って、本方式により推定ヒット件数が０件になる検索式は、Ｓ１４０５の例外処理により即座に結果が返答できる。
【００４６】
ヒット件数は上記以外にも、確率的な方法により推定することができる。この場合、
hit(Ａ＋Ｂ)＝hit(Ａ)＋hit(Ｂ)−hit(Ａ＊Ｂ)
hit(Ａ＊Ｂ)＝hit(Ａ)＊hit(Ｂ)／Ｎ
を同じく再帰的に適用していく。本発明の実施の形態では、確率的な推定ではなく、上記の最小値による推定を用いる。
【００４７】
最後に、Ｓ１４０６で実際の振り分け処理を行う。本発明の実施の形態では、総文書数Ｎを振り分けの比率ｐ＿１，ｐ＿２，…，ｐ＿ｋで分割し、ヒット件数の推定値ｈ＿ｊが属する領域に振り分ける。具体的には、ｈ＿ｊがＮ＊ｐ＿（ｘ−１）≦ｈ＿ｊ＜Ｎ＊ｐ＿ｘとなるｘを見つけ（ただしｐ＿０＝０とする）、Ｑ＿ｘに振り分け対象のｑ＿ｊを加える。
【００４８】
図１５の例では、ｐ＿０＝０，ｐ＿１＝０．１，ｐ＿２＝１でＮ＝５００であるから、振り分けに用いる区間は、[０，５０，５００]となる。対象の検索式の予測ヒット件数は３５であるから、この検索式はＱ＿１に振り分けられる。
【００４９】
以上が、振り分け処理の詳細であるが、ここで問題となるのは、ユーザもしくはシステム管理者が振り分けの比率を指定しなければならない点である。最適な振り分け比率を決定する方法については後述する。
【００５０】
振り分け処理が終わったら、それぞれの検索式の集合をヒット件数の推定値が小さいものから順番に一括検索する。これは図８の８５〜８６、及び図１０の１００６〜１００８に相当する。
【００５１】
図１６は、本発明の実施の形態の一括検索処理のフロー図である。Ｓ１６０１に本処理の入出力定義を示す。本処理はｎ個の検索式を含む検索式集合Ｑ＝｛ｑ＿１，ｑ＿２，…，ｑ＿ｎ｝から一括検索を行い、ｎ個の検索結果の集合Ｒ＝｛Ｒ＿１，Ｒ＿２，…，Ｒ＿ｎ｝を得る。ここで、それぞれのＲ＿ｉは対応するｑ＿ｉから検索を行った結果（検索結果の文書集合）に相当する。
【００５２】
一括検索では、まずＳ１６０２において、キーワードオートマトンＡを作成する。キーワードオートマトンは後にスキャン型検索を行う際に用いる。スキャン型検索では、検索対象の文書をスキャンしながらキーワードオートマトンを評価し、キーワードオートマトンに登録されているキーワードの有無を調べる。
【００５３】
図１８にキーワードオートマトンの例を示す。なお、キーワードオートマトンの作成方法は公知である。図１８の例では、２つの検索式「情報検索＋情報公開」（ｑ＿１：１８０１）と「（秘＊情報）＋情報公開」（ｑ＿２：１８０２）からキーワードオートマトンを作成している。
【００５４】
キーワードオートマトンを作成するには、まず対象の検索式から各検索キーワードを抽出する。例の場合「情報検索」「情報公開」「秘」「情報」の４つのキーワードが抽出できる。キーワード「情報公開」はｑ＿１、ｑ＿２いずれにも含まれるが、キーワードオートマトンでは同じものとして扱う。
【００５５】
次に、抽出したキーワード集合の接頭辞木１８０３を構築する。この接頭辞木がキーワードオートマトンの本体になる。Ｓで表されたノード１８０４は開始ノードを表す。二重四角のノードは終端ノードを表し、そこがキーワードの最終文字であることを意味している。つまり、ノード１８０６はキーワード「情報」に、ノード１８０８は「情報検索」に、ノード１８１０は「情報公開」に、１８１１は「秘」に対応している。キーワードオートマトンは接頭辞木になっているため、重複する接頭辞が同じパスで表現されている点に注意されたい。この性質により、スキャン時に効率の良い検査が可能になる。また、終端ノードからは、キーワードの有無を表すスキャン結果配列１８１２の対応する要素にポインタが張られている。
【００５６】
スキャン型検索では、検索対象のテキストをスキャンしながら、キーワードオートマトン上で対応する文字のノードをたどる。終端ノードまで到達したら、対応するキーワードが存在したということであるから、対応するスキャン結果配列要素に真偽値の真（Ｔ）を入れる。スキャン結果配列はスキャン文書毎に偽（Ｆ）で初期化しておく。以上のスキャン型検索は、ＡＣ（Aho-Corasick）法と呼ばれる方法（Aho A.V.,Corasick M.J.,"Efficient string matching: an bibliographic search",Communications of theACM,18(6):333-340,1975）を簡略化したものである。
【００５７】
以上で、キーワードオートマトンの作成法の説明を終え、図１６の一括検索処理フロー図に戻る。次にＳ１６０３で、検索式評価用配列を作成する。キーワードオートマトンからは各キーワードの有無が判るだけである。そこで、検索式評価用配列を用いて各検索式の真偽値（実際に検索式にヒットしているかどうか）を判定する。各検索式ｑ＿ｉに対して一個ずつ対応する検索式評価用配列Ｅ＿ｉを作成する。このＥ＿ｉは検索式ｑ＿ｉの逆ポーランド形式になっている。
【００５８】
中置形式の検索式（例えば「Ａ＊（Ｂ＋Ｃ）」）を逆ポーランド形式（「ＡＢＣ＋＊」）に変換する方法については公知である。図１８に、２つの検索式ｑ＿１（１８０１）とｑ＿２（１８０２）を逆ポーランド形式の評価用配列Ｅ＿１（１８１３）とＥ＿２（１８１４）に変換した例を示す。例えば、ｑ＿１の「情報検索＋情報公開」を逆ポーランド形式に変換すると、「情報検索」「情報公開」「ＯＲ」という３要素の並びになる。これをそのまま配列表現したものが１８１３のＥ＿１である。先頭要素１８１５からは、「情報検索」に対応するスキャン結果配列要素へポインタが飛んでいる。検索式を評価する際は既にスキャンが終了しているため、スキャン結果配列の要素も全て決定しており（つまり、各キーワードの有無がわかっている）、１８１５のポインタによりキーワード「情報検索」の有無も即座に判定できるようになっている。同様に配列の要素１８１６からは、キーワード「情報公開」に対応するスキャン結果配列要素へポインタが飛んでいる。最後の要素１８１７は直前の２つの配列要素の論理和を調べるオペレータである。このＥ＿１を先頭から評価することにより、対応する検索式の真偽値が判定できる。
【００５９】
以上で、一括検索において、スキャン型検索を行うための前処理が終了し、次に実際に検索処理を進める。図１６に戻り、まずはＳ１６０４のインデックス型検索により、全文書集合Ｄからスキャン型検索を行うべき文書集合Ｄｓを抽出する。インデックス型検索の詳細については、図１７を使って後に説明する。
【００６０】
インデックス型検索の結果のＤｓは最終的なヒット文書を必ず含むような文書集合になっているため、次にＤｓ内の文書ｄ＿ｋそれぞれに対して、スキャン型検索によりｄ＿ｋが各検索式を満たしているかどうかを検査する。
【００６１】
スキャン型検索ではまず、Ｓ１６０６のスキャン処理により、既に作成してあるキーワードオートマトンＡをたどりながら文書ｄ＿ｋのスキャンを行う。走査の結果、各キーワードの有無がスキャン結果配列（図１８の１８１２）に格納される。
【００６２】
スキャンが終了したら、Ｓ１６０７で検索式の評価を行う。各検索式については１６０３で既に対応する評価用配列が作成してあるため、後は配列を読みながら逆ポーランド式の評価を行うだけである。逆ポーランド式の評価も公知技術である。評価の結果、真であれば、評価中の文書ｄ＿ｋを検索式ｑ＿ｉに対応する検索結果集合Ｒの要素Ｒ＿ｉに追加する。
【００６３】
以上の処理の結果、検索結果集合Ｒには、各検索式の検索結果の集合が蓄積されることになる。ここで、検索式が複数個あっても、各文書に対するスキャン処理は１回であることに注意されたい。
【００６４】
次に、先ほど説明を飛ばした、スキャン対象の文書集合Ｄｓを求めるインデックス型検索の詳細について説明する。図１７が、本発明の実施の形態のインデックス型検索のフロー図である。Ｓ１７０１が本処理の入出力定義である。本処理は、ｎ個の検索式を含む検索式集合Ｑ＝｛ｑ＿１，ｑ＿２，…，ｑ＿ｎ｝から検索を行い、その検索結果の文書集合をＤｓとして出力する。
【００６５】
まず、Ｓ１７０２で検索式の変換を行う。この処理は、図１４のＳ１４０２と同じであるため、説明を省略する。次に、Ｓ１７０３で検索式のまとめ上げを行う。インデックス型検索では、いずれかの検索式を満たす可能性のある文書をすべて抽出せねばならないため、各検索式ｑ＿ｉをＯＲ結合したＱall＝ｑ＿１＋ｑ＿２＋…＋ｑ＿ｎをまとめ上げた検索式とする。次にＳ１７０４でＱallから検索を行い、検索結果の文書集合をＤｓとする。
【００６６】
以上が、本発明の実施の形態の各処理の詳細説明である。残った問題は、検索式振り分け処理（図１４）において、検索式の配分比率（Ｓ１４０１のｐ＿１からｐ＿ｋ）をどう決めるかである。ユーザ及びシステム管理者が任意の値を設定してもよいが、設定値次第では十分な性能が出ない場合もある。そこで、本発明の実施の形態では、以下で説明する方式で配分比率を決める。
【００６７】
問題を簡略化して、検索式集合を２分割することを考える。それ以上に分割したい場合は、２分割後のそれぞれを更に本方式により２分割していけばよい。ここでは、分割の比率をｐ（０≦ｐ≦１）とし、比率ｐの検索式を高速検索用（一括検索１）に振り分け、比率（１−ｐ）の検索式を低速検索用（一括検索２）に振り分けるとする。また、Ｔ1を高速検索の検索時間、Ｔ2を低速検索の検索時間とする。よって、全体の検索時間はＴ1＋Ｔ2になる。なお、一括検索の検索時間は、一括検索する検索式で一番遅いものの単独検索時間と仮定する。実際は、更に遅い時間となることが多いが、ここでは簡略化する。また、検索式はランダムに到着すると仮定する。
【００６８】
図１９は、検索式の到着時間毎にその待ち時間と検索時間を示した図である。検索式到着時間が０≦ｔ＜Ｔ1の検索式の割合はＴ1／（Ｔ1＋Ｔ2）であり、その中で高速検索用のものの比率はｐ、低速検索用のものの比率は（１−ｐ）ある。この区間０≦ｔ＜Ｔ1では高速検索（一括検索１）が実行されているため、この区間に到着した検索式は次の低速検索（一括検索２）で処理されることになる。図１０の方式によれば、高速検索実行中に到着した高速検索用の検索式は、次回の高速検索まで待つのではなく、次の低速検索で処理する。よって、いずれの検索式も、平均待ち時間がＴ1／２、検索時間がＴ2となる。
【００６９】
次のＴ1≦ｔ＜Ｔ1＋Ｔ2に到着した検索式を考える。この区間では低速検索が実行されているため、この時間帯に到着した高速検索用の検索式は次の高速検索で処理できる。つまり、平均街時間はＴ2／２、検索時間はＴ1である。一方、この時間帯に到着した低速検索用の検索式は、次の高速検索が終了した後の低速検索まで待つことになるため、平均待ち時間はＴ2／２＋Ｔ1、検索時間はＴ2になる。
【００７０】
上記の場合分けをまとめて平均応答時間と最悪応答時間を計算した結果が図２０である。通常方式とは、検索式の振り分けをせず全ての検索式を一括処理する図６、図７で説明した従来方式である。また、交互検索方式は本発明の実施の形態の方式である。ここで平均応答時間を比べると、本発明の実施の形態の方式が通常方式を上回る条件は、図中の２００１で示された不等式が成立する場合となる。また、不等式２００１の左辺の値が大きくなるほど、本発明の実施の形態の方式の効果が大きいことを表している。
【００７１】
図２１に、不等式２００１が成立する領域を図示している。横軸は検索時間で、Ｔ1／Ｔ2で正規化している。縦軸は、単独に検索を行った場合、対応する検索時間までに検索が終了する検索式の割合を表している。縦軸は、言い換えると、検索式の分割比率ｐを表していることになる。
【００７２】
不等式２００１の左辺は、図２１中で線分２１０４と線分２１０５を足した値になっている。ここで、二次曲線２１０２は二次曲線２１０１を上下に反転して、かつ対角線２１０３から引いた曲線である。なお、対角線２１０３は、検索式が検索時間によらず一様に分布していた場合の分布を表している。不等式２００１が成立する条件は、実際の分布が二次曲線２１０２より上にあればよいことになる。また、二次曲線２１０２から上に離れていれば離れているほど本発明の実施の形態の方式の効果が大きいことをも意味している。よって、最適の分割比率ｐを決めるには、検索式の分布を図２１上にプロットし、二次曲線２１０２からの上に最もはなれている点を決めればよい。もし、検索式が一様に分布しているとすると、分布曲線は対角線２１０３と等しくなるため、最適な点はｐ＝０．５の点となる。つまり、高速検索と低速検索を同じ割合で分ける場合が最適であることを意味している。
【００７３】
図２２は実際の検索式の分布を表した図である。この図では、分割比率の最適は約０．９と読み取れる。つまり高速検索に９割の検索式を振り分けることに相当する。分割比率が０．９になるためには、単独検索時間が１．５秒から２秒以下の検索式を高速検索に振り分ければよいことも図から読み取れる。本発明の実施の形態では、既に説明したように、検索時間はインデックス型検索の結果の推定文書数とほぼ等しいため、図２２の横軸はインデックス型検索の結果の文書数となる。
【００７４】
実際には、あらかじめある程度の数の検索式から図２２のような分布図を作り、最適な分割比率を決定すればよいのだが、検索サービスを運用しながら徐々に最適な分割比率に修正していく方式も考えられる。そのためには、検索が終了する度に、図２３のテーブルにデータを蓄積していけばよい。テーブル中で、２３０１はインデックス型検索の結果の推定文書数を、２３０２は検索式の数を表している。図２３のテーブルは、図２２と同等の情報を持つため、図２３のテーブルからその時点で最適な分割比率が計算できる。この場合、検索式の蓄積がまだ無い初期状態では、適当な分割比率を初期値として与えておく。その後、検索式が一定数蓄積される度に、それまでに蓄積されている検索式の分布情報を用いて振り分けのためのパラメータを逐次更新すればよい。
【図面の簡単な説明】
【００７５】
【図１】本発明による文書検索システムの構成例を示すブロック図。
【図２】逐次処理方式（従来方式）のフロー図。
【図３】逐次処理方式（従来方式）のタイムチャート。
【図４】並列処理方式（従来方式）のフロー図。
【図５】並列処理方式（従来方式）のタイムチャート。
【図６】一括処理方式（従来方式）のフロー図。
【図７】一括処理方式（従来方式）のタイムチャート。
【図８】本発明の実施の形態の処理のフロー図。
【図９】本発明の実施の形態の処理のタイムチャート。
【図１０】本発明の実施の形態の処理（スレッド版）のフロー図。
【図１１】代表的な検索方式（インデックス方式、スキャン方式、ハイブリッド方式）の概念図。
【図１２】本発明の実施の形態の文書ＤＢに含まれ、ターム番号とそのタームが含む文書数を格納するテーブルの一例を示す図。
【図１３】本発明の実施の形態の文書ＤＢに含まれ、ターム番号とそのタームが含む文書数と、そのタームが含む文書の文書番号リストを格納するテーブルの一例を示す図。
【図１４】本発明の実施の形態の検索制御部で実行される検索式振り分け処理のフローチャート。
【図１５】本発明の実施の形態の検索制御部で実行される検索式振り分け処理の処理例を示す図。
【図１６】本発明の実施の形態の検索部で実行される一括検索処理のフローチャート。
【図１７】本発明の実施の形態の検索部で実行されるインデックス型検索のフローチャート。
【図１８】本発明の実施の形態の検索部で実行される一括検索処理の処理例を示す図。
【図１９】検索式の到着時間別にその待ち時間と検索時間を列挙した説明図。
【図２０】本発明の実施の形態の方式と通常の一括検索方式とを、平均応答時間、最悪応答時間により比較した説明図。
【図２１】本発明の実施の形態において、検索式の最適な分割比率を決定するための検索式分布図。
【図２２】図２１の検索式分布図の実際の一例を示す図。
【図２３】本発明の実施の形態において、検索式の最適な分割比率を動的に決定するために必要なテーブルの一例を示す図。
【符号の説明】
【００７６】
１０  検索サーバ
１０１  ＣＰＵ
１０２  メモリ
１０３  文書ＤＢ
１０４  検索制御部
１０５  検索部
１１  ネットワーク
１２１，１１２，１１３  検索クライアント
【図１】
0005155001.tif 000002
【図２】
0005155001.tif 000003
【図３】
0005155001.tif 000004
【図４】
0005155001.tif 000005
【図５】
0005155001.tif 000006
【図６】
0005155001.tif 000007
【図７】
0005155001.tif 000008
【図８】
0005155001.tif 000009
【図９】
0005155001.tif 000010
【図１０】
0005155001.tif 000011
【図１１】
0005155001.tif 000012
【図１２】
0005155001.tif 000013
【図１３】
0005155001.tif 000014
【図１４】
0005155001.tif 000015
【図１５】
0005155001.tif 000016
【図１６】
0005155001.tif 000017
【図１７】
0005155001.tif 000018
【図１８】
0005155001.tif 000019
【図１９】
0005155001.tif 000020
【図２０】
0005155001.tif 000021
【図２１】
0005155001.tif 000022
【図２２】
0005155001.tif 000023
【図２３】
0005155001.tif 000024