(57)【要約】【課題】インデックス型検索とスキャン型検索からなる文書検索装置において、双方で欠点を補いながら連携して検索を行う。【解決手段】キーワードの論理式から成る検索式からインデックス型検索用検索式とスキャン型検索用検索式とを構築し、全体の検索時間が短くなるようにインデックス検索を行う文字２グラムを設定してインデックス型検索を行い、その検索結果に対してスキャン型検索を行う。【選択図】図２
2008305175.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、検索対象の文書を格納した文書データＤＢと、前記検索対象の文書に含まれるインデックスタームと当該インデックスタームを含む文書数及び文書リストを格納した文書インデックスＤＢとを備えた文書検索装置が、キーワードを論理式で組み合わせた検索式の入力を受けて前記文書データＤＢから文書を検索する文書検索方法であって、前記文書検索装置は、
入力された検索式に含まれる各キーワードを当該キーワードを構成する前記インデックスタームの積に置き換えたインデックス型検索用検索式を構築する工程、
前記文書インデックスＤＢを参照して、前記インデックス型検索用検索式中の各タームにつき、そのタームのヒット件数よりヒット件数が多いタームを全件ヒットとみなした場合に、インデックス型検索にかかる時間と検索される文書数とを予測し、前記予測された数の文書に対して前記入力された検索式でスキャン型検索をするのにかかる時間を予測し、インデックス型検索にかかる時間と前記スキャン型検索にかかる時間の和を全検索時間予測値として算出する工程、
前記全検索時間予測値が最小となるとき前記全件ヒットとみなされたタームを恒真値で置き換えたインデックス型検索用検索式を構築する工程、
前記恒真値を含むインデックス型検索用検索式を用いてインデックス型検索を実行する工程、
前記インデックス型検索によって検索された文書に対して前記入力された検索式でスキャン型検索を実行する工程、
前記スキャン型検索によって検索された文書を出力する工程、
を実行する文書検索方法。
【請求項２】
請求項１記載の文書検索方法において、前記インデックスタームは文字２グラムであることを特徴とする文書検索方法。
【請求項３】
請求項１記載の文書検索方法において、前記インデックス型検索用検索式に含まれるタームから前記全件ヒットとみなすタームを除外して残ったタームに関して、前記文書インデックスＤＢに格納された文書リストの各要素を読み取るのに要する時間を計算し、それを前記インデックス型検索にかかる時間の予測値とすることを特徴とする文書検索方法。
【請求項４】
請求項１記載の文書検索方法において、前記インデックス型検索で検索される文書数の予測に当たっては、前記インデックス型検索用検索式の部分式中でタームがＡＮＤで結合されている場合はそれぞれのヒット件数のうち小さい方を検索結果の予測数とし、ＯＲで結合されている場合はそれぞれのヒット件数の和を予測数とし、和が全文書数を超えるときは全文書数を予測数とすることを特徴とする文書検索方法。
【請求項５】
請求項１記載の文書検索方法において、前記スキャン型検索にかかる時間の予測に当たっては、予め与えられた１文書当たりの平均文書長及びスキャン速度に関する情報を用いることを特徴とする文書検索方法。
【請求項６】
プロセッサと、検索対象の文書を格納した文書データＤＢと、前記検索対象の文書に含まれるインデックスタームと当該インデックスタームを含む文書数及び文書リストを格納した文書インデックスＤＢとを備えた文書検索装置が、キーワードを論理式で組み合わせた検索式の入力を受けて前記文書データＤＢから文書を検索する文書検索方法であって、前記文書検索装置は、
入力された検索式に含まれる各キーワードを当該キーワードを構成する前記インデックスタームの積に置き換えたインデックス型検索用検索式を構築する工程、
前記文書インデックスＤＢを参照して、前記インデックス型検索用検索式中の各タームをヒット件数の昇順にソートする工程、
前記インデックス型検索用検索式の部分式中でタームがＡＮＤで結合されている場合はそれぞれのヒット件数のうち小さい方を検索結果の予測数とし、ＯＲで結合されている場合はそれぞれのヒット件数の和を予測数とし、和が全文書数を超えるときは全文書数を予測数として、前記インデックス型検索用検索式でインデックス型検索をした場合に検索される文書数を予測する工程、
前記予測された数の文書に対し前記入力された検索式でスキャン型検索をするのにかかる時間を予測する工程、
与えられた目標検索時間から前記スキャン型検索にかかる時間を控除した時間内に読むことのできる前記文書インデックスＤＢの文書リストの最大要素数を計算する工程、
前記ソートした前記インデックス型検索用検索式中の各タームについてヒット件数の少ないタームから順にヒット件数を累積し、累積和が前記最大要素数を超えた以降のタームを恒真値で置き換えたインデックス型検索用検索式を構築する工程、
前記恒真値を含むインデックス型検索用検索式を用いてインデックス型検索を実行する工程、
前記インデックス型検索によって検索された文書に対して前記入力された検索式でスキャン型検索を実行する工程、
前記スキャン型検索によって検索された文書を出力する工程、
を実行する文書検索方法。
【請求項７】
請求項６記載の文書検索方法において、前記インデックスタームは文字２グラムであることを特徴とする文書検索方法。
【請求項８】
請求項６記載の文書検索方法において、前記スキャン型検索にかかる時間の予測に当たっては、予め与えられた１文書当たりの平均文書長及びスキャン速度に関する情報を用いることを特徴とする文書検索方法。
【請求項９】
プロセッサと、検索対象の文書を格納した文書データＤＢと、前記検索対象の文書に含まれるインデックスタームとしての文字２グラムと当該インデックスタームを含む文書数及び文書リストを格納した文書インデックスＤＢとを備えた文書検索装置が、キーワードを論理式で組み合わせた検索式の入力を受けて前記文書データＤＢから文書を検索する文書検索方法であって、前記文書検索装置は、
入力された検索式に含まれる各キーワードを当該キーワードを構成するインデックスタームの積に置き換えたインデックス型検索用検索式を構築する工程、
前記文書インデックスＤＢを参照して、前記インデックス型検索用検索式中の各タームにつき、そのタームのヒット件数よりヒット件数が多いタームのうち１文字あるいは２文字キーワード由来のターム以外を全件ヒットとみなした場合に、インデックス型検索にかかる時間と検索される文書数とを予測し、前記予測された数の文書に対して前記入力された検索式でスキャン型検索をするのにかかる時間を予測し、インデックス型検索にかかる時間と前記スキャン型検索にかかる時間の和を全検索時間予測値として算出する工程、
前記全検索時間予測値が最小となるとき前記全件ヒットとみなされたタームを恒真値で置き換えたインデックス型検索用検索式を構築する工程、
前記恒真値を含むインデックス型検索用検索式を用いてインデックス型検索を実行し、１つの文書が検索される毎に、１文字あるいは２文字キーワード由来の文字２グラムに対する検索結果を反映して前記入力された検索式のうち１文字あるいは２文字キーワードを真偽値で置き換えた検索式を用いてスキャン型検索を実行し結果を出力する工程、
を実行する文書検索方法。
【請求項１０】
請求項９記載の文書検索方法において、前記インデックス型検索用検索式に含まれるタームから前記全件ヒットとみなすタームを除外して残ったタームに関して、前記文書インデックスＤＢに格納された文書リストの各要素を読み取るのに要する時間を計算し、それを前記インデックス型検索にかかる時間の予測値とすることを特徴とする文書検索方法。
【請求項１１】
請求項９記載の文書検索方法において、前記インデックス型検索で検索される文書数の予測に当たっては、前記インデックス型検索用検索式の部分式中でタームがＡＮＤで結合されている場合はそれぞれのヒット件数のうち小さい方を検索結果の予測数とし、ＯＲで結合されている場合はそれぞれのヒット件数の和を予測数とし、和が全文書数を超えるときは全文書数を予測数とすることを特徴とする文書検索方法。
【請求項１２】
請求項９記載の文書検索方法において、前記スキャン型検索にかかる時間の予測に当たっては、予め与えられた１文書当たりの平均文書長及びスキャン速度に関する情報を用いることを特徴とする文書検索方法。
【請求項１３】
プロセッサと、検索対象の文書を格納した文書データＤＢと、前記検索対象の文書に含まれるインデックスタームとしての文字２グラムと当該インデックスタームを含む文書数及び文書リストを格納した文書インデックスＤＢとを備えた文書検索装置が、キーワードを論理式で組み合わせた検索式の入力を受けて前記文書データＤＢから文書を検索する文書検索方法であって、前記文書検索装置は、
入力された検索式に含まれる各キーワードを当該キーワードを構成する前記インデックスタームの積に置き換えたインデックス型検索用検索式を構築する工程、
前記文書インデックスＤＢを参照して、前記インデックス型検索用検索式中の各タームのうち１文字あるいは２文字キーワード由来のターム以外をヒット件数の昇順にソートする工程、
前記インデックス型検索用検索式の部分式中でタームがＡＮＤで結合されている場合はそれぞれのヒット件数のうち小さい方を検索結果の予測数とし、ＯＲで結合されている場合はそれぞれのヒット件数の和を予測数とし、和が全文書数を超えるときは全文書数を予測数として前記インデックス型検索用検索式でインデックス型検索をした場合に検索される文書数を予測する工程、
前記予測された数の文書に対し前記入力された検索式でスキャン型検索をするのにかかる時間を予測する工程、
与えられた目標検索時間から前記スキャン型検索にかかる時間を控除した時間内に読むことのできる前記文書インデックスＤＢの文書リストの要素数を計算し、前記要素数から１文字あるいは２文字キーワード由来のタームのヒット件数を控除した要素数を最大要素数とする工程、
前記ソートした前記インデックス型検索用検索式中の各タームをヒット件数の少ないタームから順にヒット件数を累積し、累積和が前記最大要素数を超えた以降のタームを恒真値で置き換えたインデックス型検索用検索式を構築する工程、
前記恒真値を含むインデックス型検索用検索式を用いてインデックス型検索を実行し、１つの文書が検索される毎に、１文字あるいは２文字キーワード由来の文字２グラムに対する検索結果を反映して前記入力された検索式のうちの１文字あるいは２文字キーワードを真偽値で置き換えた検索式を用いてスキャン型検索を実行し結果を出力する工程、
を実行する文書検索方法。
【請求項１４】
請求項１３記載の文書検索方法において、前記スキャン型検索にかかる時間の予測に当たっては、予め与えられた１文書当たりの平均文書長及びスキャン速度に関する情報を用いることを特徴とする文書検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インデックス型検索とスキャン型検索という２つの検索手法を組み合わせることで、双方の欠点を補い合いながら文書を検索する技術に関する。
【背景技術】
【０００２】
文書検索には２つの方式がある。まずは、スキャン型検索と呼ばれる方式で、検索対象の文書を１つずつ調べながら、検索式を満たす文書を探す。実際には、各文書を先頭から読みながら、各検索キーワードの出現の有無を調べる。スキャンアルゴリズムとしては、ＡＣ法（非特許文献１）、読み飛ばしを行うＣＷ法（非特許文献２）などが知られている。もう一方は、インデックス型検索と呼ばれる方式で、各検索タームに対してそれを含む文書のリスト（インデックス）をあらかじめ構築しておき、検索時にはインデックスを調べることにより検索結果の文書集合を得る。インデックスの構築法も含め、インデックス型検索は非特許文献３が詳しい。
【０００３】
上記の２つの方式にはそれぞれ利点と欠点がある。スキャン型検索は文書を１つずつ調べるため検索が遅い。一方、インデックス型検索は事前に構築したインデックスを調べれば良いので検索は速い。逆に、文書データの他にインデックスを保守しておかねばならない。インデックスに含める情報にもよるが、インデックスのサイズは総文書サイズの数倍になる場合もある。また、検索対象の文書が追加・削除・変更された場合は、その都度インデックスを最新の状態に更新する必要もある。スキャン型検索では、インデックスのような二次データを必要とせず、オリジナルの文書データさえあれば検索ができる。
【０００４】
また、インデックス型検索は速いとは言え、検索キーワードの数が多くなると検索速度も比例して遅くなる。特にインデックスの圧縮を行う場合は、圧縮の復号処理のためにその傾向が顕著に現れ、場合によってはスキャン型検索よりも遅くなることもある。一般に、インデックス型検索の検索速度は検索ターム毎のヒット文書数を総和した数に反比例する。一方、スキャン型検索の検索速度は、検索式には大きく依存しない。
【０００５】
以上の２つの方式を組み合わせた方式として、ハイブリッド型検索が考えられる。従来からある文字成分表を用いた検索もハイブリッド型検索に分類することができる。ここでは、単純でサイズが小さいインデックスを用いて、まずインデックス型検索を行う。続いて、検索結果の文書集合に対してスキャン型検索を行う。ここでのインデックス型検索は、ふるいとして動作すれば良く、検索漏れさえ起こさなければ精度は１００％でなくてもよい。このようなインデックスの候補としては、文字成分表や位置情報を保存しない文字２グラムのインデックスなどがある。スキャン型検索の前にふるいとしてのインデックス型検索を行うことにより、スキャン型検索で全文書を調べる必要が無くなり、速度が遅いというスキャン型検索の欠点が克服できる。ただし、サイズは小さいとはいえインデックスは依然必要である。
【０００６】
【非特許文献１】Aho,A.V., Corasick,J., "Efficient string matching: an aid to bibliographic search", Communications of the ACM,18(6),pp.333-340,1975
【非特許文献２】Commentz-Walter,B., "A string matching algorithm fast on the average", In Proceedings of the 6th International Colloquium on Automata, Languages and Programming,LNCS71,pp.118-132,1979
【非特許文献３】Baeza-Yates,R.,Ribeiro-Neto,B., "Modern Information Retrieval", Addison-Wesley,1999
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ハイブリッド型検索を行っても、検索式によってはインデックス型検索が遅くなり、効果が出ないことがある。前述したように、どの文書にも現れるような検索タームが検索式に多く含まれる場合、インデックスの文書リストの圧縮を復号する回数が多くなり、インデックス型検索の速度が低下する。極端な場合、ハイブリッド型検索を行うよりも、スキャン型検索のみを行う方が速い場合も出てくる。ただし、このような場合は非常にまれなため、平均速度としては顕在化しない場合が多い。しかし、最悪ケースの速度を保証せねばならない場合は、上記のような場合に対応する必要がある。
【０００８】
検索式中の検索タームの内、どの文書にも現れるような検索タームの数がある閾値を超えたらスキャン検索のみを行う、という方針を取れば、全文書をスキャンする検索速度で最悪の検索速度が保証できる。しかしこの場合、閾値は実験的に決めざるをえない。また、検索式中には、絞込みが効果的な部分論理式も多いため、この情報を使わずにスキャン型検索を行うのはもったいない。
【０００９】
一方、スキャン型検索側にも問題がある。スキャンアルゴリズムとしてＣＷ法を用いると、読み飛ばしの効果により高速なスキャンが可能になる。読み飛ばしとは、おおまかに説明すれば、検索式中のキーワードの最短長をＬとすれば、検索対象文書中のｉ文字目の文字が検索式のどのキーワードにも出現しなければ、ｉ＋Ｌの範囲にはどのキーワードも存在しないという事実を利用して、スキャンする文字を安全なだけ読み飛ばす手法である。ただし、検索式中に一つでも短いキーワードがあれば、読み飛ばせる文字数も少なくなってしまう。この場合は、読み飛ばしを行わないＡＣ法と同等かそれ以下の検索速度になってしまう。
【課題を解決するための手段】
【００１０】
本発明は、上記の課題を解決するために、検索式をインデックス型検索用とスキャン型検索用に振り分けてハイブリッド型検索を行う。その際、検索式毎にハイブリッド型検索の検索速度を予測し、予測検索速度が最小になるように振り分けを行う。具体的には、まず、検索式中の各検索タームのヒット件数をインデックスから取得し、検索ターム毎に、その検索タームよりヒット件数が多い検索タームを便宜上全件ヒットとみなした場合の予測速度を算出する。全件ヒットとみなした検索タームはインデックス型検索では文書リストの取得は行わなくて済むために、インデックス型検索の検索時間が節約できる。ここでは、ヒット件数が多い検索タームほど、インデックス型検索の検索時間はかかるが、全件ヒットとみなしても絞込み効果には大きな影響を与えない、という特徴を利用している。
【００１１】
スキャン型検索に関する課題に対しては、例えばインデックス型検索で用いるインデックスを文字２グラム単位にしておけば、１文字もしくは２文字からなる短いキーワードに関してはインデックス型検索で検索が完結することになる。本発明では、インデックス型検索で完結する短い文字列はインデックス型検索での結果を利用することで、スキャン型検索（特にＣＷ法）では短いキーワードを調べないようにする。
【発明の効果】
【００１２】
インデックス型検索において、ヒット件数の多い検索タームを全件ヒットとみなしその検索を行わないことにより、絞込み率は大きく低下させずにインデックス型検索の速度、ひいてはハイブリッド型検索の速度を向上させることができる。加えて、短いキーワードをインデックス型検索に任せることにより、スキャン型検索における読み飛ばし効果が増し、スキャン型検索の速度、ひいてはハイブリッド型検索の速度を向上させることができる。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照して本発明の実施の形態を説明する。
[実施例１]
図１は、本発明の文書検索装置のシステム構成例を示す図である。文書検索装置は、検索サーバ１０と、ネットワーク１１と、検索クライアント１２とを備える。
検索サーバ１０は、ＣＰＵ１０１、メモリ１０２、文書データＤＢ１０７、文書インデックスＤＢ１０８を備える。また、検索サーバ１０は、検索式構築部１０３、インデックス型検索部１０４、スキャン型検索部１０５を構成するプログラム、及びデータ通信部１０６を格納している。
【００１４】
ＣＰＵ１０１は、検索式構築部１０３、インデックス型検索部１０４、スキャン型検索部１０５を構成する各種プログラムを実行することによって各種処理を実行する。メモリ１０２は、ＣＰＵ１０１が実行するプログラム及びプログラムを実行するために必要なデータを一時的に記憶する。
【００１５】
データ通信部１０６は、ネットワーク１１を介してデータ通信をするインターフェースであり、例えば、ＴＣＰ／ＩＰプロトコルによって通信可能なＬＡＮカードによって構成される。検索サーバ１０は、データ通信部１０６を介してネットワーク１１に接続された検索クライアント１２と通信する。
【００１６】
検索クライアント１２は、利用者からの検索式を受け付けて、ネットワーク１１を介して検索サーバ１１に検索式を送付し、検索サーバ１１から同じくネットワーク１１を介して検索結果を受け取り、利用者に提示する。検索クライアント１２の内部構成については説明を省略する。
【００１７】
文書データＤＢ１０７には、検索対象の文書が登録されている。スキャン型検索部１０５では、文書データＤＢ１０７内の文書を対象に検索を行う。文書インデックスＤＢ１０８には、各検索タームに対して、それを含む文書のリスト（インデックス）、及び文書数が登録されている。本実施例では、文字２グラムを検索タームとしている。検索対象の文書から、文書データＤＢ１０７を構成する手段については非特許文献３に詳しい。インデックス型検索部１０４では、文書インデックスＤＢ内の情報を用いて検索を行う。
【００１８】
図２は、文書検索装置で実行される検索処理のフロー全体を示す図である。以下、図２に基づいて、検索式構築部１０３、インデックス型検索部１０４、スキャン型検索部１０５によって実行される処理の概要を説明する。
【００１９】
まず、検索式２０１が、検索クライアント１２から送られてくる。ここでの検索式は、（“文書”＋“画像”）＊“検索処理”といったように、キーワードを論理式で組み合わせたものとする。この例は、“文書”又は“画像”を含みかつ“検索処理”を含む文書を見つけるための検索式である。
【００２０】
次に、検索式構築２０２により、検索式２０１からインデックス型検索用検索式２０３とスキャン型検索用検索式２０４とを構築する。この際、検索式構築２０２は文書インデックスＤＢ１０８から必要な情報を得て、最終的な予測検索速度が最速となるようにそれぞれの検索式を構築する。検索式構築２０２の詳細な説明は後述する。
【００２１】
インデックス型検索用検索式２０３とスキャン型検索用検索式２０４が構築できたら、まずインデックス型検索２０５を行う。インデックス型検索の詳細に関しては、非特許文献３に詳しいのでここでは説明を割愛する。入力されたインデックス型検索用検索式２０３を満たす文書を、文書インデックスＤＢ１０８を用いて検索する。検索した結果を文書ＩＤのリストとして検索結果１（２０７）に出力する。
【００２２】
次に、インデックス型検索で検索された検索結果１（２０７）を対象に、スキャン型検索２０６を行う。スキャン型検索の方法としては非特許文献１のＡＣ法、非特許文献２のＣＷ法などを用いることができる。スキャン型検索２０６では、検索結果１（２０７）の各文書ＩＤに相当する文書の本体を文書データＤＢ１０７から取得し、その文書本体に対して、スキャン型検索用検索式２０４を満たすかどうかを判定する。スキャン型検索用検索式２０４を満たす文書集合が最終的な検索結果である検索結果２（２０８）となる。
【００２３】
以下では、各データベース（文書データＤＢ１０７、文書インデックスＤＢ１０８）の詳細を説明した後、図２の検索式構築２０２の手順の詳細を説明する。
図４は、文書インデックスＤＢ１０８に格納されるテーブルの構成の一例を示す図である。文書インデックスＤＢ１０８にはタームテーブル４０とインデックステーブル４１の２種類のテーブルを格納する。
【００２４】
タームテーブル４０は、ターム４０１をターム番号４０２に変換するためのテーブルである。内部的にはハッシュ表などで実装する。タームとは検索に使われる最小単位の文字列のことである。本実施例では、文字２グラムをタームとして用いることにする。例えば、“検索処理”という文字列は、“検索”“索処”“処理”という３つの文字２グラムに分割され、タームとして登録されることになる。インデックステーブル４１は、各ターム４１１からそのタームを含む文書数４１２、実際の文書番号リスト４１３を検索するためのテーブルである。内部的には、配列等で実装する。
【００２５】
なお、ここでは文字２グラムをタームとして用いたが、その他にも、文字１グラムや文字３グラムなどをタームとして用いることも可能である。更には、カタカナ語のみ文字３グラムを使う等、字種別に使うタームの種類を区別することも可能である。一般に、文字ＮグラムのＮを大きくすれば検索ノイズが少なくなる。例えば、「本発明」を文字１グラムで表現すると、「本」「発」「明」となり、「本の発刊は明日だ」という文字列とマッチしてしまう。文字２グラムで表現すると「本発」「発明」となり、上記の文字列とはマッチしないが、「本発表では…の発明を説明する」とマッチしてしまう。文字３グラムにすれば、完全に「本発明」を含む文字列としかマッチしなくなる。一方、Ｎを大きくすると、インデックステーブル４１のサイズが大きくなるという欠点がある。文字３グラムを使うと、インデックステーブル４１が元の文字列の数倍の大きさになる場合もある。経験的には、検索ノイズ、インデックステーブルの大きさの観点から、文字２グラムがバランスの取れたタームであることが知られているので、本実施例でも文字２グラムをタームとして用いている。
【００２６】
図５は、文書データＤＢ１０７に格納されるテーブルの構成の一例を示す図である。文書データＤＢ１０７には、各文書の本体を検索するための文書データテーブル５０を格納する。文書データテーブル５０は、文書番号５０１からその文書のオフセット５０２と長さ５０３を取得するためのテーブルである。文書本体は、別途ディスク上もしくはメモリ上に配置されている。オフセット５０２は、その配置場所の先頭位置を表し、長さ５０３は、オフセットからの長さを表す。文書データテーブル５０は配列等により実装する。
【００２７】
図６は、検索式構築２０２の処理手順を示すフローチャートである。検索式構築２０２は、検索式構築部１０３で実行される。検索式構築２０２ではまず初期設定を行う（Ｓ６０１）。Ｑは検索式であり、例えば、
Ｑ＝（“文書”＋“画像”）＊“検索処理”
となる。ここで、“＋”はＯＲ検索を、“＊”はＡＮＤ検索を表す。検索式構築２０２の出力は、インデックス型検索用の検索式Ｑindexとスキャン型検索用の検索式Ｑscanである。それぞれ入力のＱを変形したものである。
【００２８】
まずは、スキャン型検索用検索式Ｑscanを構築する（Ｓ６０２）。本実施例では、スキャン型検索用には元の検索式Ｑを設定する。スキャン型検索の欠点を補うような検索式構築手順については、別の実施例として後で改めて説明する。
以降のＳ６０３からＳ６０７でインデックス型検索用の検索式Ｑindexを構築する。まずは、Ｑに含まれるキーワードの集合をＱｗとする（Ｓ６０３）。例の場合、
Ｑｗ＝｛“文書”，“画像”，“検索処理”｝
となる。
【００２９】
次に、Ｓ６０４において、Ｑｗのそれぞれのキーワードw_iを文字２グラムに分解してwb_iとする。また、分解した全２グラムの集合をWBとする。WB内では、重複は省く。例の場合、例えば“検索処理”というキーワードw_iに対するwb_iは、
wb_i＝｛“検索”，“索処”，“処理”｝
となる。またWBは、
WB＝｛“文書”，“画像”，“検索”，“索処”，“処理”｝
となる。以上は、各検索キーワードを文字２グラムに分割していることに相当する。
【００３０】
次に、検索式Ｑ中の各キーワードw_iを、対応する文字２グラム集合wb_iの各文字２グラムの積（ＡＮＤ）で置き換えた検索式をＱindex1とする（Ｓ６０５）。例では、
Ｑindex1＝（“文書”＋“画像”）＊（“検索”＊“索処”＊“処理”）
となる。基本的には、この検索式でインデックス型検索をすればよいのだが、既に説明したように、ヒット件数の多い文字２グラムの数が多くなると、インデックス型検索の速度が低下してしまう。
【００３１】
よって、Ｓ６０６において、検索式中の全ての文字２グラム集合WBの中から、実際にインデックス型検索を行う文字２グラムのみを選択してWB1とする。したがって、インデックス検索は行わない文字２グラムの集合はWB2＝WB−WB1となる。実際の選択処理を図７に示す。図７の説明は後述する。
【００３２】
WB1が決まったら、Ｑindex1中でWB2に属する文字２グラムを恒真値“Ｔ”に置き換えて最終的なＱindexとする。例の場合、後述する図７の処理により、
WB2＝｛“文書”，“処理”｝
となったとすると、
Ｑindex1＝（Ｔ＋“画像”）＊（“検索”＊“索処”＊Ｔ）
となる。実際にインデックス型検索では、恒真値“Ｔ”に対しては検索を行わない。インデックス型検索では、恒真値“Ｔ”は全件ヒットに等しい。更には、恒真値ＴとＯＲで結合された部分論理式も恒真であるから、その部分検索式に含まれる文字２グラムについても検索を行わないようにすることもできる。例えば、上記の例の場合（Ｔ＋“画像”）は恒に真であるため、“画像”に関する検索は行わなくても良いことになる。その結果、検索式は更にＴ＊（“検索”＊“索処”＊Ｔ）と簡略化できる。
【００３３】
図７は、検索式に含まれる文字２グラムの集合WBからインデックス型検索に使う文字２グラムの集合WB1を選択する処理手順である。まずは、Ｓ７０１で初期設定を行う。本処理は、Ｑindex1とWBが入力となり、WB1を出力する。また、検索速度を見積もるための定数値として、インデックスセル読み取り時間ＩＴ（セル数／秒）、検索対象文書の平均文書長ＤＬ（バイト数）、スキャン速度ＳＴ（バイト数／秒）を設定しておく。インデックスセル読み取り時間ＩＴは、インデックスの各セルを読み取る時間（秒）の平均値である。具体的には、文書インデックスＤＢ１０８において、ターム番号４１に対応する文書番号リスト４１３の各要素（文書番号）を読み取るための時間である。文書番号リスト４１３は通常圧縮されているため、圧縮の復号時間がＩＴのほとんどを占める。
【００３４】
次に、Ｓ７０２において、WBの各文字２グラムb_iに対して文書インデックスＤＢ１０８を引き、ヒット件数n_iを求めておく。インデックステーブル４１の文書数４１２がヒット件数に相当する。この処理は、文書番号リスト４１３にはアクセスしないため、処理時間は無視できるほど小さい。例の場合、ヒット件数が以下のようになったとする。
“文書“→１１２０
“画像”→５３１
“検索”→３６
“索処”→２１
“処理”→１６３９
【００３５】
次に、WBの各タームb_iに対して、b_iよりヒット件数の多いタームを全件ヒットとした場合の予測検索時間T_iを計算する（Ｓ７０３）。既に述べたように、全件ヒットとみなしたタームは、それに対するインデックス型検索を行わない。ヒット件数が大きいタームほど、それらを全件ヒットとみなしても実測とのずれが小さくなる。
予測検索時間T_iを計算するために、まずは、インデックスセルの読み取り数ＤＦを計算する（Ｓ７０４）。ＤＦは、b_iよりヒット件数が少ない（同数も含む）ターム及びb_i自身のヒット件数を足した数になる。
【００３６】
次に、スキャン型検索対象文書数の予測値ＤＮを推定する（Ｓ７０５）。スキャン型検索対象文書数は、インデックス型検索の結果の文書数と等しい。インデックス型検索の結果の文書数を推定するために、インデックス型検索の検索式Ｑindex1の各部分検索式において、以下の規則により検索結果数を予測する。まず、検索タームb_iとb_jがＡＮＤで結合されている場合は、それぞれのヒット件数n_iとn_jの小さい方を検索結果の予測数とする。また、ＯＲで結合されている場合は、それぞれのヒット件数の和を予測数とする。ただし、和が全文書数を超えた場合は全文書数を予測数とする。いずれの場合も、予測数は多めに見積もっており、予測数が実際のヒット件数を下回ることはない。上記の規則を用いて、検索式Ｑindex1で検索した場合の検索件数を予測する。ただし、b_iよりヒット件数が多いタームは全件ヒットとみなしているため、これらのヒット件数は全文書数となる点に注意されたい。
【００３７】
例えば上記の例において、“画像”よりヒット件数が多いターム（“文書”と“処理”）を全件ヒットとした場合のＤＮは、以下のようになる。全文書数は５０００と仮定する。
min｛５０００＋５３１，min｛１１２０，３６，５０００｝｝＝３６
ここで、“文書”と“処理”は全件ヒットと仮定したが、そもそものヒット件数が多いため、最終的なＤＮには影響を及ぼしていないことがわかる。
【００３８】
以上で計算した、インデックスセル読み取り数ＤＮと、スキャン型検索対象文書数の予測値ＤＮを用いて、以下の式より予測検索時間T_iを計算する（Ｓ７０６）。
T_i＝ＤＦ／ＩＴ＋（ＤＮ＊ＤＬ）／ＳＴ
これは、インデックス型検索の予測検索時間ＤＦ／ＩＴと、スキャン型検索の予測検索時間（ＤＮ＊ＤＬ）／ＳＴを足した値となっている。
【００３９】
以上で、WBの各タームb_iに対して、b_iよりヒット件数の多いタームを全件ヒットとみなした場合（検索しない場合）の予測検索時間T_iを推定した。よって、このT_iの最小値を与える設定で実際の検索も行えばよい。つまり、予測検索時間の最小値をあたえるタームをb_minとすると、b_minとb_minよりヒット件数が少ない（同数も含む）タームが実際にインデックス型検索を行う検索タームWB1となる（Ｓ７０７）。
【００４０】
ここまでの処理で、元の検索式からインデクス型検索用の検索式とスキャン型検索用の検索式が構築できた。後は、既に図２で説明したように、それぞれの検索式を用いて２つの検索を組み合わせればよい。本実施例により、予測検索時間が最小となるように、インデックス型検索の検索タームを選択することができる。
【００４１】
[実施例２]
実施例１では、インデックス型検索を行う検索タームWB1を同定する際に、各検索タームにつき、それよりもヒット件数が多い検索タームを全件ヒットとみなし、かつ、その場合のスキャン型検索対象文書数の予測値ＤＮを計算している（Ｓ７０５）。しかし、検索式が長くなった場合、ＤＮを検索タームの数だけ計算するのは、計算時間の点からあまり好ましくない。本実施例では、計算時間をあまり必要としない検索タームWB1の決定法を採用する。それ以外は、実施例１と同じである。
【００４２】
図８は、本実施例における、インデックス型検索用２グラムの同定処理手順である。実施例１では図７の処理に相当する。
【００４３】
まず、Ｓ８０１で初期設定を行う。Ｓ７０１と異なる点は、パラメータとして目標検索時間Ｔmaxをあらかじめ与えておく点である。本実施例では、検索時間がＴmaxにほぼ収まるように、検索タームの選定を行う。その際に近似を行うことで計算時間を節約する。
【００４４】
Ｓ８０２では、検索タームの集合WBの各要素b_iに対して、文書インデックスＤＢ１０８からヒット件数n_iを取得し、WBをヒット件数の昇順にソートする。ソートした結果をWBsortとする。
【００４５】
次に、Ｓ７０５と同様の規則を用いて、スキャン型検索対象文書数ＤＮを計算する（Ｓ８０３）。ただし、ここでは、どの検索タームに対しても全件ヒットを仮定せず、Ｓ８０２で設定した本来のヒット件数を使う。つまり、本来は検索ターム毎にＤＮを計算しなおさねばならないのだが、ここでは、全件ヒットを全く仮定しない場合でのＤＮで全ての場合を近似することになる。
【００４６】
次に、与えられた検索時間Ｔmaxに検索時間が収まるようなインデックスセル読み取り数の閾値ＤＦＴを、以下の式を解くことにより求める（Ｓ８０４）。
Ｔmax＝ＤＦＴ／ＩＴ＋（ＤＮ＊ＤＬ）／ＳＴ
【００４７】
最後に、WBsortの先頭要素から順にヒット件数の累積和を計算し、累積和がＤＦＴを超えた要素より前の要素（超えた要素自体は含まない）を実際にインデックス型検索する検索タームの集合WB1の要素とする。
本実施例により、検索時間が最悪でもほぼＴmaxに収まるような検索式の構築が可能になる。
【００４８】
[実施例３]
実施例１、実施例２では、いずれもスキャン型検索の検索式として元の検索式をそのまま用いている。スキャン型検索は、検索式によらず検索速度が一定であると言われているが、既に説明したように、読み飛ばしを行うＣＷ法は、検索速度が最短キーワードの長さに大きく依存する。検索式中に一つでも短いキーワードがあれば、そのキーワードの影響を受けて、スキャン中に読み飛ばせる文字数が小さくなり、検索時間も増大してしまう。
【００４９】
本実施例では、インデックス型検索とスキャン型検索を更に密に連携させることで、このようなスキャン型検索の欠点を補う方法を説明する。インデックス型検索において、インデックスに登録するタームとして文字２グラムを用いる場合、１文字もしくは２文字からなるキーワードは、インデックス型検索のみで、漏れも誤り無い検索結果を返すことが出来る。よって、このような短いキーワードに対しては、インデックス型検索の検索結果を利用すれば、スキャン型検索を行う必要がない。
【００５０】
そのためには、全体の処理フローを図２の形から図３の形に変更する必要がある。図３は、インデックス型検索３０６の内部処理としてスキャン型検索３０７が呼ばれている点が図２とは異なる。
【００５１】
インデックス型検索３０６では、各検索タームに対して、文書インデックスＤＢ１０８から文書番号リスト４１３を取得する。文書番号リスト４１３は、文書番号の昇順でソートされているために、全検索タームに対する複数の文書リストは、文書番号を付き合わせながら同時に進めていくことができる。詳細は、非特許文献３を参照されたい。
【００５２】
つまり、検索結果は、文書番号が若い方から順々に出力される。同時に、それぞれの検索結果が出力された時点では、その文書が各検索タームを含むか含まないかが判明している。この直後に、スキャン型検索３０７を呼べば、図２と同様の処理が行える。図２は一度インデックス型検索を完結させてから、検索結果の文書集合に対してまとめてスキャン型検索を行うのに対し、図３では、インデックス型検索でヒットしたそれぞれの文書に対して、その都度スキャン型検索を行っていることに相当する。
【００５３】
図３の方法の場合、ヒット文書内の検索タームの有無の情報を、スキャン型検索３０７に容易に渡せるという利点がある。また、本実施例の場合、インデックス型検索の検索タームは文字２グラムであるため、１文字もしくは２文字から成る検索キーワードは、インデックス型検索のみで検索が完結しており、スキャン型検索で実際の有無を確かめる必要がない。よって、スキャン型検索３０７を行う前に、このような検索キーワードに関しては、インデックス型検索での結果を使うことで、スキャン型検索を行う検索キーワードの数を減らすことができる。特に、今の場合は、スキャン型検索で省ける検索キーワードは１文字もしくは２文字の短いキーワードであるために、スキャン型検索では短いキーワードを検索する必要がなくなり、スキャン型検索の速度低下の原因を取り除くことができる。
【００５４】
ただし、この場合、インデックス型検索用検索式構築３０２において、１文字もしくは２文字の短いキーワードが必ずインデックス型検索で検索されるように、あらかじめインデックス型検索用の検索式を構築しておく必要がある。そのためには、図７（実施例１に相当）及び図８（実施例２に相当）のWB1（インデックス型検索を行う２グラムの集合）に、１文字もしくは２文字のキーワードから派生した２グラムを強制的に含めておく必要がある。
【００５５】
具体的には、図７の処理に関しては、Ｓ７０１の初期設定において、WBから１文字もしくは２文字キーワード由来の２グラムを抜いておき、抜いておいた２グラムをＳ７０７においてWB1に含めればよい。図８の処理に関しても同様に、Ｓ８０１の初期設定において、WBから１文字もしくは２文字キーワード由来の２グラムを抜いておき、抜いておいた２グラムをＳ８０５においてWB1に含めればよい。Ｓ７０５、Ｓ８０３においては、抜いておいた２グラムに関しては別途ヒット件数を取得し、そのヒット件数を用いて全体のヒット件数を予測する。以上の処理により、１文字もしくは２文字から成るキーワードに由来する２グラムは必ずインデックス型検索で検索されることになる。
【００５６】
これらの処理以外は、図７もしくは図８の処理を行うため、インデックス型検索の欠点を補うような検索式は本実施例でも実現されている点に注意されたい。
【００５７】
次に、スキャン型検索用検索式構築３０３の具体的な処理手順を図９に示す。上で説明したように、この処理は、インデックス型検索３０６からヒット文書毎に呼ばれ、呼ばれた時点では、インデックス型検索された検索タームの有無もわかっている。よって、Ｓ９０１では、元の検索式をＱ、検索対象文書（ヒット文書）をｄ、それのみがキーワードである２グラムの集合（実際には１グラムも含む）をWB0とすると、WB0に対するヒット文書ｄの検索結果の集合RWB0が既にわかっている。RWB0の要素は対応するWB0の要素がｄに出現したかしないかの真偽値である。
【００５８】
よって、Ｓ９０２で、WB0の各キーワードに対応するＱ中のキーワードを、RWB0内の対応する真偽値におきかえれば、スキャン型検索用の検索式Ｑscanとなる。あとは、ｄに対して通常のスキャン型検索３０７を行えばよい。
【００５９】
以上、本発明により、インデックス型検索の欠点とスキャン型検索の欠点双方を補うようなハイブリッド型検索を実現することができる。
【図面の簡単な説明】
【００６０】
【図１】本発明による文書検索装置全体のブロック図である。
【図２】本発明の実施例１，２の検索サーバで実行される処理のフロー図である。
【図３】本発明の実施例３の検索サーバで実行される処理のフロー図である。
【図４】文書インデックスＤＢに含まれるタームテーブルとインデックステーブルの一例を示す図である。
【図５】文書データＤＢに含まれる文書データテーブルの一例を示す図である。
【図６】本発明による検索式構築のフローチャートである。
【図７】本発明の実施例１，３のインデックス型検索用２グラムの同定のフローチャートである。
【図８】本発明の実施例２，３のインデックス型検索用２グラムの同定のフローチャートである。
【図９】本発明の実施例３のスキャン型検索用検索式構築のフローチャートである。
【符号の説明】
【００６１】
１０  検索サーバ
１０１  ＣＰＵ
１０２  メモリ
１０３  検索式構築部
１０４  インデックス型検索部
１０５  スキャン型検索部
１０６  データ通信部
１０７  文書データＤＢ
１０８  文書インデックスＤＢ
１１  ネットワーク
１２  検索クライアント
【図１】
2008305175.tif 000003
【図２】
2008305175.tif 000004
【図３】
2008305175.tif 000005
【図４】
2008305175.tif 000006
【図５】
2008305175.tif 000007
【図６】
2008305175.tif 000008
【図７】
2008305175.tif 000009
【図８】
2008305175.tif 000010
【図９】
2008305175.tif 000011