(57)【要約】【課題】全文検索装置において読み込むＮ−ｇｒａｍインデクスを低減して検索時間短縮する。【解決手段】文書を登録用部分文字列に分割し、各文書中における文字の位置を示す文字位置情報を記憶した文字位置リストと、文字位置リストにおける文字位置情報の開始位置と文書ＩＤとを対応付けて記憶した文書ＩＤリストとを登録し、検索タームを検索用部分文字列に分割し、検索用部分文字列に対応する文書ＩＤリストを互いに比較して共通して含まれる文書ＩＤを全て抽出し、検索用部分文字列ごとに文書ＩＤリストから文字位置情報の開始位置を取得することにより文字位置リストから該当する文字位置情報のみをそれぞれ取得し、文書ＩＤの各々について、分割前の検索タームと同じ順番で各検索用部分文字列が隣接して出現する場合は当該文書ＩＤの文書に当該検索タームが含まれると判断する。【選択図】図１
2014186482.tif 000002
【特許請求の範囲】
【請求項１】
複数の文書の各々を所定の文字数の登録用部分文字列に分割し、前記登録用部分文字列ごとに、当該登録用部分文字列の各文書中における文字の位置を示す文字位置情報を記憶した文字位置リストと、前記文字位置リストにおける前記文字位置情報の開始位置と各文書の文書ＩＤとを対応付けて記憶した文書ＩＤリストとを登録する手段と、
取得した検索タームを、前記登録用部分文字列の文字数と同数の検索用部分文字列に分割し、分割した前記検索用部分文字列の各々と同じ前記登録用部分文字列ごとに記憶されている前記文書ＩＤリストを互いに比較することにより、比較した全ての前記文書ＩＤリストに共通して含まれる文書ＩＤを全て抽出する手段と、
前記検索用部分文字列ごとに前記文書ＩＤリストから、抽出された共通する文書ＩＤの各々に対応付けられた前記文字位置情報の開始位置をそれぞれ取得する手段と、
取得した前記文字位置情報の開始位置に基づいて、前記検索用部分文字列ごとに前記文字位置リストから、該当する文字位置情報のみをそれぞれ取得する手段と、
抽出された共通する文書ＩＤの各々について、前記検索用部分文字列ごとに取得した前記文字位置情報に基づいて、分割前の検索タームと同じ順番で各検索用部分文字列が隣接して出現するか否かを判断し、各検索用部分文字列が隣接して出現する場合は当該文書ＩＤの文書に当該検索タームが含まれると判断する手段と、を有する
全文検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、予め登録した文書群から、指定した文字列を含む文書を検索する全文検索装置に関するものである。
【背景技術】
【０００２】
全文検索装置が大規模な文書データベースから指定された検索文字列（以下、検索タームと呼ぶ）が含まれる文書を高速に探し出す方式としては、登録されている文書を走査して、予め各文書に出現する文字列のインデクスを作成しておく方式がある。
【０００３】
インデクスの方式としては非特許文献１に記載されている、文字種に応じて１文字又は連接２文字(以下、「Ｎ−ｇｒａｍターム」と呼ぶ)の出現する文書ＩＤと出現位置をインデクス（以下、「Ｎ−ｇｒａｍインデクス」と呼ぶ）として、検索ターム中の位置関係とＮ−ｇｒａｍインデクス中の位置関係が等しいるかどうかを判定(以下、「隣接判定」と呼ぶ)する方式が開示されている。
【０００４】
Ｎ−ｇｒａｍインデクスは文書群に対して数倍のデータサイズになるため、通常はＮ−ｇｒａｍインデクスをハードディスク上に配置する。検索を行う時は、検索タームをＮ−ｇｒａｍタームに分割して、Ｎ−ｇｒａｍタームごとのＮ−ｇｒａｍインデクスをハードディスクから読み込んで隣接判定を行う。また複雑な検索が行えるようにする為に、Ｎ−ｇｒａｍインデクスに情報を増やすことがある。特許文献１ではＮ−ｇｒａｍインデクスに文字が出現する構造の情報を追加する方式が開示されている。特許文献１ではＸＭＬ文書に対して構造情報を意識した検索を実現している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１０８１９１号公報
【特許文献２】特開平８−１９４７１８号公報
【非特許文献】
【０００６】
【非特許文献１】”日本語文書用高速全文検索の一手法”（ 電子情報通信学会論文誌  Ｄ−１  Ｖｏｌ．Ｊ７５−Ｄ−１  Ｎｏ．９  ８３６〜８４６頁１９９２年９ 月)
【発明の概要】
【発明が解決しようとする課題】
【０００７】
文書群に頻出する文字(以下、「頻出文字」と呼ぶ)は、その文字のＮ−ｇｒａｍインデクスのデータサイズが大きくなってしまうので、検索タームの中に頻出文字が含まれていると大きな頻出文字のＮ−ｇｒａｍインデクスをハードディスクから読み込む必要があるので、検索を行うのに時間がかかる。また、公知例１のように、複雑な検索を行うためにＮ−ｇｒａｍインデクスに情報を増やすとその分ハードディスクから読み込むデータ量が増えるので同様に検索を行うのに時間がかかる。
【０００８】
この検索に時間がかかるという問題に対しては、特許文献２で、頻出文字に１文字を追加したデータサイズが小さいＮ−ｇｒａｍインデクスを作成して、検索を行う時には小さいＮ−ｇｒａｍインデクスをハードディスクから読み込むことで検索を行う時間を短くする方式が開示されている。
【０００９】
特許文献２では、検索タームに指定されている頻出文字に続く１文字を利用して検索時に読み込むＮ−ｇｒａｍインデクスのサイズを小さくして検索を行う時間を短くしているが、頻出文字に続く１文字にしか有効ではなく、検索タームの中の頻出文字が最後に出現する場合や、頻出単語だけの場合は有効ではない。
【００１０】
また、文書群の中で、頻出文字の次に出現する文字の種類だけＮ−ｇｒａｍインデクスを作成する必要があるので、Ｎ−ｇｒａｍインデクス全体のサイズが大きくなり作成にも時間がかかる。
【００１１】
本発明の目的は、Ｎ−ｇｒａｍインデクスを文書ＩＤと文字位置情報の２つに分けて、検索タームに指定された頻出文字以外の文字を利用して、ハードディスクから読み込む頻出文字のＮ−ｇｒａｍインデクスを少なくすることによって、検索を行う時間を短くする全文検索装置を提供することにある。
【課題を解決するための手段】
【００１２】
上記の目的を達成するべく本発明は、以下の構成を提供する。
本発明による全文検索装置の態様は、複数の文書の各々を所定の文字数の登録用部分文字列に分割し、前記登録用部分文字列ごとに、当該登録用部分文字列の各文書中における文字の位置を示す文字位置情報を記憶した文字位置リストと、前記文字位置リストにおける前記文字位置情報の開始位置と各文書の文書ＩＤとを対応付けて記憶した文書ＩＤリストとを登録する手段と、
取得した検索タームを、前記登録用部分文字列の文字数と同数の検索用部分文字列に分割し、分割した前記検索用部分文字列の各々と同じ前記登録用部分文字列ごとに記憶されている前記文書ＩＤリストを互いに比較することにより、比較した全ての前記文書ＩＤリストに共通して含まれる文書ＩＤを全て抽出する手段と、
前記検索用部分文字列ごとに前記文書ＩＤリストから、抽出された共通する文書ＩＤの各々に対応付けられた前記文字位置情報の開始位置をそれぞれ取得する手段と、
取得した前記文字位置情報の開始位置に基づいて、前記検索用部分文字列ごとに前記文字位置リストから、該当する文字位置情報のみをそれぞれ取得する手段と、
抽出された共通する文書ＩＤの各々について、前記検索用部分文字列ごとに取得した前記文字位置情報に基づいて、分割前の検索タームと同じ順番で各検索用部分文字列が隣接して出現するか否かを判断し、各検索用部分文字列が隣接して出現する場合は当該文書ＩＤの文書に当該検索タームが含まれると判断する手段と、を有する。
【発明の効果】
【００１３】
本発明の全文検索装置によれば、次のような効果がある。ハードディスクから読み込むＮ−ｇｒａｍインデクスを最小限に抑えることで、検索処理の高速化を図ることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明を適用した一例におけるシステム構成を示す図である。
【図２】本発明を適用した一例におけるＮ−ｇｒａｍインデクスのデータ構造を示した図である。
【図３】本発明を適用した一例における文書の登録処理を示した図である。
【図４】本発明を適用した一例における文書の検索処理を示した図である。
【図５】本発明を適用した一例における文書の検索処理の具体的なデータの流れを示した図である。
【発明を実施するための形態】
【００１５】
以下、本発明の一例を示した図面を参照して本発明の実施の形態を説明する。
図１は本発明における全文検索装置を備えたシステム全体の構成図である。
110は検索クライアント、120はＬＡＮ等の通信回線、130は検索サーバを示し、検索クライアント110と検索サーバ130は、通信回線120で接続されている。
【００１６】
検索サーバ130は、検索対象となる複数の文書の登録処理及び文書の検索処理を行なう全文検索装置131と、検索時に使用するＲＡＭ等の検索用メモリ132と、登録した複数の文書から作成したＮ−ｇｒａｍインデクス136を登録する補助記憶装置の典型例であるハードディスク133とを有し、ハードディスク133に登録されるＮ−ｇｒａｍインデクスは、文書ＩＤリスト134と、文字位置リスト135とから構成されている。検索サーバ130は、適宜のコンピュータであり、所定のプログラムを導入されており、ＣＰＵがメモリに所定のプログラムを読み込み実行することにより、全文検索装置131として機能する。
なお、以下の図面の説明においては、図１中の符号を参照する場合がある。
【００１７】
図２は、図１のハードディスク133に登録するＮ−ｇｒａｍインデクスのデータ構造例を示す図である。図に示すとおり、Ｎ−ｇｒａｍインデクス136は、登録する複数の文書の各々を、所定の文字数ごとに分割した登録用部分文字列であるＮ−ｇｒａｍターム210、211と、Ｎ−ｇｒａｍターム210、211ごとに作成された文書ＩＤリスト134A、134B及び文字位置リスト135A、135Bとから構成されている。図２では、文書を１文字ごとに分割したＮ−ｇｒａｍタームの例であり、分割したＮ−ｇｒａｍタームのうち代表として２つのＮ−ｇｒａｍターム”あ”210及び”め”211のみを示している。
【００１８】
Ｎ−ｇｒａｍターム210、211ごとの文書ＩＤリスト134A、134Bには、複数の文書の各々の文書ＩＤと、文字位置リスト135A、135B上での文字位置情報の開始位置を示すオフセットとを登録する。文書ＩＤリスト134A、134B上では、文書ＩＤが昇順となるように登録する。
【００１９】
Ｎ−ｇｒａｍターム210、211ごとの文字位置リスト135A、135Bには、複数の文書の各々の中での当該Ｎ−ｇｒａｍターム210、211の出現する数を示す出現個数と、当該文書中における当該Ｎ−ｇｒａｍターム210、211の文字の位置を示す文字位置（出現個数と同数）とから構成される文字位置情報を登録する。文字位置リスト135A、135Bにおけるこの文字位置情報の開始位置が、文書ＩＤリスト134A、134Bにおいてオフセットとして登録される。文字位置リスト135A、135B上では、文書ＩＤの昇順に、かつ、文字位置が昇順となるように登録する。
【００２０】
ここで例えば、文書ＩＤ”001”である文書”あめがふる”が登録されている場合、１文字目のＮ−ｇｒａｍターム”あ”210に対応する文書ＩＤリスト134Aには、文書ＩＤ”001”と文字位置リスト135A上のオフセットである”1”が登録されるとともに、文字位置リスト135Aの当該オフセット１番目には、文書ＩＤ”001”の文書中の”あ”の出現個数”3”210aと文字位置”1”、”3”、”12”210bとが登録されている。また、文書ＩＤリスト134Aには、文書ＩＤ”900”と文字位置リスト135A上のオフセットである”4000”が登録されるとともに、文字位置リスト135Aの当該オフセット4000番目には、文書ＩＤ”900”の文書中の”あ”の出現個数”1”210cと文字位置”2”210dとが登録されている。
【００２１】
さらに例えば、文書ＩＤ”001”である文書”あめがふる”が登録されている場合、２文字目のＮ−ｇｒａｍターム”め”211に対応する文書ＩＤリスト134Bには、文書ＩＤ”001”と文字位置リスト135B上のオフセットである”1”が登録されるとともに、文字位置リスト135Bの当該オフセット１番目には、文書ＩＤ”001”の文書中の”め”の出現個数”1”211aと文字位置”2”211bとが登録されている。また、文書ＩＤリスト134Bには、文書ＩＤ”900”と文字位置リスト135b上のオフセットである”10000”が登録されるとともに、文字位置リスト135Bの当該オフセット10000番目には、文書ＩＤ”900”の文書中の”め”の出現個数”1”211cと文字位置”3”211dとが登録されている。
【００２２】
図３は、図１に示した全文検索装置131における登録処理を示すフローチャートである。
文書の登録処理は、検索クライアント110から検索サーバ130に登録処理の要求と登録する文書群を送信することで開始する。（ステップ310）検索サーバ130は、登録対象の文書ごとに文書ＩＤを採番する。  
【００２３】
検索サーバ130は、検索クライアント110から送られて来た登録対象の文書を、１文字又は２文字の登録用部分文字列であるＮ−ｇｒａｍタームに全て分割する。分割するときは、Ｎ−ｇｒａｍタームの文字と、当該Ｎ−ｇｒａｍタームの文字の文書上での文字位置とをペアで記憶する。（ステップ320）
【００２４】
次に、ステップ310で作成したＮ−ｇｒａｍタームと文字位置群を、同じ文字のＮ−ｇｒａｍタームごとに分類する。（ステップ330）
分類したＮ−ｇｒａｍタームごとに、ハードディスク133上にある文字位置リスト135の末尾に記憶してある文字位置を追加する。このとき、文字位置は昇順で追加する。文字位置を追加するときは、Ｎ−ｇｒａｍタームごとに文字位置追加前の末尾の位置をオフセットとして記憶しておく（ステップ340）
【００２５】
次に、文書ＩＤリスト134の中でステップ340で文字位置リスト135の追加を行ったＮ−ｇｒａｍタームと同じＮ−ｇｒａｍタームの文書ＩＤリスト134の末尾に、文書ＩＤとステップ340で記憶しておいたオフセットを追加する。このとき、文書ＩＤは検索サーバ130の内部で採番したＩＤを使用して、文書ＩＤリスト134の中で文書ＩＤが必ず昇順に並ぶようにする。（ステップ350）
【００２６】
登録対象の複数の文書に出現する全てのＮ−ｇｒａｍタームについて文書ＩＤをＮ−ｇｒａｍインデクスに追加したら登録処理は完了となる。（ステップ360）
【００２７】
図４は、全文検索装置において３文字以上の検索用文字列を検索タームとして指定したときの検索（以下、「文字列検索」と呼ぶ）の検索処理を示すフローチャートである。図４を用いて文字列検索処理について説明する。
【００２８】
文字列検索は、検索クライアント110から検索タームと検索実行の要求が検索サーバ130に送信されることで開始する。（ステップ410）
【００２９】
検索サーバ130は、検索クライアント110から受け取った検索タームを１文字又は２文字の検索用部分文字列であるＮ−ｇｒａｍタームに分割する。（ステップ420）ここで分割する検索用部分文字列の文字数は、図３に示した登録時のステップ320で分割する登録用部分文字列の文字数と同じとする。
【００３０】
次に、複数のＮ−ｇｒａｍタームから１つのＮ−ｇｒａｍタームを選択して、ハードディスク133から検索用メモリ132に当該Ｎ−ｇｒａｍタームの文書ＩＤリスト（以下、「基準文書ＩＤリスト」と呼ぶ）を読み込む。（ステップ430）
【００３１】
続いて、複数のＮ−ｇｒａｍタームから別のＮ−ｇｒａｍタームを選択して、ハードディスク133から検索用メモリ132に文書ＩＤリスト（以下、「比較文書ＩＤリスト」と呼ぶ）を読み込む。（ステップ440）
【００３２】
基準文書ＩＤリストに出現し、比較文書ＩＤリストに出現しない文書ＩＤは文字位置を比較しなくてもステップ410で指定された検索タームを含まないことが確定するので、基準文書ＩＤリストと比較文書ＩＤリストの両方に出現する文書ＩＤだけが残るように、文書ＩＤを絞り込む。絞り込んだ結果を新たな基準文書ＩＤリストとして検索メモリ上に配置する。（ステップ450）
【００３３】
まだ比較していないＮ−ｇｒａｍタームが残っている場合は、ステップ440に戻って次の比較文書ＩＤリストを読み込み、新たな基準文書ＩＤリストと比較することによりさらに文書ＩＤを絞り込む。比較するＮ−ｇｒａｍタームが残っていない場合は、ステップ470に進む。（ステップ460）このようにして最終的に得られた基準文書ＩＤリストには、検索用の複数のＮ−ｇｒａｍタームに対応する複数の文書ＩＤリストの各々の中で共通する文書ＩＤのみが全て含まれている。
【００３４】
メモリ上にある基準文書ＩＤリストに出現する文書ＩＤについて、それぞれのＮ−ｇｒａｍタームの文字位置情報を、ハードディスク133の文字位置リスト135から検索用メモリ132に読み込む。（ステップ470）このとき、基準文書ＩＤリストは、ステップ340で追加した文字位置情報の開始位置のオフセットを持っているので、オフセットに基づいてヒットする可能性のある文書の文字位置情報だけをハードディスク133から読み込むことができる。文字位置リスト135は、文書ＩＤリスト134と比較すると、データサイズの比率が”１：Ｎ−ｇｒａｍタームの文書内平均出現個数”となるので、データサイズが大きい文字位置情報のハードディスク133からの読み込みを従来よりも減らすことで、検索処理の高速化を図ることができる。
【００３５】
ステップ470で読み込んだ文字位置情報を参照して、各Ｎ−ｇｒａｍタームが、分割前の検索タームと同じ順番で隣接して出現するかどうかを文書ＩＤごとにチェック（以下、「隣接照合」と呼ぶ）して、同じ順番で隣接して出現するなら、その文書ＩＤは検索ヒットしたと記憶する。（ステップ480）すなわちその文書ＩＤの文書に検索タームが含まれると判断される。
【００３６】
基準文書ＩＤリストの文書ＩＤ全てでステップ480の隣接照合が終了したら、ヒットした文書の一覧を検索結果として検索クライアント110に返して検索処理は完了となる。（ステップ490）
【００３７】
上述した図４の文字列検索処理を、上述した図２のＮ−ｇｒａｍインデクスのデータ構造と図５の検索処理の具体例を用いて説明する。
【００３８】
この例は、複数の文書を登録したＮ−ｇｒａｍインデクスが、上述した図２の状態のときに、検索タームを”あめ”510として検索を行う例である。
【００３９】
まず、検索クライアント110から入力された“あめ”510を、１文字のＮ−ｇｒａｍターム“あ”と”め”520に分解する。（ステップ410、ステップ420）
【００４０】
次に、一つ目のＮ−ｇｒａｍタームとして“あ”を選択して、“あ”の文書ＩＤリスト134Aをハードディスク133から検索用メモリ132に基準文書ＩＤリストとして読み込む。検索用メモリ132上の基準文書ＩＤリスト531が、読み込んだ“あ”の文書ＩＤリスト134Aである。（ステップ430）
【００４１】
次に、残りのＮ−ｇｒａｍタームとして“め”を選択して、“め”の文書ＩＤリスト134Bをハードディスク133から検索用メモリ132に比較文書ＩＤリストとして読み込む。メモリ530上の比較文書ＩＤリスト532が読み込んだ“め”の文書ＩＤリスト134Bである。（ステップ440）
【００４２】
次に、検索用メモリ132上の基準文書ＩＤリスト531と比較文書ＩＤリスト532を比較して、両方に出現する文書ＩＤ001と900で新たな基準文書ＩＤリスト533を作成する。なお、この例では文書ＩＤリスト531と532の省略部分に同じ文書ＩＤは出現しないものとする。（ステップ450）
【００４３】
ここで、未だ文書ＩＤリストを読み込んでいないＮ−ｇｒａｍタームは存在しない。新たな基準文書ＩＤリスト533には、検索用のＮ−ｇｒａｍターム”あ”と”め”に対応する元の２つの文書ＩＤリスト134A、134Bの中の共通する文書ＩＤのみが含まれている。続いて、新たな基準文書ＩＤリスト533にある文書ＩＤと、文字位置リスト上のオフセットの情報すなわち文字位置情報とを用いて、図２の“あ”と“め”の各々の文字位置リスト135Aと135Bから文書ＩＤ”009”と”900”の文字位置情報のみを、ハードディスク133から検索用メモリ132に読み込む。読み込んだＮ−ｇｒａｍターム“あ”の文字位置が文字位置リスト534、“め”の文字位置が文字位置リスト535である。（ステップ460、ステップ470）ここで、図２の文字位置リスト135Aと135Bの全体では無く、一部分だけハードディスク133から読み込むことができているので、従来技術に比べて読み込むデータ量が少なく、検索処理の高速化を図ることができる。
【００４４】
次に、文字位置リスト534と535を見ると文書ＩＤ001の１文字目210bに“あ”、２文字目211bに“め”が出現していることが分かるので、文書ＩＤ001には検索条件“あめ”510を含んでいることが分かる。同様に文書ＩＤ900は、２文字目210dに“あ”、３文字目211dに“め”が出現しているので、文書ＩＤ900も検索条件“あめ”510を含んでいることが分かる。（ステップ480）
【００４５】
最後に、検索結果として文書ＩＤ001と900を検索クライアント110に返して検索処理を終了する（ステップ490）
【符号の説明】
【００４６】
110：検索クライアント
120：通信回線
130：検索サーバ
131：全文検索装置
132：検索用メモリ
133：ハードディスク
134：文書ＩＤリスト
135：文字位置リスト
136：Ｎ−ｇｒａｍインデクス
210：登録用のＮ−ｇｒａｍターム“あ”
211：登録用のＮ−ｇｒａｍターム“い”
134A：“あ”の文書ＩＤリスト
134B：“め”の文書ＩＤリスト
135A：“あ”の文字位置リスト
135B：“め”の文字位置リスト
510：検索ターム
520：検索タームを分割した検索用のＮ−ｇｒａｍターム
531：“あ”の文書ＩＤリスト
532：“め”の文書ＩＤリスト
533：基準文書ＩＤリスト
534：“あ”の文字位置リスト
535：“め”の文字位置リスト
【図１】
2014186482.tif 000003
【図２】
2014186482.tif 000004
【図３】
2014186482.tif 000005
【図４】
2014186482.tif 000006
【図５】
2014186482.tif 000007