(57)【要約】【課題】任意のコード列の検索を行うことができ、従来よりも短時間で作成することのできる索引のデータ構造を求め、それを用いたコード列検索手法を提供する。【解決手段】検索対象のコード列を１コードずつ重複させて複数ブロックに分割し、分割されたコード列ブロックに対してコード毎のコードＩＤの範囲を格納したコード別ＩＤ範囲表と各コードＩＤの次に位置する次コードＩＤを格納したＩＤ関係表を作成し、コード別ＩＤ範囲表から検索コード列を構成するコードのコードＩＤの範囲を読み出し、検索コード列の先頭コードのコードＩＤ範囲に含まれるコードＩＤに対応して格納された次コードＩＤをＩＤ関係表から読み出し、該次コードに対応して格納された次コードＩＤを順次ＩＤ関係表から読み出すとともに、ＩＤ関係表から読み出した次コードＩＤがコード別ＩＤ範囲読出表から読み出したコードＩＤの範囲に含まれるか照合する。【選択図】図３Ａ
2010231675.tif 000002
【特許請求の範囲】
【請求項１】
検索対象である検索対象コード列を検索コード列により検索するコード列検索装置において、
前記検索対象コード列を複数に分割した部分コード列であるコード列ブロックであって、該コード列ブロックの末尾のコードと該コード列ブロックの次に位置するコード列ブロックの先頭のコードとを重複させて前記検索対象コード列を複数に分割したコード列ブロック毎に設けられた、
前記コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤの範囲であるコードＩＤ範囲を同一種別のコード毎に格納したコード別ＩＤ範囲表と、
前記コードＩＤに対応して、前記コード列ブロックにおいて該コードＩＤに係るコードの次に位置するコードのコードＩＤである次コードＩＤを格納するとともに、前記コードＩＤに係るコードが前記コード列ブロックの末尾に位置する場合は前記次コードＩＤとして前記コード列ブロックの先頭のコードのコードＩＤを格納するＩＤ関係表と、
前記コード列ブロック毎に設けられたコード別ＩＤ範囲表とＩＤ関係表を参照して前記検索コード列による検索を実行する検索実行部と、
前記コード列ブロック毎に該コード列ブロックの先頭のコードのコードＩＤである先頭コードＩＤを格納した索引データ管理表と、
前記検索実行部による検索の実行を管理する検索管理部と、
を備え、
前記検索実行部は、
前記検索コード列を読み出す検索コード列読出手段と、
指定されたコード列ブロックに対応する前記コード別ＩＤ範囲表から、前記検索コード列読出手段により読み出された検索コード列の先頭のコードあるいは２番目のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出すコード別ＩＤ範囲読出手段と、
前記コード別ＩＤ範囲読出手段により読み出された前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれるコードＩＤあるいは前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出し、以後、読み出された次コードＩＤに対応して格納された次コードＩＤを順次前記ＩＤ関係表から読み出すとともに、該次コードＩＤが当該コード列ブロックの前記先頭コードＩＤと等しいか判定するＩＤ関係読出手段と、
前記ＩＤ関係読出手段により読み出された次コードＩＤが当該コード列ブロックの先頭のコードのコードＩＤと等しくないとき、該次コードＩＤが前記コード別ＩＤ範囲読出手段により読み出されたコードＩＤの範囲に含まれるか照合するコードＩＤ照合手段を備え、
前記検索管理部は、
前記検索実行部に先頭のコード列ブロックから前記コード列ブロックを順次指定するとともに、前記ＩＤ関係読出手段が、前記読み出した次コードＩＤが前記コード列ブロックの先頭のコードのコードＩＤと等しいと判定すると、前記コード列ブロックの次に位置するコード列ブロックを前記検索実行部に指定するものであり、
前記検索管理部が前記コード列ブロックを順次指定すると、
前記コード別ＩＤ範囲読出手段は、前記検索コード列の先頭のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出し、
前記ＩＤ関係読出手段は、最初に、前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれるコードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出し、
前記検索管理部が前記コード列ブロックを次に位置するコード列ブロックとして指定すると、
前記コード別ＩＤ範囲読出手段は、前記検索コード列の２番目のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出し、
前記ＩＤ関係読出手段は、最初に、前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出す、
ことを特徴とするコード列検索装置。
【請求項２】
請求項１に記載のコード列検索装置において、
前記コードＩＤ照合手段は、前記コード別ＩＤ範囲読出手段により読み出された、前記検索コード列の先頭のコードのコード種別のコードＩＤ範囲に含まれる検索コード列の先頭のコードのコードＩＤあるいは前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤを第１コードＩＤとしたとき該第１コードＩＤに対応して前記ＩＤ関係表に格納された前記次コードＩＤが、前記検索対象コード列において前記第１のコードの次に位置するコードである第２のコードの種別のコードＩＤ範囲に含まれるか照合し、以後、前記第１のコードと第２のコードの前記検索コード列における位置が前記コード別ＩＤ範囲読出手段及びＩＤ関係読出手段の読出動作により更新されると、該位置の更新された第１のコードのコードＩＤに対応して格納された前記次コードＩＤが、該位置の更新された第２のコードの種別の前記コードＩＤ範囲に含まれるかを照合するものである、
ことを特徴とするコード列検索装置。
【請求項３】
請求項２に記載のコード列検索装置において、
前記ＩＤ関係表は、前記コードＩＤに対応して、前記検索対象コード列において該コードＩＤに係るコードの位置を示すコード位置を格納しており、
前記コードＩＤ照合手段は、前記ＩＤ関係読出手段により読み出された次コードＩＤが前記コード別ＩＤ範囲読出手段により読み出されたコードＩＤの範囲に含まれるかの照合が前記検索コード列の先頭のコードから末尾のコードについてまで成功すると、該先頭のコードのコードＩＤに対応して前記ＩＤ関係表に格納されたコード位置を検索結果コード位置として出力する、
ことを特徴とするコード列検索装置。
【請求項４】
請求項３に記載のコード列検索装置において、
前記ＩＤ関係表に前記コードＩＤに対応して格納された次コードＩＤとコード位置は、同一種別のコードのコードＩＤ順に連続してコード位置順で格納されている、
ことを特徴とするコード列検索装置。
【請求項５】
請求項４に記載のコード列検索装置において、
前記コードＩＤ照合手段は、前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれる全てのコードＩＤを前記検索コード列の先頭のコードのコードＩＤとして、前記ＩＤ関係読出手段により読み出された次コードＩＤが前記コード別ＩＤ範囲読出手段により読み出されたコードＩＤの範囲に含まれるかを照合する、
ことを特徴とするコード列検索装置。
【請求項６】
請求項５に記載のコード列検索装置において、
前記コードＩＤ照合手段は、前記ＩＤ関係読出手段により読み出された次コードＩＤが前記コード別ＩＤ範囲読出手段により読み出されたコードＩＤの範囲に含まれるかの照合が失敗すると、前記ＩＤ関係表の該次コードＩＤと同一のエントリに格納されたコード位置と、前記先頭のコードのコードＩＤに対応して前記ＩＤ関係表に格納されたコード位置とを、検索結果コード位置として出力する、
ことを特徴とするコード列検索装置。
【請求項７】
請求項５に記載のコード列検索装置において、
前記検索コード列は任意のコードと照合する任意コードを含み、
前記コードＩＤ照合手段は、該任意コードを第２のコードとした前記ＩＤ関係読出手段により読み出された次コードＩＤが前記コード別ＩＤ範囲読出手段により読み出されたコードＩＤの範囲に含まれるかの照合に替えて、前記検索コード列において該任意コードの次に位置するコードを前記第２のコードとして前記照合を行う、
ことを特徴とするコード列検索装置。
【請求項８】
検索対象である検索対象コード列を検索コード列により検索するコード列検索装置であって、前記検索対象コード列を複数に分割した部分コード列であるコード列ブロックであり、該コード列ブロックの末尾のコードと該コード列ブロックの次に位置するコード列ブロックの先頭のコードとを重複させて前記検索対象コード列を複数に分割したコード列ブロック毎に設けられた、前記コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤの範囲であるコードＩＤ範囲を同一種別のコード毎に格納したコード別ＩＤ範囲表と、前記コードＩＤに対応して、前記コード列ブロックにおいて該コードＩＤに係るコードの次に位置するコードのコードＩＤである次コードＩＤを格納するとともに、前記コードＩＤに係るコードが前記コード列ブロックの末尾に位置する場合は前記次コードＩＤとして前記コード列ブロックの先頭のコードのコードＩＤを格納するＩＤ関係表と、前記コード列ブロック毎に該コード列ブロックの先頭のコードのコードＩＤである先頭コードＩＤを格納した索引データ管理表と、検索実行部と、検索管理部を備えたコード列検索装置によるコード列検索方法において、
前記検索実行部は、
前記検索コード列を読み出す検索コード列読出ステップと、
指定されたコード列ブロックに対応する前記コード別ＩＤ範囲表から、前記検索コード列読出ステップで読み出された検索コード列の先頭のコードあるいは２番目のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出すコード別ＩＤ範囲読出ステップと、
前記コード別ＩＤ範囲読出ステップで読み出された前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれるコードＩＤあるいは前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出し、以後、読み出された次コードＩＤに対応して格納された次コードＩＤを順次前記ＩＤ関係表から読み出すとともに、該次コードＩＤが当該コード列ブロックの前記先頭コードＩＤと等しいか判定するＩＤ関係読出ステップと、
前記ＩＤ関係読出ステップで読み出された次コードＩＤが当該コード列ブロックの先頭のコードのコードＩＤと等しくないとき、該次コードＩＤが前記コード別ＩＤ範囲読出ステップで読み出されたコードＩＤの範囲に含まれるか照合するコードＩＤ照合ステップと、
を実行し、
前記検索管理部は、
前記検索実行部に先頭のコード列ブロックから前記コード列ブロックを順次指定する検索開始位置指定ステップを実行するとともに、
前記ＩＤ関係読出ステップにおいて、前記読み出した次コードＩＤが前記コード列ブロックの先頭のコードのコードＩＤと等しいと判定されると、前記コード列ブロックの次に位置するコード列ブロックを前記検索実行部に指定する次コード列指定ステップを実行するものであり、
前記検索管理部が前記検索開始位置指定ステップを実行すると、
前記コード別ＩＤ範囲読出ステップでは、前記検索コード列の先頭のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出し、
前記ＩＤ関係読出ステップでは、最初に、前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれるコードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出し、
前記検索管理部が前記次コード列指定ステップを実行すると、
前記コード別ＩＤ範囲読出ステップでは、前記検索コード列の２番目のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出し、
前記ＩＤ関係読出ステップでは、最初に、前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出す、
ことを特徴とするコード列検索方法。
【請求項９】
請求項８に記載のコード列検索方法において、
前記コードＩＤ照合ステップは、
前記コード別ＩＤ範囲読出手段により読み出された、前記検索コード列の先頭のコードのコード種別のコードＩＤ範囲に含まれる検索コード列の先頭のコードのコードＩＤあるいは前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤを第１コードＩＤとしたとき該第１コードＩＤに対応して前記ＩＤ関係表に格納された前記次コードＩＤが、前記検索対象コード列において前記第１のコードの次に位置するコードである第２のコードの種別のコードＩＤ範囲に含まれるか照合し、以後、前記第１のコードと第２のコードの前記検索コード列における位置が前記コード別ＩＤ範囲読出ステップ及びＩＤ関係読出ステップの読出動作により更新されると、該位置の更新された第１のコードのコードＩＤに対応して格納された前記次コードＩＤが、該位置の更新された第２のコードの種別の前記コードＩＤ範囲に含まれるかを照合するものである、
ことを特徴とするコード列検索方法。
【請求項１０】
請求項９に記載のコード列検索方法において、
前記ＩＤ関係表は、前記コードＩＤに対応して、前記検索対象コード列において該コードＩＤに係るコードの位置を示すコード位置を格納しており、
前記コードＩＤ照合ステップは、前記ＩＤ関係読出ステップで読み出された次コードＩＤが前記コード別ＩＤ範囲読出ステップで読み出されたコードＩＤの範囲に含まれるかの照合が前記検索コード列の先頭のコードから末尾のコードについてまで成功すると、該先頭のコードのコードＩＤに対応して前記ＩＤ関係表に格納されたコード位置を検索結果コード位置として出力する、
ことを特徴とするコード列検索方法。
【請求項１１】
請求項１０に記載のコード列検索方法において、
前記コードＩＤ照合ステップは、前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれる全てのコードＩＤを前記検索コード列の先頭のコードのコードＩＤとして、前記ＩＤ関係読出ステップで読み出された次コードＩＤが前記コード別ＩＤ範囲読出ステップで読み出されたコードＩＤの範囲に含まれるかを照合する、
ことを特徴とするコード列検索方法。
【請求項１２】
検索対象である検索対象コード列を検索コード列により検索するコード列検索装置であって、前記検索対象コード列を複数に分割した部分コード列であるコード列ブロックであり、該コード列ブロックの末尾のコードと該コード列ブロックの次に位置するコード列ブロックの先頭のコードとを重複させて前記検索対象コード列を複数に分割したコード列ブロック毎に設けられた、前記コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤの範囲であるコードＩＤ範囲を同一種別のコード毎に格納したコード別ＩＤ範囲表と、前記コードＩＤに対応して、前記コード列ブロックにおいて該コードＩＤに係るコードの次に位置するコードのコードＩＤである次コードＩＤを格納するとともに、前記コードＩＤに係るコードが前記コード列ブロックの末尾に位置する場合は前記次コードＩＤとして前記コード列ブロックの先頭のコードのコードＩＤを格納するＩＤ関係表と、前記コード列ブロック毎に該コード列ブロックの先頭のコードのコードＩＤである先頭コードＩＤを格納した索引データ管理表と、検索実行部と、検索管理部を備えたコード列検索装置の機能をコンピュータに実現させるコード列検索プログラムにおいて、
コンピュータに、
前記検索実行部の機能として、
前記検索コード列を読み出す検索コード列読出機能、
指定されたコード列ブロックに対応する前記コード別ＩＤ範囲表から、前記検索コード列読出機能により読み出された検索コード列の先頭のコードあるいは２番目のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出すコード別ＩＤ範囲読出機能、
前記コード別ＩＤ範囲読出機能により読み出された前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれるコードＩＤあるいは前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出し、以後、読み出された次コードＩＤに対応して格納された次コードＩＤを順次前記ＩＤ関係表から読み出すとともに、該次コードＩＤが当該コード列ブロックの前記先頭コードＩＤと等しいか判定するＩＤ関係読出機能、
前記ＩＤ関係読出機能により読み出された次コードＩＤが当該コード列ブロックの先頭のコードのコードＩＤと等しくないとき、該次コードＩＤが前記コード別ＩＤ範囲読出機能により読み出されたコードＩＤの範囲に含まれるか照合するコードＩＤ照合機能、
を実現させ、
前記検索管理部の機能として、
前記検索実行部に先頭のコード列ブロックから前記コード列ブロックを順次指定する検索開始位置指定機能を実現させるとともに、
前記ＩＤ関係読出機能により、前記読み出した次コードＩＤが前記コード列ブロックの先頭のコードのコードＩＤと等しいと判定されると、前記コード列ブロックの次に位置するコード列ブロックを前記検索実行部に指定する次コード列指定機能を実現させるものであり、
前記検索管理部の機能として、前記検索開始位置指定機能を実現させると
前記コード別ＩＤ範囲読出機能により、前記検索コード列の先頭のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出す機能、
前記ＩＤ関係読出機能により、最初に、前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれるコードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出す機能を、
前記検索管理部の機能として、前記次コード列指定機能を実現させると、
前記コード別ＩＤ範囲読出機能により、前記検索コード列の２番目のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出す機能、
前記ＩＤ関係読出機能により、最初に、前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出す機能を、
実現させることを特徴とするコード列検索プログラム。
【請求項１３】
請求項１２に記載のコード列検索プログラムにおいて、
前記コードＩＤ照合機能は、
前記コード別ＩＤ範囲読出機能により読み出された、前記検索コード列の先頭のコードのコード種別のコードＩＤ範囲に含まれる検索コード列の先頭のコードのコードＩＤあるいは前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤを第１コードＩＤとしたとき該第１コードＩＤに対応して前記ＩＤ関係表に格納された前記次コードＩＤが、前記検索対象コード列において前記第１のコードの次に位置するコードである第２のコードの種別のコードＩＤ範囲に含まれるか照合する機能と、以後、前記第１のコードと第２のコードの前記検索コード列における位置が前記コード別ＩＤ範囲読出機能及びＩＤ関係読出機能の読出動作により更新されると、該位置の更新された第１のコードのコードＩＤに対応して格納された前記次コードＩＤが、該位置の更新された第２のコードの種別の前記コードＩＤ範囲に含まれるかを照合する機能を含む、
ことを特徴とするコード列検索プログラム。
【請求項１４】
請求項１３に記載のコード列検索プログラムにおいて、
前記ＩＤ関係表は、前記コードＩＤに対応して、前記検索対象コード列において該コードＩＤに係るコードの位置を示すコード位置を格納しており、
前記コードＩＤ照合機能は、前記ＩＤ関係読出機能により読み出された次コードＩＤが前記コード別ＩＤ範囲読出機能により読み出されたコードＩＤの範囲に含まれるかの照合が前記検索コード列の先頭のコードから末尾のコードについてまで成功すると、該先頭のコードのコードＩＤに対応して前記ＩＤ関係表に格納されたコード位置を検索結果コード位置として出力する機能を含む、
ことを特徴とするコード列検索プログラム。
【請求項１５】
請求項１４に記載のコード列検索プログラムにおいて、
前記コードＩＤ照合機能は、前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれる全てのコードＩＤを前記先頭コードＩＤとして、前記ＩＤ関係読出機能により読み出された次コードＩＤが前記コード別ＩＤ範囲読出機能により読み出されたコードＩＤの範囲に含まれるかを照合する機能を含む、
ことを特徴とするコード列検索プログラム。
【請求項１６】
請求項１２〜請求項１５のいずれか１項に記載のコード列検索プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１７】
検索対象である検索対象コード列を検索コード列により検索するコード列検索のためのデータ構造において、
前記検索対象コード列を複数に分割した部分コード列であるコード列ブロックであり、該コード列ブロックの末尾のコードと該コード列ブロックの次に位置するコード列ブロックの先頭のコードとを重複させて前記検索対象コード列を複数に分割したコード列ブロック毎に設けられた、前記コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤの範囲であるコードＩＤ範囲を同一種別のコード毎に格納したコード別ＩＤ範囲表と、前記コードＩＤに対応して、前記コード列ブロックにおいて該コードＩＤに係るコードの次に位置するコードのコードＩＤである次コードＩＤを格納するとともに、前記コードＩＤに係るコードが前記コード列ブロックの末尾に位置する場合は前記次コードＩＤとして前記コード列ブロックの先頭のコードのコードＩＤを格納するＩＤ関係表と、前記コード列ブロック毎に該コード列ブロックの先頭のコードのコードＩＤである先頭コードＩＤを格納した索引データ管理表と
を備え、
検索実行部と、検索管理部を備えたコード列検索装置により、
前記検索実行部は、
前記検索コード列を読み出す検索コード列読出ステップと、
指定されたコード列ブロックに対応する前記コード別ＩＤ範囲表から、前記検索コード列読出ステップで読み出された検索コード列の先頭のコードあるいは２番目のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出すコード別ＩＤ範囲読出ステップと、
前記コード別ＩＤ範囲読出ステップで読み出された前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれるコードＩＤあるいは前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出し、以後、読み出された次コードＩＤに対応して格納された次コードＩＤを順次前記ＩＤ関係表から読み出すとともに、該次コードＩＤが当該コード列ブロックの先頭のコードのコードＩＤと等しいか判定するＩＤ関係読出ステップと、
前記ＩＤ関係読出ステップで読み出された次コードＩＤが当該コード列ブロックの先頭のコードのコードＩＤと等しくないとき、該次コードＩＤが前記コード別ＩＤ範囲読出ステップで読み出されたコードＩＤの範囲に含まれるか照合するコードＩＤ照合ステップと、
を実行し、
前記検索管理部は、
前記検索実行部に先頭のコード列ブロックから前記コード列ブロックを順次指定する検索開始位置指定ステップを実行するとともに、
前記ＩＤ関係読出ステップにおいて、前記読み出した次コードＩＤが前記コード列ブロックの先頭のコードのコードＩＤと等しいと判定されると、前記コード列ブロックの次に位置するコード列ブロックを前記検索実行部に指定する次コード列指定ステップを実行し、
前記検索管理部が前記検索開始位置指定ステップを実行すると、
前記コード別ＩＤ範囲読出ステップでは、前記検索コード列の先頭のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出し、
前記ＩＤ関係読出ステップでは、最初に、前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれるコードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出し、
前記検索管理部が前記次コード列指定ステップを実行すると、
前記コード別ＩＤ範囲読出ステップでは、前記検索コード列の２番目のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出し、
前記ＩＤ関係読出ステップでは、最初に、前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出すことにより、
前記検索対象コード列の前記検索コード列による検索の実行を可能とする
ことを特徴とするコード列検索のためのデータ構造。
【請求項１８】
請求項１７に記載のコード列検索のためのデータ構造において、
前記ＩＤ関係表は、前記コードＩＤに対応して、前記検索対象コード列において該コードＩＤに係るコードの位置を示すコード位置を格納しており、
前記ＩＤ関係表から読み出された次コードＩＤが前記コード別ＩＤ範囲読出表から読み出されたコードＩＤの範囲に含まれるかの照合が前記検索コード列の先頭のコードから末尾のコードについてまで成功すると、該先頭のコードのコードＩＤに対応して前記ＩＤ関係表に格納されたコード位置を検索結果コード位置として出力することを可能とする、
ことを特徴とするコード列検索のためのデータ構造。
【請求項１９】
請求項１８に記載のコード列検索のためのデータ構造において、
前記ＩＤ関係表に前記コードＩＤに対応して格納された次コードＩＤとコード位置は、同一種別のコードのコードＩＤ順に連続してコード位置順で格納されている、
ことを特徴とするコード列検索のためのデータ構造。
【請求項２０】
請求項１７〜請求項１９のいずれか１項に記載されたデータ構造を有するデータが記録されたコンピュータ読み取り可能な記録媒体。
【請求項２１】
検索対象である検索対象コード列を検索コード列により検索するコード列検索のための索引データ作成装置において、
前記検索対象コード列を複数に分割した部分コード列であるコード列ブロックであって、該コード列ブロックの末尾のコードと該コード列ブロックの次に位置するコード列ブロックの先頭のコードとを重複させて前記検索対象コード列を複数に分割したコード列ブロックを順次読み出し、該読み出したコード列ブロックのコードの種別毎の出現回数を求める検索対象コード列読出手段と
前記検索対象コード列読出手段が求めたコードの種別毎の出現回数に基づいて、前記コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤの範囲であるコードＩＤ範囲を同一種別のコード毎に格納したコード別ＩＤ範囲表を生成するコード別ＩＤ範囲表生成手段と、
前記検索対象コード列読出手段が読み出したコード列ブロックと前記コード別ＩＤ範囲表に基づき、前記コードＩＤに対応して、前記コード列ブロックにおいて該コードＩＤに係るコードの次に位置するコードのコードＩＤである次コードＩＤを格納したＩＤ関係表を前記コード列ブロック毎に生成するＩＤ関係表生成手段と、
前記コード列ブロック毎に該コード列ブロックに対応した前記コード別ＩＤ範囲表とＩＤ関係表を格納する索引データの格納領域を確保するとともに、前記コード列ブロックの先頭のコードのコードＩＤと前記索引データの格納領域のポインタを前記コード列ブロック毎に格納する索引データ管理表を生成する索引データ作成管理手段と、
を備えたことを特徴とする索引データ作成装置。
【請求項２２】
請求項２１に記載の索引データ作成装置において、
前記ＩＤ関係表に前記コードＩＤに対応して格納された次コードＩＤとコード位置は、同一種別のコードのコードＩＤ順に連続してコード位置順で格納されている、
ことを特徴とする索引データ作成装置。
【請求項２３】
検索対象である検索対象コード列を検索コード列により検索するコード列検索のための索引データ作成装置による索引データ作成方法において、
前記検索対象コード列を複数に分割した部分コード列であるコード列ブロックであって、該コード列ブロックの末尾のコードと該コード列ブロックの次に位置するコード列ブロックの先頭のコードとを重複させて前記検索対象コード列を複数に分割したコード列ブロックを読み出し、該読み出したコード列ブロックのコードの種別毎の出現回数を求める検索対象コード列読出ステップと
前記検索対象コード列読出ステップで求めたコードの種別毎の出現回数に基づいて、前記コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤの範囲であるコードＩＤ範囲を同一種別のコード毎に格納したコード別ＩＤ範囲表を生成するコード別ＩＤ範囲表生成ステップと、
前記検索対象コード列読出ステップで読み出したコード列ブロックと前記コード別ＩＤ範囲表生成ステップで生成されたコード別ＩＤ範囲表に基づき、前記コードＩＤに対応して、前記コード列ブロックにおいて該コードＩＤに係るコードの次に位置するコードのコードＩＤである次コードＩＤを格納したＩＤ関係表を生成するＩＤ関係表生成ステップと、
を備え、
前記検索対象コード列読出ステップ、前記コード別ＩＤ範囲表生成ステップ及びＩＤ関係表生成ステップを全ての前記コード列ブロックについて繰り返すことを特徴とする索引データ作成方法。
【請求項２４】
検索対象である検索対象コード列を検索コード列により検索するコード列検索のための索引データ作成方法をコンピュータに実行させる索引データ作成プログラムにおいて、
コンピュータに、
コード列検索のための索引データ作成方法であって、
前記検索対象コード列を複数に分割した部分コード列であるコード列ブロックであり、該コード列ブロックの末尾のコードと該コード列ブロックの次に位置するコード列ブロックの先頭のコードとを重複させて前記検索対象コード列を複数に分割したコード列ブロックを読み出し、該読み出したコード列ブロックのコードの種別毎の出現回数を求める検索対象コード列読出ステップと
前記検索対象コード列読出ステップで求めたコードの種別毎の出現回数に基づいて、前記コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤの範囲であるコードＩＤ範囲を同一種別のコード毎に格納したコード別ＩＤ範囲表を生成するコード別ＩＤ範囲表生成ステップと、
前記検索対象コード列読出ステップで読み出したコード列ブロックと前記コード別ＩＤ範囲表生成ステップで生成されたコード別ＩＤ範囲表に基づき、前記コードＩＤに対応して、前記コード列ブロックにおいて該コードＩＤに係るコードの次に位置するコードのコードＩＤである次コードＩＤを格納したＩＤ関係表を生成するＩＤ関係表生成ステップと、
を備え、
前記検索対象コード列読出ステップ、前記コード別ＩＤ範囲表生成ステップ及びＩＤ関係表生成ステップを全ての前記コード列ブロックについて繰り返すことを特徴とする索引データ作成方法を実行させることを特徴とする索引データ作成プログラム。
【請求項２５】
請求項２４に記載の索引データ作成プログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ビット列で構成される文字コードあるいは文字コード列を検索する文字列検索のように、コンピュータにより、ビット列で構成されるコードあるいはコード列を検索するコード列検索に関するものである。
【背景技術】
【０００２】
近年、ビジネス文書を作成するためにワードプロセッサを使用することが通例となり、またインターネットが普及したことにより、ビット列からなる文字コードを用いた、コンピュータで処理可能な電子文書が世の中に大量に存在するようになっている。そのため、これら大量の電子文書の中からコンピュータを利用して必要なものを探し出すために、各種の文字列検索手法が開発されている。
【０００３】
これらの文字列検索手法においては、高速な検索を実現するために予め索引を作成することが一般的である。索引としては、例えば、文書中の単語を抽出し、単語毎にそれの含まれている文書名を対応付けた転置インデックスがよく知られている。この転置インデックスはサイズが比較的小さく、検索が高速であり、インデックスの構成も簡単であるという特徴を持っている。しかしながら、単語の抽出が難しい言語もある。また、複数の単語の組み合わせの検索を行おうとすると、文書中の単語位置を突き合わせる処理が必要になるという欠点も存在する。そして、一文中の任意の文字列を検索することも難しい。
【０００４】
そこで、任意の文字列を検索可能とする接尾辞配列という索引が開発されている。下記特許文献１及び非特許文献１には、接尾辞配列とそれを用いた検索手法が開示されている。
図１は、上述の接尾辞配列に関する従来の検索方法の例を説明するものである。図１の（ａ）に例示するのは、検索対象の文字列である。図に示すように、文字列１０は、アルファベットの文字Ａ、Ｂ、Ｃ、Ｅと区切り文字＄で構成されている。文字Ａは文字列１０の文字位置１、４、７に位置している。文字Ｂは文字列１０の文字位置２、５に位置している。文字Ｃは文字列１０の文字位置６、８に位置している。文字Ｅは文字列１０の文字位置３に位置している。区切り文字＄は、文字列１０の末尾の位置である文字位置９に位置している。
【０００５】
図１の（ｂ）に示すのは、文字位置順の接尾辞２０、辞書順の接尾辞２０ａ及び接尾辞配列３０である。
文字列１０は、図１の（ｂ）に示すようにその部分文字列として９の接尾辞を持つと考えることができる。各接尾辞の先頭文字の文字位置順に接尾辞を並べた文字位置順の接尾辞２０を辞書順にソートすることにより、辞書順の接尾辞２０ａが得られる。このとき、辞書順に並べ替えた接尾辞の先頭文字の文字位置を配列に格納することにより、接尾辞配列３０が得られる。この接尾辞配列により、検索文字列のパターンと一致する検索対象文字列中の部分文字列の先頭の文字位置を求めることができる。
【０００６】
図１の（ｃ）に示すのは、圧縮接尾辞配列による文字列検索の概念を説明するものであり、検索文字列４０と接尾辞配列３０に対応する圧縮接尾辞配列（概念図）５０が示されている。圧縮接尾辞配列（概念図）５０の配列番号（ｉ）には、次の配列番号（Ψ）が格納されている。次の配列番号（Ψ）は、接尾辞配列３０の配列番号（ｉ）に格納された文字位置に１を加えた文字位置が格納された接尾辞配列３０の配列番号である。
【０００７】
配列に格納するものを文字位置から次の配列番号（Ψ）に変更することにより、文字毎に格納される値は図に示すように昇順になる。したがって、各配列要素に格納する値は次の配列番号（Ψ）そのものではなく１つ前の配列要素に格納された値の増分とすることができるのでビット幅を狭くすることができ、情報量を圧縮することができる。
【０００８】
検索の概念については、例示された検索文字列４０の各文字から圧縮接尾辞配列（概念図）５０の配列番号（ｉ）への点線の矢印と配列番号（ｉ）の太字で示す３、６、９と次の配列番号（Ψ）の太字で示す６、９との間の矢印の検索ステップで示している。すなわち、検索文字列４０の先頭の文字Ａに対応する配列番号から例えば３が選ばれ、配列番号３の次の配列番号６が検索文字列４０の２番目の文字Ｂに対応する配列番号であり、配列番号６の次の配列番号９が検索文字列４０の３番目の文字Ｅに対応する配列番号であることにより、検索対象の文字列１０が検索文字列４０による検索でヒットすることがわかる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特許第３、６７２、２４２号公報
【非特許文献】
【００１０】
【非特許文献１】定兼、「圧縮接尾辞に関する考察」、電子情報通信学会技術研究報告（2000-7-19）Vol.100,No.226,p49-56
【発明の概要】
【発明が解決しようとする課題】
【００１１】
文字列検索に圧縮接尾辞配列を用いることにより、任意の文字列の検索を行うことができ、配列の容量も削減することができる。しかし、圧縮接尾辞配列を作成するには、その前に検索対象の文字列から接尾辞を作成しその接尾辞を辞書順にソートして接尾辞配列を作成する必要があり、検索対象の文字列から圧縮接尾辞配列を作成する処理時間が大きなものとなる。
そこで本発明の解決しようとする課題は、文字列に限らず、任意のコード列の検索を行うことができる索引データの作成時間を従来のものよりも短縮することである。そして、本発明の目的は、任意のコード列の検索を行うことができ、従来よりも短時間で作成することのできる索引のデータ構造を求め、それを用いたコード列検索手法を提供することである。
【課題を解決するための手段】
【００１２】
本発明によれば、検索対象コード列をいくつかのブロック（以下、コード列ブロックということがある。）に分割する。提案するブロック分割は、隣り合うコード列ブロックの末尾に位置するコードと先頭に位置するコードを重複させるものである。そして、コード列ブロック毎に、コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤが、異なるコードの値（以下、誤解の恐れのない場合には、単にコードという場合がある。また、逆に異なるコード値であることを強調して、コード種別ということもある。）間でコードＩＤの範囲が重ならないように、上記全ての各コードに付与されるものとする。例えばコード毎にコード列ブロック中に出現する順に昇順のコードＩＤを付与することを、コード種別毎に最初のコードＩＤの値をそれまで付与されたコードＩＤより大きい値として繰り返すことにより、上記コードＩＤの付与を実現することができる。
そして本発明によれば、各コード列ブロックに対応してコード毎にそのコードＩＤの範囲を格納したコード別ＩＤ範囲表と各コードＩＤの次に位置するコードＩＤである次コードＩＤを格納したＩＤ関係表を作成し、コード別ＩＤ範囲表とＩＤ関係表を用いてコード列検索を実施する。
【００１３】
本発明の、検索コード列による検索対象コード列のコード列検索によれば、先頭のコード列ブロックのコード別ＩＤ範囲表から検索コード列を構成するコードのコードＩＤの範囲を読み出し、検索コード列の先頭のコードのコードＩＤ範囲に含まれるコードＩＤに対応して格納された次コードＩＤをコード列ブロック毎に作成されたＩＤ関係表から読み出すとともに、該次のコードに対応して格納された次コードＩＤを順次ＩＤ関係表から読み出し、ＩＤ関係表から読み出した次コードＩＤがコード別ＩＤ範囲読出表から読み出したコードＩＤの範囲に含まれるか照合し、この照合を後続のコード列ブロックに対して同様に行う。
【発明の効果】
【００１４】
本発明によれば、簡単な構造のコード別ＩＤ範囲表とＩＤ関係表を用いて検索を実施することができるので、接尾辞配列を作成する必要がなく、コンピュータの索引作成の処理負担を小さくすることができる。
【図面の簡単な説明】
【００１５】
【図１】接尾辞配列に関する従来の検索方法の例を説明する図である。
【図２Ａ】本発明の一実施の形態における索引用のデータ構造を作成するための機能ブロックを説明する図である。
【図２Ｂ】本発明の一実施の形態におけるコード列検索のための機能ブロックを説明する図である。
【図２Ｃ】本発明の一実施の形態におけるハードウェア構成例を説明する図である。
【図３Ａ】本発明の一実施形態における索引データの構造を説明する図である。
【図３Ｂ】本発明の一実施の形態におけるコード列検索の概念を説明する図である。
【図４Ａ】本発明の一実施形態におけるコード列ブロックの索引データを作成する前段の処理フローを説明する図である。
【図４Ｂ】本発明の一実施形態におけるコード列ブロックの索引データを作成する後段の処理フローを説明する図である。
【図４Ｃ】本発明の一実施形態におけるコード列ブロックの索引データを作成する処理の概略フローを説明する図である。
【図５Ａ】本発明の一実施形態における検索対象のコード列に含まれるコードのコード種別毎の出現回数を計数する処理フローを説明する図である。
【図５Ｂ】本発明の一実施形態における出現回数をもとにコード別ＩＤ範囲表のコードＩＤ範囲を設定する処理フローを説明する図である。
【図５Ｃ】本発明の一実施形態における検索対象コード列に含まれるコードをもとにＩＤ関係表を完成させる処理フローを説明する図である。
【図６】本発明の一実施形態におけるコード列検索の処理全体の概略フローを説明する図である。
【図７Ａ】本発明の一実施形態における、あるコード列ブロックを検索開始位置とするコード列検索の前段の処理フローを説明する図である。
【図７Ｂ】本発明の一実施形態における、あるコード列ブロックを検索開始位置とするコード列検索の後段の処理フローを説明する図である。
【図８Ａ】本発明の一実施の形態における完全一致検索の処理フローを説明する図である。
【図８Ｂ】本発明の一実施の形態における前方一致検索の処理フローを説明する図である。
【図８Ｃ】本発明の一実施の形態における任意コードを含む検索の処理フローを説明する図である。
【図９Ａ】本発明の一実施の形態における次のコード列ブロックの検索の前段の処理フローを説明する図である。
【図９Ｂ】本発明の一実施の形態における次のコード列ブロックの検索の後段の処理フローを説明する図である。
【図１０Ａ】本発明の一実施の形態における先頭のコード列ブロックからの検索の処理の流れを説明する図である。
【図１０Ｂ】本発明の一実施の形態における次のコード列ブロックの検索へ移行する流れを説明する図である。
【図１０Ｃ】本発明の一実施の形態における先頭から２番目のコード列ブロックからの検索の処理の流れを説明する図である。
【発明を実施するための形態】
【００１６】
以下、本発明を実施するための最良の形態を、図面を参照しながら説明する。
図２Ａは、本発明の一実施の形態における索引用のデータ構造を作成するための機能ブロックを説明する図である。索引データ作成管理手段１０４は、索引データ作成手段１０５による検索対象コード列を分割したブロック（コード列ブロック）毎の索引データの作成を管理し、索引データ管理表を作成する。索引データ作成手段１０５は、検索対象コード列読出手段１０１、コード別ＩＤ範囲表生成手段１０２及びＩＤ関係表生成手段１０３を含む。
検索対象コード列が検索対象コード列読出手段１０１で読み出され、コード別ＩＤ範囲表生成手段１０２とＩＤ関係表生成手段１０３に渡される。コード別ＩＤ範囲表生成手段１０２は、コード毎にそのコードＩＤの範囲を格納したコード別ＩＤ範囲表を作成し、ＩＤ関係表生成手段１０３は、各コードＩＤの次に位置するコードＩＤである次コードＩＤを格納したＩＤ関係表を生成する。
【００１７】
図２Ｂは、本発明の一実施の形態におけるコード列検索を行うための機能ブロックを説明する図である。コード列検索管理手段１１５は、コード列検索手段１１６による検索対象コード列のコード列ブロック毎の検索を管理する。コード列検索手段１１６は、検索コード列読出手段１１１、コード別ＩＤ範囲読出手段１１２、ＩＤ関係読出手段１１３及びコードＩＤ照合手段１１４を含む。
【００１８】
検索コード列が検索コード列読出手段１１１で読み出され、コード別ＩＤ範囲読出手段１１２に渡される。コード別ＩＤ範囲読出手段１１２は、コード別ＩＤ範囲表生成手段１０２で生成されたコード別ＩＤ範囲表より、検索コード列読出手段１１１から渡された検索コード列を構成するコードのコードＩＤの範囲を読み出してＩＤ関係読出手段１１３とコードＩＤ照合手段１１４に渡す。
【００１９】
ＩＤ関係読出手段１１３は、コード別ＩＤ範囲読出手段１１２から渡された検索コード列の先頭のコードのコードＩＤ範囲に含まれるコードＩＤに対応して格納された次コードＩＤを、ＩＤ関係表生成手段１０３で生成されたＩＤ関係表から読み出すとともに、該次のコードに対応して格納された次コードＩＤを順次ＩＤ関係表から読み出してコードＩＤ照合手段１１４に渡す。
コードＩＤ照合手段１１４は、ＩＤ関係読出手段１１３から渡された次コードＩＤがコード別ＩＤ範囲読出手段から渡されたコードＩＤの範囲に含まれるか照合し、検索結果を出力する。
【００２０】
図２Ｃは、本発明の一実施の形態におけるハードウェア構成例を説明する図である。
本発明の検索装置による検索処理及び索引生成処理は中央処理装置３０２及びキャッシュメモリ３０３を少なくとも備えたデータ処理装置３０１によりデータ格納装置３０８を用いて実施される。索引データ管理表３２１の格納領域と、コード列ブロックに対応するコード別ＩＤ範囲表３０９とＩＤ関係表３１０を格納する索引データの格納領域３２４を含むデータ格納装置３０８は、主記憶装置３０５または外部記憶装置３０６で実現することができ、あるいは通信装置３０７を介して接続された遠方に配置された装置を用いることも可能である。
【００２１】
図２Ａ及び図２Ｂを参照して説明した索引でデータ検索手段１１６等の各機能ブロックは、図２Ｃに例示するハードウェアと後に説明するステップを備えたソフトウェアにより実現可能である。
【００２２】
図２Ｃの例示では、主記憶装置３０５、外部記憶装置３０６及び通信装置３０７が一本のバス３０４によりデータ処理装置３０１に接続されているが、接続方法はこれに限るものではない。また、主記憶装置３０５をデータ処理装置３０１内のものとすることもできる。
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域が用いられることは当然である。以下の説明では、一時記憶領域に格納されたあるいは設定された値を一時記憶領域の名前で呼ぶことがある。
【００２３】
次に、本発明の一実施態様における検索手法の概要を説明する。
図３Ａは、本発明の一実施の形態における索引データの構造を説明する図である。図３Ａの（ａ）に示すのは、索引データを作成する対象となる検索対象のコード列の例である。例示された検索対象コード列１０ａは、コードＡ、Ｂ、Ｅ、Ａ、Ｂ、Ｃ、Ａ、・・・、Ｃ、Ｂの英文字の文字コードから構成されている。それぞれの文字コードの下に記載されたＰ１〜Ｐ８、・・・、Ｐｎ−１、Ｐｎは、検索対象コード列１０ａにおけるコードの位置を表している。コード位置ポインタ１１は、検索対象コード列１０ａにおけるコードの位置を示すポインタであり、図の例ではコード位置Ｐ１を指している。
図に示す例では、検索対象コード列１０ａは４つのコード毎に、前方のコード列ブロックの末尾位置のコードと後方のコード列ブロックの先頭位置のコードが重複するように分割されている。したがって、先頭のコード列ブロック１５ａは、コード列ポインタ１１の指すコード位置Ｐ１に位置するコードＡ、コード位置Ｐ２に位置するコードＢ、コード位置Ｐ３に位置するコードＥ、コード位置Ｐ４に位置するコードＡで構成される。矢印１２で示すように、２番目のコード列ブロック１５ｂの先頭位置は、先頭のコード列ブロック１５ａの末尾位置と等しいＰ４であり、コードＡは先頭のコード列ブロック１５ａと２番目のコード列ブロック１５ｂの双方に含まれる。２番目のコード列ブロック１５ｂは、図の太線の枠内に示すように、矢印１２で示す先頭位置であるコード位置Ｐ４に位置するコードＡ、コード位置Ｐ５に位置するコードＢ、コード位置Ｐ６に位置するコードＣ、矢印１３で示す末尾位置であるコード位置Ｐ７に位置するコードＡで構成される。矢印１４で示すコード位置Ｐｎは、終端位置と定義する。最後のコード列ブロックだけは、２つのコードで構成されている。
個々のコード列ブロックに対して、索引データとして、コード別ＩＤ範囲表とＩＤ関係表が生成される。
【００２４】
図３Ａの（ｂ）に示すのは、コード列検索のための索引のデータ構造例であり、図３Ａの（ａ）に示す検索対象コード列とそのコード列ブロックに対応して生成される索引データ管理表３２１と、先頭のコード列ブロック１５ａに対応する索引データの格納領域３２４ａに格納されたコード別ＩＤ範囲表３０９ａとＩＤ関係表３１０ａ、２番目のコード列ブロック１５ｂに対応する索引データの格納領域３２４ｂに格納されたコード別ＩＤ範囲表３０９ｂとＩＤ関係表３１０ｂ、３番目のコード列ブロックに対応する索引データの格納領域３２４ｃ、及び最後のコード列ブロックに対応する索引データの格納領域３２４ｄに格納されたコード別ＩＤ範囲表３０９ｄとＩＤ関係表３１０ｄが例示されている。索引データの格納領域３２４ｃに格納された索引データの表記は省略されている。なお、以下においては、「コード別ＩＤ範囲表３０９」、「ＩＤ関係表３１０」のように表記してコード列ブロックに共通事項を説明することがある。また、他の符号についても同様に表記する場合がある。
コード別ＩＤ範囲表３０９のエントリは、索引データを作成する対象である検索対象コード列に出現する異なるコードの種別毎に作成される。コード別ＩＤ範囲表３０９の左側に表示しているように、図に示す例では、アルファベットのうち、コードＡ〜Ｅからなるコード列である検索対象コード列が索引データを作成する対象であり、各コードに対応してエントリが作成されている。コード種別ポインタ３１１は、コード別ＩＤ範囲表３０９のエントリを指すポインタである。図の先頭のコード列ブロックに対応するコード別ＩＤ範囲表３０９ａの例では、コード種別ポインタ３１１ａがコードＡに対応するエントリを指している。同様に、２番目のコード列ブロックに対応するコード別ＩＤ範囲表３０９ｂの例では、コード種別ポインタ３１１ｂがコードＡに対応するエントリを指している。また、最後のコード列ブロックに対応するコード別ＩＤ範囲表３０９ｄの例では、コード種別ポインタ３１１ｄがコードＡに対応するエントリを指している。
なお、各コードはビット列で構成されることから、そのビット列のビット値により表現される値を持つ。したがって、コード別ＩＤ範囲表３０９の各コードに対応するエントリの位置は各コードの値と対応付けることができることは明らかである。つまり、コード種別ポインタ３１１のとる値をコードそのものとすることもできる。そこで、以下の説明においては、各コードに対応するエントリを、各コードの指すエントリと表記することがある。
【００２５】
コード別ＩＤ範囲表３０９ａの下側に表示しているように、コード別ＩＤ範囲表３０９ａのエントリは、設定表示、出現回数、先頭コードＩＤ、末尾コードＩＤ、コード別ＩＤカウンタの項目で構成されている。
設定表示は、対応するコード列ブロックにそのコードが出現するかを１あるいは０で示すものである。コード別ＩＤ範囲表３０９ａの例では、先頭のコード列ブロックにはコードＣとコードＤが出現しないので、コードＣとコードＤのエントリは０であり、他のエントリは１である。コード別ＩＤ範囲表３０９ｂの例では、２番目のコード列ブロックにはコードＤとコードＥが出現しないので、コードＤとコードＥのエントリは０であり、他のエントリは１である。コード別ＩＤ範囲表３０９Ｄの例では、最後のコード列ブロックにはコードＢとコードＣしか出現しないので、コードＢとコードＣのエントリは１であり、他のエントリは０である。
出現回数は、対応するコード列ブロックにそのコードが出現する回数である。コード別ＩＤ範囲表３０９ａの例では、コードＡからコードＥに対して、２、１、０、０、１が格納されている。コード別ＩＤ範囲表３０９ｂの例では、コードＡからコードＥに対して、２、１、１、０、０が格納されている。コード別ＩＤ範囲表３０９ｄの例では、コードＡからコードＥに対して、０、１、１、０、０が格納されている。
【００２６】
先頭コードＩＤ及び末尾コードＩＤは、コード別のコードＩＤの範囲を示すものである。コードＩＤは、コード間で重ならないように、コード毎にコード列ブロック中の出現順に付与されたものである。
コード別ＩＤ範囲表３０９ａの例では、コードＡについては出現回数が２であるのでコードＩＤの範囲はＩＤ１からＩＤ２であり、次のコードＢについては出現回数が１であるので先頭コードと末尾コードは共にＩＤ３である。コードＣ及びコードＤについては出現回数が０であるから、先頭コードＩＤと末尾コードＩＤは共に未設定である。コードＥについては出現回数が１であるので先頭コードと末尾コードは共にＩＤ４である。
以下同様に、コード別ＩＤ範囲表３０９ｂの例では、コードＡの先頭コードはＩＤ１、末尾コードはＩＤ２であり、コードＢの先頭コードと末尾コードは共にＩＤ３、コードＣの先頭コードと末尾コードは共にＩＤ４である。
また、コード別ＩＤ範囲表３０９ｄの例では、コードＢの先頭コードと末尾コードは共にＩＤ１、コードＣの先頭コードと末尾コードは共にＩＤ２である。
【００２７】
なお、ＩＤ１等の値は具体的には１から始まる整数値とすることが好適であるが、それに限ることなく、コード別のＩＤ範囲を識別することのできるものであればよい。また、図の例では、コードＩＤの範囲を先頭コードＩＤと末尾コードＩＤで示しているが、可変長データとなることをいとわなければ、すべてのコードＩＤを列挙することで示すこともできる。
【００２８】
コード別ＩＤカウンタは、コード別ＩＤ範囲表を生成したのちＩＤ関係表を生成するときに必要なカウンタであり、索引データとして必要なものではない。したがって、異なるコードの種別毎にコード別ＩＤ範囲表とは別のカウンタとして設けることもできる。
【００２９】
ＩＤ関係表３１０のエントリは、コード列ブロックのコードに対してつけられたコードＩＤ毎に作成される。ＩＤ関係表３１０の左側に表示しているように、図に示す例では最後のコード列ブロックのリンク表３１０ｄを除いて、コードＩＤ１〜コードＩＤ４に対応してエントリが作成されている。各エントリは、コード位置と次コードＩＤの項目から構成されている。コードＩＤポインタ３１２は、ＩＤ関係表３１０のエントリを指すポインタであり、図の例では、いずれのＩＤ関係表３１０においてもＩＤ１を指している。
【００３０】
各コードＩＤのエントリのコード位置は、そのコードＩＤのコードの位置する検索対象コード列１０ａにおけるコード位置である。ＩＤ関係表３１０ａでは、ＩＤ１に対してＰ１、ＩＤ２に対してＰ４、ＩＤ３に対してＰ２、ＩＤ４に対してＰ３が格納されている。
図の点線の矢印３１３ａ（Ａ）で示すように、ＩＤ関係表３１０ａの１〜２番目のエントリはコードＡに対応するものである。同様に、点線の矢印３１３ａ（Ｂ）で示すように、３番目のエントリはコードＢに、点線の矢印３１３ａ（Ｅ）で示すように、４番目のエントリはコードＥに対応する。
各コードＩＤのエントリの次コードＩＤは、コード列ブロックにおけるそのコードＩＤのコードの次に位置するコードのコードＩＤである。なお、コード列ブロックの末尾位置のコードに対しては、先頭位置のコードのコードＩＤが格納される。したがって、ＩＤ関係表３１０ａでは、次コードＩＤとして、ＩＤ１に対してＩＤ３、ＩＤ２に対してＩＤ１、ＩＤ３に対してＩＤ４、ＩＤ４に対してＩＤ２が格納されている。
【００３１】
ＩＤ関係表３１０ｂでは、ＩＤ１に対してＰ４、ＩＤ２に対してＰ７、ＩＤ３に対してＰ５、ＩＤ４に対してＰ３が格納されている。
図の点線の矢印３１３ｂ（Ａ）で示すように、ＩＤ関係表３１０ｂの１〜２番目のエントリはコードＡに対応するものである。同様に、点線の矢印３１３ｂ（Ｂ）で示すように、３番目のエントリはコードＢに、点線の矢印３１３ｂ（Ｃ）で示すように、４番目のエントリはコードＣに対応する。
また、次コードＩＤとして、ＩＤ１に対してＩＤ３、ＩＤ２に対してＩＤ１、ＩＤ３に対してＩＤ４、ＩＤ４に対してＩＤ２が格納されている。
【００３２】
ＩＤ関係表３１０ｄでは、ＩＤ１に対してＰｎ、ＩＤ２に対してＰｎ−１が格納されている。
図の点線の矢印３１３ｄ（Ｂ）で示すように、ＩＤ関係表３１０ｄの１番目のエントリはコードＢに対応するものである。同様に、点線の矢印３１３ｄ（Ｃ）で示すように、２番目のエントリはコードＣに対応する。
また、次コードＩＤとして、ＩＤ１に対してＩＤ２、ＩＤ２に対してＩＤ１が格納されている。
【００３３】
ＩＤ関係表３１０は、コードＩＤで表した２つのコードがコード列ブロックにおいて連続した位置関係にあることを索引データとして保持している。前方のコード列ブロックの末尾位置のコードと後方のコード列ブロックの先頭位置のコードの重複関係は、索引データ管理表３２１に各コード列ブロックの先頭コードＩＤをもつことで管理される。
【００３４】
図に示すように、索引データ管理表３２１は、コード列ブロック毎のエントリを有し、各エントリは設定表示、先頭コードＩＤ、索引データポインタの項目から構成されている。索引データ管理ポインタ３２２は、索引データ管理表のエントリを指すポインタである。図の例では、索引データ管理ポインタ３２２は、先頭のコード列ブロック１５ａに対応するエントリ１を指している。
索引データ管理表３２１の設定表示には、エントリ１からエントリｍまで１が設定され、それ以外のエントリの設定表示は０である。エントリｍは最後のコード列ブロックに対応するものである。また、索引データ管理表３２１の先頭コードＩＤとして、エントリ１にはＩＤ１が、エントリ２にはＩＤ１が、エントリｍにはＩＤ２が設定されている。
索引データポインタは、点線の矢印３４４ａ、３４４ｂ、３４４ｃ、３４４ｄが示すように、それぞれ対応するコード列ブロックの索引データの格納領域３２４ａ、３２４ｂ、３２４ｃ、３２４ｄを指している。
【００３５】
ＩＤ関係表３１０を図１の（ｃ）に示す従来例の圧縮接尾辞配列５０と比較すると、圧縮接尾辞配列５０では文字毎に次の配列番号がソートされているのに対して、ＩＤ関係表３１０では異なるコードの種別毎にコード位置がソートされている。したがって、同一コードを逐次検索する場合には、キャッシュ効果により高速化を図ることができる。
【００３６】
図３Ｂは、本発明の一実施の形態におけるコード列検索の概念を説明する図である。
検索対象コード列は、図３Ａに例示した検索対象コード列１０ａとし、図３Ａに示すようにコード列ブロックに分割されているものとする。また、検索コード列は図３Ｂに示す検索コード列４０ａとして、コード列検索の概念を説明する。検索対象コード列１０ａのコード列ブロックに対応して、コード別ＩＤ範囲表３０９とＩＤ関係表３１０が生成されており、また索引データ管理表３２１が生成されているものとする。
検索を開始する前に、矢印３４８ａで示す索引データ管理表の先頭のエントリ３２１（１）が読み出され、点線の矢印３４４ａが示すように索引データポインタ３４２ａにより索引データの格納領域３２４ａ内に格納されたコード別ＩＤ範囲表３０９ａとＩＤ関係表３１０ａが取得される。さらに、点線の矢印３４５ａで示すように、先頭コードＩＤ３４１ａに格納されたＩＤ１が読み出されて、一時記憶領域である先頭コードＩＤ３４６ａに設定されている。
【００３７】
検索コード列４０ａには、図に示すように、先頭からコードＥ、コードＡ、コードＢ、コードＣが位置している。そこで、図に点線の矢印３３１ａで示すように、１番目のコード３３２ａであるコードＥが読み出される。次に点線の矢印３３３ａで示すように、先頭のコード列ブロックに対応するコード別ＩＤ範囲表３０９ａのコードＥに対応するエントリ３０９ａ（Ｅ）が読み出される。（もし、先頭のコード列ブロックに検索コード列４０ａの先頭のコードが存在しなければ、その先頭のコードが存在するコード列ブロックに対応する索引データまで読み飛ばす。）
そして点線の矢印３３４ａで示すように、エントリ３０９ａ（Ｅ）からＩＤ範囲３３６ａに含まれるコードＩＤ、図の例ではコードＩＤ４が読み出され、読み出されたコードＩＤ４に対応するエントリ３１０ａ（４）がＩＤ関係表３１０ａから読み出される。
【００３８】
一方、コード列ＩＤ範囲表３０９ａに設定されている先頭のコードであるコードＡの先頭コード、ＩＤ１が一時記憶領域である先頭コードＩＤ３４６ａに設定されている。
そして、双方向の点線の矢印３４７ａで示すように、コードＩＤ４に対応するエントリ３１０ａ（４）の次コードＩＤであるＩＤ２と先頭コードＩＤ３４６ａに設定されているＩＤ１が比較され、次コードＩＤは先頭コードＩＤ以外であると判定される。
【００３９】
次に点線の矢印３３１ｂで示すように、２番目のコード３３２ｂであるコードＡが読み出される。先に述べた双方向の点線の矢印３４７ａでの判定が先頭コードＩＤ以外であったことから、点線の矢印３３３ｂで示すように、１番目のコードＥの場合と同じコード別ＩＤ範囲表３０９ａのコードＡに対応するエントリ３０９ａ（Ａ）が読み出される。そして、双方向の点線の矢印３３５ｂで示すように、ＩＤ関係表３１０ａのコードＩＤ４に対応するエントリ３１０ａ（４）の次コードＩＤ３３７ａであるＩＤ２が、コード別ＩＤ範囲表３０９ａのコードＡに対応するエントリ３０９ａ（Ａ）のコードＩＤの範囲３３６ｂ（ＩＤ１〜ＩＤ２）に含まれるかを判定する。図の例では、この判定はイエスになる。このことは、コードＥ、コードＡのコードの並びが、検索対象コード列１０ａの先頭のコード列ブロックに存在することを意味している。また、ＩＤ関係表３１０ａから読み出されたコードＩＤ４に対応するエントリ３１０ａ（４）のコード位置３３８ａがＰ３であることから、そのコードＥ、コードＡのコードの並びの先頭位置がＰ３であることが分かる。
【００４０】
さらに点線の矢印３３４ｂで示すように、次コードＩＤ３３７ａであるＩＤ２に対応するエントリ３１０ａ（２）の次コードＩＤ３３７ｂであるＩＤ１が読み出される。そして、双方向の点線の矢印３４７ｂに示すように、この読み出されたＩＤ１と、先に先頭コードＩＤ３４６ａに設定されたＩＤ１の比較がおこなわれ、次コードＩＤと先頭コードＩＤが等しいことが判定される。すなわち、２番目のコード３３２ｂであるコードＡと照合する先頭のコード列ブロックのコードＩＤ２のコードＡは、先頭のコード列ブロックの末尾位置に位置するものであることが判定される。
すると、点線の矢印３４８ｂで示すように索引データ管理表の２番目のエントリ３２１（２）が読み出され、点線の矢印３４４ｂが示すように索引データポインタ３４２ｂにより索引データの格納領域３２４ｂがアクセスされ、コード別ＩＤ範囲表３０９ｂとＩＤ関係表３１０ｂが取得される。
また、索引データ管理表の２番目のエントリ３２１（２）の先頭コードＩＤ３４１ｂに格納されたＩＤ１が点線の矢印３４５ｂで示すように一時記憶領域である先頭コードＩＤ３４６ｂに設定される。そして、点線の矢印３３４ｃで示すように、先頭コードＩＤ３４６ｂに設定されたＩＤ１に対応するエントリ３１０ｂ（１）がＩＤ関係表３１０ｂから読み出される。
【００４１】
一方、点線の矢印３３１ｃで示すようにコードＢが３番目のコード３３２ｃとして読み出されると、点線の矢印３３３ｃで示すように、コード別ＩＤ範囲表３０９ｂのコードＢに対応するエントリ３０９ｂ（Ｂ）が読み出される。そして、双方向の点線の矢印３３５ｃで示すように、ＩＤ関係表３１０ｂのコードＩＤ１に対応するエントリ３１０ｂ（１）の次コードＩＤ３３７ｃであるＩＤ３が、コード別ＩＤ範囲表３０９ｂのコードＢに対応するエントリ３０９ｂ（Ｂ）のコードＩＤの範囲３３６ｃ（ＩＤ３〜ＩＤ３）に含まれるかを判定する。図の例では、この判定はイエスになる。したがって、検索対象コード列１０ａは検索コード列ＥＡＢでヒットすることがわかる。
【００４２】
この判定に続いて、点線の矢印３３４ｄで示すように、次コードＩＤ３３７ｃであるＩＤ３に対応するエントリ３１０ｂ（３）の次コードＩＤ３３７ｄであるＩＤ４が読み出される。そして、双方向の点線の矢印３４７ｄに示すように、この読み出されたＩＤ１と、先に先頭コードＩＤ３４６ｂに設定されたＩＤ１の比較がおこなわれ、次コードＩＤと先頭コードＩＤが等しくないことが判定される。
そこで、次に点線の矢印３３１ｄで示すように、４番目のコード３３２ｄであるコードＣが読み出される。また、点線の矢印３３３ｄで示すように、３番目のコードＢの場合と同じコード別ＩＤ範囲表３０９ｂのコードＣに対応するエントリ３０９ｂ（Ｃ）が読み出される。そして、双方向の点線の矢印３３５ｄで示すように、ＩＤ関係表３１０ｂのコードＩＤ３に対応するエントリ３１０ｂ（３）の次コードＩＤ３３７ｄであるＩＤ４が、点線の矢印３３３ｄで示すコードＣに対応するエントリ３０９ｂ（Ｃ）のコードＩＤの範囲３３６ｄ（ＩＤ４〜ＩＤ４）に含まれるかを判定する。図の例では、この判定はイエスになることから、検索対象コード列１０ａは検索コード列ＥＡＢＣでヒットすることがわかる。
この判定に続いて、点線の矢印３３４ｅで示すように、次コードＩＤ３３７ｄであるＩＤ４に対応するエントリ３１０ｂ（４）の次コードＩＤ３３７ｅであるＩＤ２が読み出される。そして、双方向の点線の矢印３４７ｅに示すように、この読み出されたＩＤ２と、先に先頭コードＩＤ３４６ｂに設定されたＩＤ１の比較がおこなわれ、次コードＩＤと先頭コードＩＤが等しくないことが判定される。
そして、ＩＤ関係表３１０ａから読み出されたコードＩＤ２に対応するエントリ３１０ａ（２）のコード位置３３８ｂがＰ４であること、ＩＤ関係表３１０ｂから読み出されたコードＩＤ３に対応するエントリ３１０ｂ（３）のコード位置３３８ｄはＰ５であること、コードＩＤ４に対応するエントリ３１０ｂ（４）のコード位置３３８ｅはＰ６であることから、上述のヒット位置はコード位置Ｐ３、Ｐ４、Ｐ５、Ｐ６であることが分かる。
【００４３】
検索コード列４０ａの図示しない５番目のコードについても、点線の矢印３３４ｆに示すように、次コードＩＤ３３７ｅであるＩＤ２に対応するＩＤ関係表３１０のエントリの次コードＩＤが読み出され、５番目のコードのコード種別の指すコード別ＩＤ範囲表３０９のエントリのコードＩＤの範囲内であるかの判定等が繰り返される。
以上のようにして、本発明の一実施の形態によるコード列検索が実施される。
【００４４】
次に、本発明の一実施の形態における索引データの作成処理を説明する。索引データは、図３Ａの（ｂ）に例示するように、索引データ管理表と、各コード列ブロックに対応する索引データの格納領域に格納されるコード別ＩＤ管理表とＩＤ関係表から構成される。
図４Ａ及び図４Ｂは、本発明の一実施形態における索引データを作成する処理のフローを説明する図である。図４Ａ及び図４Ｂに示す索引データの作成処理フローは、初期処理のものと、各コード列ブロックに対応する索引データ（以下、各コード列ブロックに対応するブロック索引データ、あるいは単にブロック索引データということがある。）の作成処理を順次実行するフローから構成される。
【００４５】
図４Ａは、本発明の一実施形態における索引データを作成する処理、すなわち、各コード列ブロックに対応するブロック索引データを順次作成する処理の前段の処理フローを説明する図である。この前段の処理は、先に述べた初期処理である。
図４Ａに示すように、ステップＳ４０１において、検索対象コード列を設定する。検索対象コード列の設定は、データ格納装置に格納された検索対象となるコード列の集合から、１つのコード列を図２Ａに例示する検索対象コード列読出手段１１１で読み出して、図示しない検索対象コード列設定エリアに設定することを意味する。なお、上述の検索対象コード列設定エリアは、先に述べた「処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶装置」の１つである。以下の説明では、「図示しない検索対象コード列設定エリアに設定する」のような表現に変えて、「検索対象コード列として設定する」あるいは単に「検索対象コード列に設定する」のように記述することもある。検索対象コード列以外についても同様である。
【００４６】
次にステップＳ４０２において、索引データ管理表の格納領域を取得するとともに、索引データ管理ポインタを索引データ管理表の先頭エントリに位置付ける。ステップＳ４０３に進み、検索対象コード列を分割したコード列ブロックの最大コード数を設定する。図３Ａに示す例では、最大コード数は４である。次のステップＳ４０４では、コード列の先頭位置に、検索対象のコード位置の先頭位置を設定する。さらにステップＳ４０５ではコード列の終端位置に、検索対象のコード列の終端位置を設定し、図４Ｂに示すステップＳ４０６に移行する。
以上で索引データ作成処理の初期処理が終了する。図３Ａの例示では、検索対象コード列１０ａが設定され、索引データ管理ポインタ３２２は索引データ管理用３２１の先頭のエントリに位置付けられ、最大コード数には４が、コード列の先頭位置にはＰ１が、コード列の終端位置にはＰｎが設定される。
【００４７】
図４Ｂは、各コード列ブロックに対応するブロック索引データを順次作成する処理の後段の処理フローを説明する図である。
図に示すように、ステップＳ４０６において、残りコード数に、コード列の終端位置からコード列の先頭位置を減じた値を設定し、ステップＳ４０７で、残りコード数は最大コード数より大きいか判定する。
残りコード数が最大コード数より大きければステップＳ４０８に進み、コード列の末尾位置に、コード列の先頭位置から最大コード数分だけ移動した位置を設定する。また、残りコード数が最大コード数より大きくなければステップＳ４０９に進み、コード列の末尾位置に、コード列の終端位置を設定する。
上述のステップＳ４０６〜ステップＳ４０９の処理は、後述の各コード列ブロックに対応する索引データの作成処理の終了を、ステップＳ４０８あるいはステップＳ４０９で設定したコード列の末尾位置で判定するために行われる。
【００４８】
次にステップＳ４１０において、現在索引データ作成対象となっているコード列ブロックの索引データの格納領域を確保するとともに、該格納領域のポインタを取得し、ステップＳ４１１に進む。索引データ作成対象のコード列ブロックは、ステップＳ４０４あるいは後述のステップＳ４１５で設定されるコード列の先頭位置に位置するコードから始まるものである。
【００４９】
ステップＳ４１１では、現在索引データ作成対象となっているコード列ブロックの索引データを作成し、ステップＳ４１０で確保した格納領域に格納するとともに、最先頭コードＩＤを取得する。ステップＳ４１１の処理の詳細、及び最先頭コードＩＤについては、後に図４Ｃ、及び図５Ａ〜図５Ｃを参照して説明する。
【００５０】
次にステップＳ４１２で、索引データポインタの指す索引データ管理表の設定表示に「あり」を、先頭コードＩＤに最先頭コードＩＤを、索引データポインタにステップＳ４１０で取得したポインタを、それぞれ設定する。なお、最先頭コードＩＤは、ステップＳ４１１の処理において設定されているものである。
【００５１】
次にステップＳ４１３で、コード列の末尾位置はコード列の終端位置か判定する。コード列の末尾位置がコード列の終端位置であれば索引データの作成は完了しているので処理を終了する。コード列の末尾位置がコード列の終端位置でなければ、ステップＳ４１４へ進み、索引データ管理ポインタを索引データ管理表の次のエントリに位置付け、ステップＳ４１５でコード列の先頭位置に、コード列の末尾位置を設定してステップＳ４０６に戻る。
以上のステップＳ４０６〜ステップＳ４１５のループ処理を、ステップＳ４１３においてコード列の末尾位置がコード列の終端位置を指していると判定されるまで繰り返し、該判定が得られると全てのコード列に対する索引データの作成が完了しているので、索引データ作成の処理を終了する。
【００５２】
次に、図４Ｂに示すステップＳ４１１の詳細な説明として、本発明の一実施の形態におけるブロック索引データの作成処理を説明する。このブロック索引データの作成処理はどのコード列ブロックに対しても同じであり、コード列ブロックも一つのコード列であることから、以下の説明においては、現在索引データ作成の対象となっているコード列ブロックを、検索対象コード列、あるいは検索対象のコード列という場合もある。
【００５３】
図４Ｃは、本発明の一実施形態におけるブロック索引データを作成する処理の概略フローを説明する図である。
まず、ステップＳ４２０において、検索対象のコード種別数をもとにコード別ＩＤ範囲表の領域を確保すると共に、検索対象コード列に含まれるコードを順次読み出してコード種別毎の出現回数とコードの総数を求める。図３Ａに示す先頭のコード列ブロックの場合のコードの総数は、図４Ａに示すステップＳ４０３で設定した最大コード数と等しい４である。
ステップＳ４２０の処理の詳細は、後に図５Ａを参照して説明する。
【００５４】
次に、ステップＳ４３０で、コード種別毎の出現回数をもとに、コード別ＩＤ範囲表にコード種別毎のコードＩＤの範囲を設定する。ステップＳ４３０の処理の詳細は、後に図５Ｂを参照して説明する。
【００５５】
次にステップＳ４４０で、コード総数をもとにＩＤ関係表の領域を確保すると共に、コード別ＩＤ範囲表を参照しながら、検索対象コード列に含まれるコードを順次読み出してＩＤ関係表を完成させ、処理を終了する。ステップＳ４４０の処理の詳細は、後に図５Ｃを参照して説明する。
【００５６】
図５Ａは、図４Ｂに示すステップＳ４２０の処理の詳細なフローを示すものであり、検索対象のコード列に含まれるコードのコード種別毎の出現回数を計数する処理フローを説明する図である。
【００５７】
図に示すように、ステップＳ５０１において、検索対象コード列を設定する。検索対象コード列の設定は、現在索引データ作成の対象となっているコード列ブロックを、図示しない検索対象コード列設定エリアに設定することを意味する。なお、上述の検索対象コード列設定エリアは、先に述べた「処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶装置」の１つである。以下の説明では、「図示しない検索対象コード列設定エリアに設定する」のような表現に変えて、「検索対象コード列として設定する」あるいは単に「検索対象コード列に設定する」のように記述することもある。検索対象コード列以外についても同様である。
【００５８】
次にステップＳ５０２において、コードの種別数を設定する。コードの種別数は、コード体系により決定されるものであり、予め与えられるものとする。次にステップＳ５０３に進み、図４Ｂに示すステップＳ４１０で確保した領域内に、ステップＳ５０２で設定したコードの種別数をもとにコード別ＩＤ範囲表の格納領域を確保し、出現回数を０に初期化する。続いてステップＳ５０４でコード位置ポインタに、ステップＳ５０１で設定したコード列の先頭位置を設定し、ステップＳ５０５でコード数カウンタに値０を設定する。以上のステップＳ５０１〜ステップＳ５０５の処理は、初期処理である。
【００５９】
初期処理に続いてステップＳ５０６に進み、コード列より、コード位置ポインタの指すコードを取り出す。次にステップＳ５０７で、取り出したコードのコード種別に対応するコード別ＩＤ範囲表のエントリ（以下、コードの指すコード別ＩＤ範囲表ということがある。）の出現回数に値１を加え、ステップＳ５０８でコード数カウンタに値１を加えてステップＳ５０９に進む。
【００６０】
ステップＳ５０９では、コード位置ポインタが、図４ＢのステップＳ４０８あるいはステップＳ４０９で設定されたコード列の末尾位置であるか判定し、末尾位置でなければステップＳ５１０でコード位置ポインタを次のコード位置に進めてステップＳ５０６に戻る。コード位置ポインタがコード列の末尾位置であれば、ステップＳ５１１でコード総数にコード数カウンタを設定して処理を終了する。
以上の処理により、コード別ＩＤ範囲表の出現回数が設定されると共に、コード総数が設定される。
【００６１】
図５Ｂは、図４Ｃに示すステップＳ４３０の処理の詳細なフローを示すものであり、図５Ａに示す処理により設定された出現回数をもとにコード種別毎のコードＩＤ範囲を設定する処理フローを説明する図である。
【００６２】
まずステップＳ５２１において、コード種別ポインタに、コード別ＩＤ範囲表の先頭位置を設定し、次にステップＳ５２２において、コードＩＤカウンタに初期値を設定する。次にステップＳ５２３に進み、コード種別ポインタの指すコード別ＩＤ範囲表より、出現回数を取り出し、ステップＳ５２４で、取り出した出現回数が０か判定する。
【００６３】
出現回数が０でなければ、ステップＳ５２５でコード種別ポインタの指すコード別ＩＤ範囲表の設定表示に「あり」を設定すると共に、先頭コードＩＤとコード別ＩＤカウンタにコードＩＤカウンタの値を設定する。次にステップＳ５２６でコードＩＤカウンタに出現回数を加え、ステップＳ５２７でコード種別ポインタの指すコード別ＩＤ範囲表の末尾コードＩＤに、コードＩＤカウンタの値より１を減じた値を設定してステップＳ５２９に進む。
【００６４】
一方、ステップＳ５２４の判定で出現回数が０となった場合は、ステップＳ５２８でコード種別ポインタの指すコード別ＩＤ範囲表の設定表示に「なし」を設定し、ステップＳ５２８ａでコード種別ポインタの指すコード別ＩＤ範囲表の先頭コードＩＤと末尾コードＩＤに未設定ＩＤを設定してステップＳ５２９に進む。未設定ＩＤとしては、０や−１を使うことができる。
【００６５】
ステップＳ５２９では、コード種別ポインタはコード別ＩＤ範囲表の終端位置であるか判定し、終端位置でなければステップＳ５３０でコード種別ポインタを、コード別ＩＤ範囲表の次のコード種別の位置に進めてステップＳ５２３に戻る。終端位置であれば、コード別ＩＤ範囲表の設定は完了しているので、処理を終了する。
【００６６】
図５Ｃは、図４Ｃに示すステップＳ４３０の処理の詳細なフローを示すものであり、検索対象コード列に含まれるコードをもとにＩＤ関係表を完成させる処理フローを説明する図である。
【００６７】
まずステップＳ５４１で、図４ＢのステップＳ４１０で確保した格納領域内に、図５Ｂに示す処理により求めたコード総数をもとにＩＤ関係表の格納領域を確保し、ステップＳ５４２で、コード位置ポインタに、検索対象コード列の先頭位置を設定する。次にステップＳ５４３で、検索対象コード列より、コード位置ポインタの指すコードを取り出す。そして、ステップＳ５４４で、コードの指すコード別ＩＤ範囲表のコード別ＩＤカウンタを読み出し、コードＩＤポインタに設定する。次にステップＳ５４５で、最先頭コードＩＤに、コードＩＤポインタを設定し、ステップＳ５４６に進む。
【００６８】
ステップＳ５４６では、コード位置ポインタは、図４ＢのステップＳ４０８あるいはステップＳ４０９で設定されたコード列の末尾位置か判定し、コード列の末尾位置でなければ、ステップＳ５４７〜ステップＳ５５４の処理を実行し、該当するコードＩＤの指すＩＤ関係表のコード位置と次コードＩＤを設定してステップＳ５４６に戻る。
【００６９】
まずステップＳ５４７では、コードＩＤポインタの指すＩＤ関係表のコード位置に、コード位置ポインタを設定する。
次にステップＳ５５０で、ステップＳ５４３あるいは後記ステップＳ５５２で取り出したコードの指すコード別ＩＤ範囲表のコード別ＩＤカウンタに１を加え、ステップＳ５５１で、コード位置ポインタを次のコード位置に進める。
【００７０】
次にステップＳ５５２において検索対象コード列より、コード位置ポインタの指すコードを取り出し、ステップＳ５５３で、該取り出したコードの指すコード別ＩＤ範囲表のコード別ＩＤカウンタを読み出し、コードＩＤカウンタの指すＩＤ関係表の次コードＩＤに設定する。
【００７１】
次にステップＳ５５４において、ステップＳ５５３で読み出したコード別ＩＤカウンタをコードＩＤカウンタに設定してステップＳ５４６に戻る。以上のステップＳ５４６〜ステップＳ５５４の処理をコード位置ポインタが検索対象コード列の末尾位置を指すまで繰り返し、コード位置ポインタが検索対象コード列の末尾位置、または、終端位置になるとステップＳ５５５に分岐する。ステップＳ５５５では、コードＩＤポインタの指すＩＤ関係表の、コード位置にコード位置ポインタを、次コードＩＤにステップＳ５４５で設定した最先頭コードＩＤを設定して処理を終了する。
なお、上述の説明のとおり、検索対象コード列の先頭から順次ＩＤ関係表を作成していくこと、コードＩＤの範囲はコード種別毎に分離されていることから、ＩＤ関係表にコードＩＤに対応して格納された次コードＩＤとコード位置は、同一種別のコードのコードＩＤ順に連続してコード位置順で格納されることは明らかである。
以上図４Ａ〜図５Ｃを参照して詳細に説明した処理により、本発明の一実施の形態におけるコード列検索のための索引データが作成される。
【００７２】
次に、図６〜図９Ｂを参照して、本発明の一実施の形態におけるコード列検索の処理を説明する。本発明の一実施の形態におけるコード列検索は、先に図３Ｂを参照してその概念を説明したとおり、まず検索コード列の先頭コードと一致する検索対象コード列中のコードとその位置であるコード位置を求め、次に求めたコード位置からの検索対象コード列中のコードと検索コード列中のコードとの１コード毎の照合を、コード列ブロック対応に作成されたコード別ＩＤ範囲表とＩＤ関係表を用いて行うものである。
【００７３】
そこで、図６〜図９Ｂを参照した具体的説明に入る前に、本発明の一実施の形態におけるコード列検索処理の処理フローの概要と各図面に記載した処理の関係について説明する。
本発明の一実施の形態におけるコード列検索の処理フローは、３重のループを有する。
最外側のループは、コード列ブロック毎のループである。検索対象コード列の先頭のコード列ブロックから終端のコード列ブロックまで検索コード列による検索を繰り返す。この最外側のループの制御フローは、図６に示されている。
次の内側のループは、検索コード列の先頭コードのコードＩＤ毎のループである。あるコード列ブロックにおいて、検索コード列の先頭コードのコードＩＤの範囲に亘って検索コード列による検索を繰り返す。このループの制御フローは図７Ａ及び図７Ｂに示されている。
最内側のループは、検索コード列の１コード毎のコード列ブロックとの照合のループである。検索コード列の先頭のコードから末尾のコードまでの１コード毎の照合が繰り返される。この最内側のループの制御フローは、完全一致検索に関しては図８Ａに、前方一致検索に関しては図８Ｂに、任意コードを含む検索に関しては図８Ｃに示されている。
【００７４】
本発明の一実施の形態におけるコード列検索処理の処理フローによれば、最外側のループ処理のコード列ブロック毎に次の内側のループ処理が呼び出され、検索コード列の先頭コードのコードＩＤ毎に最内側のループ処理が呼び出されてコード列ブロック中の各コードと検索コード列の先頭のコードから末尾のコードまでの１コード毎の照合が繰り返される。
そして、本発明においては、検索対象コード列がコード列ブロック毎に分割されており、最内側のループ処理において、上記１コード毎の照合を繰り返しているとき、検索コード列の末尾のコードの照合が終わらないうちに、当該コード列ブロックの末尾位置に至ることがありうる。すると、次のコード列ブロックに亘っての上記１コード毎の照合の繰り返しを継続する必要がある。
この１コード毎の照合の繰り返しの継続を実現するのが図９Ａ及び図９Ｂにその処理フローを示す次のコード列ブロックに対する検索処理である。この検索処理は最内側のループ処理により呼び出されるが、１コード毎の照合の繰り返しのために再帰的に当該最内側のループ処理を呼び出す。
【００７５】
図６は、先に述べたとおりのものであり、したがって、本発明の一実施の形態におけるコード列検索の処理全体の概略フローを説明する図である。図６に示すフローは、初期処理と、検索対象コード列のうち検索を開始するコード列ブロックを先頭から次のコード列ブロックに順次切り替えて検索するループ処理からなるものである。
【００７６】
まず、ステップＳ６０１において、検索コード列を設定する。この検索コード列の設定は、図２Ｂに示す検索コード列読出手段１１１により読み出された検索コード列を一時記憶領域に設定することにより行われ、その設定された検索コード列の先頭位置は与えられているものとする。
次にステップＳ６０２において、一時記憶領域である検索開始位置の索引データ管理ポインタに、索引データ管理表の先頭のエントリ位置を設定する。
以上で先に述べた初期処理が終了する。
【００７７】
次にステップＳ６０３に進み、検索開始位置の索引データポインタの指す索引データ管理表のエントリを取り出し、ステップＳ６０４において、該取り出したエントリの設定表示は「あり」であるかを判定する。設定表示が「あり」であればステップＳ６０５に進み、設定表示が「あり」でなければ全ての検索は終了しているので、処理を終了する。
【００７８】
ステップＳ６０５では、ステップＳ６０３で取り出したエントリの索引データポインタを取り出し、索引データポインタの指す索引データの格納領域内に格納されたコード別ＩＤ範囲表とＩＤ関係表を取得する。このコード別ＩＤ範囲表とＩＤ関係表の取得は、図５Ａに示すステップＳ５０３及び図５Ｃに示すステップＳ５４１においてそれぞれコード別ＩＤ範囲表とＩＤ関係表の格納領域を確保したときにそれらの先頭アドレスを指すそれぞれのポインタを設定しておき、それらのポインタを利用することで実現することができる。
【００７９】
次にステップＳ６０６において、ステップＳ６０３で取り出したエントリの先頭コードＩＤを取り出し、検索開始位置の先頭コードＩＤに設定する。
次にステップＳ６０８において、ステップＳ６０５で取得したコード別ＩＤ範囲表とＩＤ関係表をもとに、該当するコード列ブロックを検索する。ステップＳ６０８の処理の詳細は、後に図７Ａ及び図７Ｂを参照して説明する。
次にステップＳ６０９で、検索開始位置の索引管理データポインタに索引データ管理表の次のエントリ位置を設定してステップＳ６０３に戻る。
【００８０】
上述のステップＳ６０３〜ステップＳ６０９のループ処理を、ステップＳ６０９において検索開始位置の索引データ管理ポインタを更新しながらステップ６０４で索引データ管理表のエントリの設定表示が「あり」ではないと判定されるまで繰り返す。
なお、上述のステップＳ６０２、Ｓ６０９の検索開始位置の索引データ管理ポインタの設定処理及びステップＳ６０６の先頭コードＩＤの設定処理は、先に述べたように検索を開始するコード列ブロックから次のコード列ブロックに亘って１コード毎の照合が行われる場合があるので、検索を開始するコード列ブロックに係わる索引データ管理ポインタ及び先頭コードＩＤを退避するためのものである。この先頭コードＩＤは、後に図８Ａを参照して説明するように、コードの照合が現在のコード列ブロックの末尾にまで至り、次のコード列ブロックのコードとの照合に進む判定に用いられる。
【００８１】
次に、図７Ａ及び図７Ｂを参照して、図６に示すステップＳ６０８の検索処理について詳細に説明する。
図７Ａは、本発明の一実施の形態における、あるコード列ブロックを検索開始位置のコード列ブロックとして行われるコード列検索の前段の処理フローを説明する図である。
まず、ステップＳ７０１において、検索先頭位置に、検索コード列の先頭位置を設定し、ステップＳ７０２で、検索末尾位置に、検索コード列の末尾位置を設定する。
【００８２】
次にステップＳ７０３で、検索先頭位置の指す検索コード列より検索コードを取り出し、検索先頭位置の検索コードに設定する。ステップＳ７０４で、検索先頭位置の検索コードの指すコード別ＩＤ範囲表より、設定表示を取り出し、ステップＳ７０５で該取り出した設定表示は「あり」であるか判定する
設定表示が「あり」でなければ、検索先頭位置の検索コードが検索対象コード列中に存在しないということであるから、検索処理を終了する。
【００８３】
ステップＳ７０５での判定が設定表示は「あり」であれば、ステップＳ７０６に進み、検索先頭位置の検索コードの指すコード別ＩＤ範囲表より先頭コードＩＤを取り出し、検索開始コードＩＤに設定する。次にステップＳ７０７で、検索先頭位置の検索コードの指すコード別ＩＤ範囲表より末尾コードＩＤを取り出して検索終了コードＩＤに設定する。
ステップＳ７０６の処理は、先に述べた検索コード列の先頭コードのコードＩＤ毎のループ処理における処理中のコードＩＤである検索開始コードＩＤを、コードＩＤの範囲の先頭コードＩＤに初期設定するものであり、ステップ７０７の処理は、処理対象のコードＩＤの終端を識別可能とするためのものである。
ステップＳ７０７に引き続き、図７Ｂに示すステップＳ７１１に進む。
【００８４】
図７Ｂは、本発明の一実施の形態における、あるコード列ブロックを検索開始位置のコード列ブロックとして行われるコード列検索の後段の処理フローを説明する図である。
ステップＳ７１１では、検索進行位置にステップＳ７０１で設定した検索先頭位置を設定する。検索進行位置は、先に述べた図８Ａ等に示す検索コード列の１コード毎のコード列ブロックとの照合ループにおける、照合対象のコードのコード位置を示すものであり、ステップＳ７１１では、検索先頭位置、すなわち検索コード列の先頭位置に初期設定される。
次にステップＳ７１２において、索引データ管理ポインタに、図６に示すステップＳ６０２で設定した検索開始位置の索引データ管理ポインタを設定し、ステップＳ７１３で一時記憶領域である先頭コードＩＤに、図６に示すステップＳ６０７で設定した検索開始位置の先頭コードＩＤを設定する。さらにステップＳ７１４において、検索開始コードＩＤを退避してステップＳ７１５に進む。
【００８５】
ここで検索開始コードＩＤを退避するのは、ステップＳ７１５の処理において、先に述べたように複数のコード列ブロックに亘ってコード列の照合が行われる可能性がある。その場合には再帰的に図８Ａ等の処理が呼び出され、その際に次のコード列ブロックの先頭のコードの指すコード別ＩＤ範囲表（次のコード列ブロックに対応したもの）の先頭コードＩＤに検索開始コードＩＤが変更される可能性があるからである。
【００８６】
ステップＳ７１５では、先に述べた、コード列ブロック中の各コードと検索コード列の先頭のコードから末尾のコードまでの１コード毎の照合による検索を行う。そして、検索が成功であったか失敗であったかを返す。ステップＳ７１５の詳細については、完全一致検索に関しては図８Ａ、前方一致検索に関しては図８Ｂ、任意コードを含む検索に関しては図８Ｃを参照して後に説明する。
【００８７】
次にステップＳ７１６において、ステップＳ７１４で退避した検索開始コードＩＤを復元する。そしてステップＳ７１７において、検索開始位置の索引データ管理ポインタの指す索引データ管理表のエントリを取り出し、ステップＳ７１８で、該取り出したエントリの索引データポインタの指す索引データの格納領域内に格納されたコード別ＩＤ範囲表とＩＤ関係表を取得する。上記ステップＳ７１７とステップＳ７１８の処理は、先に述べたように、ステップＳ７１５の処理において複数のコード列ブロックに亘ってコード列の照合が行われる可能性があり、その場合には、図６に示すステップＳ６０５で取得したコード別ＩＤ範囲表とＩＤ関係表とは別のコード別ＩＤ範囲表とＩＤ関係表が用いられているので、図６のステップＳ６０２あるいはステップＳ６０７で設定した検索開始位置の索引データ管理ポインタを用いて再度コード別ＩＤ範囲表とＩＤ関係表を取得するものである。
【００８８】
次にステップＳ７１９に進み、ステップＳ７１５における検索は成功であったか失敗であったかを判定する。失敗であればステップＳ７２１に進み、成功であれば、ステップＳ７２０で、検索開始コードＩＤの指すＩＤ関係表よりコード位置を取り出し、検索結果コード位置に出力してステップＳ７２１に進む。
【００８９】
ステップＳ７２１では、検索開始コードＩＤは検索終了コードＩＤと一致するか判定し、一致しなければ、ステップＳ７２２で、検索開始コードＩＤを次のコードＩＤに更新してステップＳ７１１に戻る。
検索開始コードＩＤと検索終了コードＩＤが一致すれば、現在処理中のコード列ブロックにおける、検索コード列の先頭コードが指すコード別ＩＤ範囲表のコードＩＤの範囲の検索が終了しているので、図６に示す処理に戻る。
【００９０】
次に、図８Ａ、図８Ｂ及び図８Ｃを参照して、図７Ｂに示すステップＳ７１５の処理について詳細に説明する。先に述べたように、検索の態様が完全一致検索であるか、前方一致検索であるか、あるいは任意コードを含む検索であるかによって、ステップＳ７１５の処理は、図８Ａ、図８Ｂあるいは図８Ｃに例示するものとなる。
【００９１】
図８Ａは、本発明の一実施の形態における、完全一致検索の処理フローを説明する図である。
図に示すように、ステップＳ８１０でコードＩＤポインタに検索開始コードＩＤを設定する。この検索開始コードＩＤは、図７Ａに示すステップＳ７０６で初期設定されたか、あるいは図７Ｂに示すステップＳ７２２で更新され設定されたものである。次にステップＳ８１１において、コードＩＤポインタの指すＩＤ関係表より次コードＩＤを取り出し、検索コードＩＤに設定するとともに、コードＩＤポインタに設定する。
【００９２】
次にステップＳ８１２で検索進行位置は検索末尾位置か判定し、検索末尾位置でなければステップＳ８１３に進み、検索末尾位置であれば、１コード毎の照合が検索コード列の末尾まで成功したことになるので、検索成功を返して図７Ｂに示すループ処理に戻る。
ステップＳ８１３では、ステップＳ８１１で取り出した次コードＩＤは先頭コードＩＤと一致するか判定する。先頭コードＩＤは、図７Ｂに示すステップＳ７１３で設定したものである。次コードＩＤと先頭コードＩＤが一致しなければ、ステップＳ８１４に進み、検索進行位置を、検索コード列の次の検索コードの位置に進め、ステップＳ８１５で、検索進行位置の指す検索コード列より検索コードを取り出し、ステップＳ８１６で、該取り出した検索コードの指すコード別ＩＤ範囲表より先頭コードＩＤと末尾コードＩＤを取り出す。
【００９３】
そしてステップＳ８１７において、ステップＳ８１１で設定した検索コードＩＤがステップＳ８１６で取り出した先頭コードＩＤと末尾コードＩＤの範囲内か判定し、範囲内であればステップＳ８１１に戻り、範囲内でなければ照合が取れなかったコードが存在したことになるので、検索失敗を返して図７Ｂに示すループ処理に戻る。
【００９４】
一方、ステップＳ８１３で、次コードＩＤと先頭コードＩＤが一致すると判定されると、ステップＳ８１８に進み、次のコード列ブロックを検索する。ステップＳ８１８の処理の詳細は、後に図９Ａ及び図９Ｂを参照して説明する。
【００９５】
次にステップＳ８１９において、次のコード列ブロックの検索は成功であるか判定する。成功であれば検索成功を返し、成功でなければ検索失敗を返して図７Ｂに示すループ処理に戻る。
【００９６】
図８Ｂは、本発明の一実施の形態における前方一致検索の処理フローを説明する図である。図８Ａに示す完全一致検索の処理フローと比較すると、図８Ｂに示すステップＳ８３０〜ステップＳ８３８の各ステップで実行する処理自体は、そのステップ番号から２０を引いたステップ番号の、図８Ａに示すステップＳ８１０〜ステップＳ８１８の各ステップで実行する処理と同じである。
【００９７】
しかし、図８Ａに示す完全一致検索のステップＳ８１７では、検索コードＩＤは先頭コードＩＤと末尾コードＩＤの範囲内ではないと判定すると検索失敗を返して図７Ｂに示す処理に戻るのに対して、図８Ｂに示す前方一致検索のステップＳ８３７では、検索コードＩＤは先頭コードＩＤと末尾コードＩＤの範囲内ではないと判定しても、検索成功を返して図７Ｂに示すループ処理に戻る。
なお、ステップＳ８３１において、コードＩＤポインタの指すＩＤ関係表のエントリより、次コードＩＤに加えてコード位置を順次取り出しておき、ステップＳ８３７において検索コードは索引コードと一致しないと判定したとき、ステップＳ８３１で最後に取り出したコード位置を、検索成功と共に検索結果として返してもよい。この最後に取り出したコード位置は、上述の索引コードのコードＩＤ範囲に含まれる次コードＩＤとＩＤ関係表の同一エントリに格納されたコード位置である。このコード位置に位置する検索対象コード列のコードまでは、検索コード列の検索コードと一致している。上記最後に取り出したコード位置と、図７Ｂに示すステップＳ７２０で検索開始コードの指すＩＤ関係表から取り出すコード位置を検索結果コード位置として出力することにより、検索コード列と前方一致する検索対象コード列のコード位置の範囲を知ることができる。
【００９８】
また、図８Ａに示す完全一致検索のステップＳ８１８で次のコード列ブロックを検索したのち、ステップＳ８１９で次のコード列ブロックの検索は成功であるか判定し、成功であれば検索成功を返し、成功でなければ検索失敗を返して図７Ｂに示すループ処理に戻るのに対して、図８Ｂに示す前方一致検索においては、ステップＳ８３８で次のコード列ブロックを検索したのち、直ちに検索成功を返して図７Ｂに示すループ処理に戻る。
【００９９】
これは、図７Ａに示すステップＳ７０５の判定処理により、検索コード列中の先頭の検索コードが検索対象コード列中に存在することが保証されており、したがって、少なくとも検索コード列の先頭のコードまでは一致するコード列が検索対象コード列に存在するので、検索成功を返して図７Ｂに示すループ処理に戻る。
上述のステップＳ８３７での判定後のリターン種別及びステップＳ８３８以降の処理以外に関しては、先に述べたように全て図８Ａに示すものと同じであるので、その説明は省略する。
【０１００】
図８Ｃは、本発明の一実施の形態における任意コードを含む検索の処理フローを説明する図である。ここで任意コードとは、検索対象コード列の任意のコードと照合するコードである。検索コード列が任意コードを含み、任意コード以外の全てのコードが一致するコード列が検索対象コード列に存在すれば、その検索対象コード列は、前記任意コードを含む検索コード列でヒットする。
【０１０１】
図８Ｃに示すフローを図８Ａに示す完全一致検索の処理フローと比較すると、図８Ｃに示すステップＳ８５０〜ステップＳ８５９の各ステップで実行する処理は、ステップＳ８５５ａの処理がステップＳ８５５とステップＳ８５６の間に挿入されている以外は、そのステップ番号から４０を引いたステップ番号の、図８Ａに示すステップＳ８１０〜ステップＳ８１９の各ステップで実行する処理と全く同じである。
【０１０２】
ステップＳ８５５ａでは、ステップＳ８５５で取り出した検索コードは任意コードか判定する。ステップＳ８５５ａで任意コードと判定されると、ステップＳ８５６及びステップＳ８５７のコードＩＤの範囲の判定処理を経ることなくステップＳ８５１に戻る。ステップＳ８５５ａで任意コードと判定されなければ、ステップＳ８５６に進む。
上述のステップＳ８５５ａでの判定処理以外は、先に述べたように全て図８Ａに示すものと同じであるので、その説明は省略する。
【０１０３】
次に、図８Ａに示すステップＳ８１８、図８Ｂに示すステップＳ８３８、あるいは図８Ｃに示すステップＳ８５８の次のコード列ブロックの検索処理について詳細に説明する。
図９Ａは、本発明の一実施の形態における次のコード列ブロックの検索の処理フローの前段を説明する図である。
【０１０４】
図に示すように、ステップＳ９０１で、索引データ管理ポインタに索引データ管理表の次のエントリ位置を設定する。このとき索引データ管理ポインタには、図７Ｂに示すステップＳ７１２において、検索開始位置の索引データ管理ポインタが設定されている。次にステップＳ９０２に進み、該索引データ管理ポインタの指す索引データ管理表のエントリを取り出し、ステップＳ９０３において、該取り出したエントリの設定表示は「あり」であるかを判定する。
【０１０５】
設定表示が「あり」でなければそれ以上コード列ブロックは存在せず、１コード毎の照合が途中で中断されることになるので、検索失敗を返して図８Ａ、図８Ｂあるいは図８Ｃの処理に戻る。
【０１０６】
一方、ステップＳ９０３においてエントリの設定表示は「あり」であると判定されると、図９Ｂに示すステップＳ９１１以降の処理に進み、１コード毎の照合をさらに進める。
【０１０７】
図９Ｂは、本発明の一実施の形態における次のコード列ブロックの検索の処理フローの後段を説明する図である。
【０１０８】
ステップＳ９１１では、図９Ａに示すステップＳ９０２で先に取り出したエントリの索引データポインタの指す索引データの格納領域内に格納されたコード別ＩＤ範囲表とＩＤ関係表を取得する。
【０１０９】
次にステップＳ９１２において、索引管理表のエントリの先頭コードＩＤを取り出して一時記憶領域である先頭コードＩＤに設定し、ステップＳ９１３で、その先頭コードＩＤを検索開始コードＩＤに設定してステップＳ９１４に進む。
【０１１０】
ステップＳ９１４では、図８Ａ、図８Ｂあるいは図８Ｃに示す処理を再帰的に呼び出し、コード列ブロック中の各コードと検索コード列の先頭のコードから末尾のコードまでの１コード毎の照合による検索を行う。そして、検索が成功であったか失敗であったかを返す。
ステップＳ９１５では、ステップＳ９１４での検索が成功であれば検索成功を、失敗であれば検索失敗を返して、図８Ａ、図８Ｂあるいは図８Ｃに示す処理に戻る。
【０１１１】
以上、本発明の実施形態について詳細に説明した。以下においては、本発明についての理解をさらに容易にするために、図１０Ａ〜図１０Ｃを参照して本発明の一実施の形態におけるコード列検索のうち完全一致検索の処理の流れについて説明する。図１０Ａ〜図１０Ｃに例示すものは、検索対象コード列を図３Ａに示すもののうち２番目までのコード列ブロックまでのものとし、検索コード列をＡＢＣとしたものである。以下において、上記検索対象コード列を、図３Ａの表記と同様に、検索対象コード列１０ａと表記することがある。
【０１１２】
図１０Ａと図１０Ｂは、検索対象コード列の先頭のコード列ブロックからの処理の流れを説明する図であり、図６に示す最外側のループ処理については、１順目のループ処理に相当する。
図１０Ａは、そのうちの先頭のコード列ブロックを対象とした検索の流れを説明するものである。
図において、符号７０１ａを付した点線で囲ったブロックには、検索コード列ＡＢＣの各検索コードを先頭から処理する流れが記載されている。言い換えれば、該ブロック７０１ａは、検索進行位置のコードの変化を示すものである。符号７０２ａを付した点線で囲ったブロックには、その検索進行位置のコードの指すコード別ＩＤ範囲表３０９ａのコードＩＤの範囲と、コード列ブロックの先頭位置にあるコードＡの指すコード別ＩＤ範囲表３０９ａの先頭コードＩＤ７４２ａであるＩＤ１が記載されている。符号７０３ａを付した点線で囲ったブロックには、ＩＤ関係表３１０ａから順次次コードを求める流れが記載されている。
また、図中括弧書きで示しているのは、図に示す処理の流れに関連する図６〜図９Ｂに示す処理ステップである。
【０１１３】
検索を開始する前の処理として、図の矢印７３１ａに示すように、図６の（以下の説明では、図面番号の表記は省略する。）ステップＳ６０３で、索引データ管理表の先頭のエントリ７０４ａが取り出される。そして、図の矢印７３４ａに示すように、ステップＳ６０５で該エントリの索引データポインタ７３３ａに基づき索引データの格納領域７０５ａ内に格納されたコード別ＩＤ範囲表３０９ａとＩＤ関係表３１０ａが取得される。そして、点線の矢印７３５ａに示すように、ステップＳ６０６で、該エントリ７０４ａの先頭コードＩＤ７３２ａに格納された先頭コードＩＤであるＩＤ１が読み出されて、先頭コードＩＤ７４２ａに設定される。  
【０１１４】
最初に検索コード列の先頭に位置するコードＡがブロック７０１ａに示すようにステップＳ７０３で取り出され、ブロック７０２ａへの矢印７２３ａで示すように、コードＡの指すコード別ＩＤ範囲表３０９ａの先頭コードＩＤであるＩＤ１がステップＳ７０６で取り出されて検索開始コードＩＤに設定される。また末尾コードＩＤであるＩＤ１がステップＳ７０７で取り出されて検索終了コードＩＤに設定される。
次に、ブロック７０２ａのＩＤ１からブロック７０３ａへの矢印７２４ａで示すように、ＩＤ１の指すＩＤ関係表３１０ａの次コードＩＤであるＩＤ３がステップＳ８１０及びステップＳ８１１により取り出される。そして、ブロック７０３ａの、ＩＤ１の指すＩＤ関係表３１０ａの次コードＩＤであるＩＤ３と、ブロック７０２ａの、先頭コードＩＤ７４２ａの間の双方向の点線の矢印７３６ａで示すように、ステップＳ８１３において、次コードＩＤであるＩＤ３は先頭コードＩＤであるＩＤ１とは異なることが判定される。
【０１１５】
すると、ブロック７０１ａのコードＡからコードＢへの矢印７２１ａに示すように、ステップＳ８１４で次のコード位置のコードが処理対象となり、ステップＳ８１５でコードＢが取り出される。ブロック７０２ａへの矢印７２３ｂで示すように、ステップＳ８１６でコードＢの指すコード別ＩＤ範囲表３０９ａの先頭コードＩＤであるＩＤ３と末尾コードＩＤであるＩＤ３がコードＩＤ範囲として取り出される。
【０１１６】
そして、ブロック７０３ａの、ＩＤ１の指すＩＤ関係表３１０ａの次コードＩＤであるＩＤ３とブロック７０２ａの、コードＢの指すコード別ＩＤ範囲表３０９ａのコードＩＤ範囲の間の双方向の点線の矢印７２５ｂで示すように、ステップＳ８１７においてＩＤ１の指すＩＤ関係表３１０ａの次コードＩＤであるＩＤ３がコードＢの指すコード別ＩＤ範囲表３０９ａのコードＩＤ範囲であることが判定される。
すると次に、ブロック７０３ａ内の矢印７２４ｂで示すように、ＩＤ３の指すＩＤ関係表３１０ａの次コードＩＤであるＩＤ４がステップＳ８１１で取り出される。そして、ブロック７０３ａの、ＩＤ３の指すＩＤ関係表３１０ａの次コードＩＤであるＩＤ４と、ブロック７０２ａの、先頭コードＩＤ７４２ａの間の双方向の点線の矢印７３６ｂで示すように、ステップＳ８１３において、次コードＩＤであるＩＤ４は先頭コードＩＤであるＩＤ１とは異なることが判定される。
【０１１７】
次にブロック７０１ａのコードＢからコードＣへの矢印７２１ｂに示すように、ステップＳ８１４で次のコード位置のコードが処理対象となり、ステップＳ８１５でコードＣが取り出される。ブロック７０２ａへの矢印７２３ｃで示すように、ステップＳ８１６でコードＣの指すコード別ＩＤ範囲表３０９ａの先頭コードＩＤと末尾コードＩＤがコードＩＤ範囲として取り出される。しかし、図に示すように、コードＣは先頭のコード列ブロックには存在せず、先頭コードＩＤと末尾コードＩＤには有意なコードＩＤは格納されていない（図５Ｂに示すステップＳ５２８ａで未設定ＩＤが設定されている。）ので、双方向の点線の矢印７２５ｃで示すステップＳ８１３での判定は、次コードＩＤはコード範囲の範囲外となり、検索失敗となる。そこで、検索失敗を返して図７Ｂに示すループ処理に戻る。
つまり、検索対象コード列１０ａの先頭のコード列ブロックのうち、コードＩＤがＩＤ１であるコードＡからのコード列は、検索コード列ＡＢＣと一致しないことを示している。これは、検索対象コード列１０ａの先頭のコード列ブロックのうち、コードＩＤがＩＤ１であるコードＡからの３コードのコード列は、図３Ａの（ａ）に示すようにＡＢＥであり、ＡＢＣではないことに整合している。
【０１１８】
図１０Ｂに示すのは、検索コード列ＡＢＣの検索開始コードＩＤを、ステップＳ７２２でコードＡのＩＤ１の次のコードＩＤであるＩＤ２として先頭のコード列ブロックから検索する流れである。図７Ｂに示すループ処理では、図１０Ａに示すものは１順目の処理であり、図１０Ｂに示す処理は２順目の処理である。
そして、この２順目の処理においては、検索対象コード列と検索コード列間の照合が先頭のコード列ブロックの次のコード列ブロックに亘って行われる。
【０１１９】
図１０Ｂのブロック７０２ａ内の矢印に示すように、図７Ｂに示すループ処理のステップＳ７２２において、検索開始コードＩＤがＩＤ１からＩＤ２に更新される。そして、ブロック７０２ａのＩＤ２からブロック７０３ａへの矢印７２４ｃで示すように、ＩＤ２の指すＩＤ関係表３１０ａの次コードＩＤであるＩＤ１がステップＳ８１０及びステップＳ８１１により取り出される。また、ブロック７０３ａの、ＩＤ２の指すＩＤ関係表３１０ａの次コードＩＤであるＩＤ１と、ブロック７０２ａの、先頭コードＩＤ７４２ａの間の双方向の点線の矢印７３６ｃで示すように、ステップＳ８１３において、次コードＩＤであるＩＤ１は先頭コードＩＤであるＩＤ１と一致することが判定される。
【０１２０】
すると、点線の矢印７３７ａで示すように、ステップＳ９０１において、索引データ管理表の先頭のエントリ７０４ａの次のエントリ７０４ｂが取り出される。そして、図の矢印７３９aに示すように、ステップＳ９１１でエントリ７０４ｂの索引データポインタ７３３ｂに基づき索引データの格納領域７０５ｂ内に格納されたコード別ＩＤ範囲表３０９ｂとＩＤ関係表３１０ｂが取得される。また、エントリ７０４ｂの先頭コードＩＤ７３２ｂに格納された先頭コードＩＤであるＩＤ１が図の矢印７３８ａに示すように、ステップＳ９１２で先頭コードＩＤ７４２ｂに設定される。
【０１２１】
続いて矢印７２４ｄで示すように、先頭コードＩＤ７４２ｂに設定されたＩＤ１の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ３が、ステップＳ９１３及び再帰的に呼び出された図８Ａに示す処理のステップＳ８１１により取り出される。そして、そのＩＤ３と、ブロック７０２ｂの、先頭コードＩＤ７４２ｂの間の双方向の点線の矢印７３６ｄで示すように、ステップＳ８１３において、次コードＩＤであるＩＤ３は先頭コードＩＤであるＩＤ１と異なることが判定される。
【０１２２】
そこで、ブロック７０１ａのコードＡからコードＢへの矢印７２１ａに示すように、ステップＳ８１４で次のコード位置のコードが処理対象とされ、ステップＳ８１５で検索コード列から先頭のコードＡの次のコードＢが取り出される。ブロック７０２ｂへの矢印７２３ｄで示すように、ステップＳ８１６でコードＢの指すコード別ＩＤ範囲表３０９ｂの先頭コードＩＤであるＩＤ３と末尾コードＩＤであるＩＤ３がコードＩＤ範囲として取り出される。
そして、ブロック７０３ｂの、ＩＤ１の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ３とブロック７０２ｂの、コードＢの指すコード別ＩＤ範囲表３０９ｂのコードＩＤ範囲の間の双方向の点線の矢印７２５ｄで示すように、ステップＳ８１７においてＩＤ１の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ３がコードＢの指すコード別ＩＤ範囲表３０９ｂのコードＩＤ範囲であることが判定される。
すると次に、ブロック７０３ｂ内の矢印７２４ｅで示すように、ＩＤ３の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ４がステップＳ８１１で取り出される。そして、その次コードＩＤであるＩＤ４と、ブロック７０２ｂの、先頭コードＩＤ７４２ｂの間の双方向の点線の矢印７３６ｅで示すように、ステップＳ８１３において、次コードＩＤであるＩＤ４は先頭コードＩＤであるＩＤ１とは異なることが判定される。
【０１２３】
次に、ブロック７０１ａのコードＢからコードＣへの矢印７２１ｂに示すように、ステップＳ８１４で次のコード位置のコードが処理対象となり、ステップＳ８１５でコードＣが取り出される。ブロック７０２ｂへの矢印７２３ｅで示すように、ステップＳ８１６でコードＣの指すコード別ＩＤ範囲表３０９ｂの先頭コードＩＤであるＩＤ４と末尾コードＩＤであるＩＤ４がコードＩＤ範囲として取り出される。
【０１２４】
そして、ブロック７０３ｂの、ＩＤ３の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ４とブロック７０２ｂの、コードＣの指すコード別ＩＤ範囲表３０９ｂのコードＩＤ範囲の間の双方向の点線の矢印７２５ｅで示すように、ステップＳ８１７においてＩＤ２の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ４がコードＣの指すコード別ＩＤ範囲表３０９ｂのコードＩＤ範囲であることが判定される。
【０１２５】
つまり、検索対象コード列１０ａのうち、コードＩＤがＩＤ２であるコードＡからのコード列は、検索コード列ＡＢＣと一致することが示されている。これは、検索対象コード列１０ａのうち、コードＩＤがＩＤ２であるコードＡからのコード列は、図３Ａの（ａ）に示すようにＡＢＣであることに整合している。
そこでステップＳ７２０で、矢印７２８ａに示すように、符号７０５ａで示す検索結果コード位置に、検索開始コードＩＤであるＩＤ２の指すＩＤ関係表３１０ａのコード位置Ｐ４を設定する。
【０１２６】
そして、検索開始コードＩＤであるＩＤ２は、ステップＳ７０７で設定された検索終了コードＩＤであることから、先頭のコード列ブロックを検索開始位置とする検索は終了し、図６に示すループ処理に戻り、検索開始位置を１つ進めて、すなわち先頭から２番目のコード列ブロックからの検索を行う。
【０１２７】
図１０Ｃは、検索対象コード列の２番目のコード列ブロックからの処理の流れを説明する図であり、図６に示す最外側のループ処理については、２順目のループ処理に相当する。以下説明する処理の流れは、先に図１０Ａを参照して説明したものと同様なものである。
検索を開始する前の処理として、図の矢印７３１ｂに示すように、ステップＳ６０９で検索開始位置の索引データ管理ポインタの値が更新され、ステップＳ６０３で索引データ管理表の先頭のエントリ７０４ｂが取り出される。そして、図の矢印７３４ｂに示すように、ステップＳ６０５で該エントリの索引データポインタ７３３ｂに基づき索引データの格納領域７０５ｂ内に格納されたコード別ＩＤ範囲表３０９ｂとＩＤ関係表３１０ｂが取得される。また、矢印７３５ｂに示すように、ステップＳ６０６で、該エントリ７０４ｂの先頭コードＩＤ７３２ｂに格納された先頭コードＩＤであるＩＤ１が読み出されて、先頭コードＩＤ７４２ｂに設定される。
【０１２８】
２番目のコード列ブロックからの検索の最初に、検索コード列の先頭に位置するコードＡがブロック７０１ａに示すようにステップＳ７０３で再度取り出される。そして、ブロック７０２ｂへの矢印７２３ｆで示すように、コードＡの指すコード別ＩＤ範囲表３０９ｂの先頭コードＩＤであるＩＤ１がステップＳ７０６で取り出されて検索開始コードＩＤに設定される。また末尾コードＩＤであるＩＤ２がステップＳ７０７で取り出されて検索終了コードＩＤに設定される。
次に、ブロック７０２ｂのＩＤ１からブロック７０３ｂへの矢印７２４ｆで示すように、ＩＤ１の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ３がステップＳ８１０及びステップＳ８１１により取り出される。そして、ブロック７０３ｂの、ＩＤ１の指すＩＤ関係表３０９ｂの次コードＩＤであるＩＤ３と、ブロック７０２ｂの、先頭コードＩＤ７４２ｂの間の双方向の点線の矢印７３６ｇで示すように、ステップＳ８１３において、次コードＩＤであるＩＤ３は先頭コードＩＤであるＩＤ１とは異なることが判定される。
【０１２９】
すると、ブロック７０１ａのコードＡからコードＢへの矢印７２１ａに示すように、ステップＳ８１４で次のコード位置のコードが処理対象となり、ステップＳ８１５でコードＢが取り出される。ブロック７０２ｂへの矢印７２３ｇで示すように、ステップＳ８１６でコードＢの指すコード別ＩＤ範囲表３０９ｂの先頭コードＩＤであるＩＤ３と末尾コードＩＤであるＩＤ３がコードＩＤ範囲として取り出される。
【０１３０】
そして、ブロック７０３ｂの、ＩＤ１の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ３とブロック７０２ｂの、コードＢの指すコード別ＩＤ範囲表３０９ｂのコードＩＤ範囲の間の双方向の点線の矢印７２５ｇで示すように、ステップＳ８１７においてＩＤ１の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ３がコードＢの指すコード別ＩＤ範囲表３０９ｂのコードＩＤ範囲内であることが判定される。
すると次に、ブロック７０３ｂ内の矢印７２４ｇで示すように、ＩＤ３の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ４がステップＳ８１１で取り出される。そして、ブロック７０３ｂの、ＩＤ３の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ４と、ブロック７０２ｂの、先頭コードＩＤ７４２ｂの間の双方向の点線の矢印７３６ｈで示すように、ステップＳ８１３において、次コードＩＤであるＩＤ４は先頭コードＩＤであるＩＤ１とは異なることが判定される。
【０１３１】
次にブロック７０１ａのコードＢからコードＣへの矢印７２１ｂに示すように、ステップＳ８１４で次のコード位置のコードが処理対象となり、ステップＳ８１５でコードＣが取り出される。ブロック７０２ｂへの矢印７２３ｈで示すように、ステップＳ８１６でコードＣの指すコード別ＩＤ範囲表３０９ｂの先頭コードＩＤであるＩＤ４と末尾コードＩＤであるＩＤ４がコードＩＤ範囲として取り出される。
【０１３２】
そして、ブロック７０３ｂの、ＩＤ３の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ４とブロック７０２ｂの、コードＣの指すコード別ＩＤ範囲表３０９ｂのコードＩＤ範囲の間の双方向の点線の矢印７２５ｈで示すように、ステップＳ８１７においてＩＤ３の指すＩＤ関係表３１０ｂの次コードＩＤであるＩＤ４がコードＣの指すコード別ＩＤ範囲表３０９ｂのコードＩＤ範囲内であることが判定される。
【０１３３】
つまり、２番目のコード列ブロック１５ｂのうち、コードＩＤがＩＤ１であるコードＡからのコード列は、検索コード列ＡＢＣと一致することが示されている。これは、２番目のコード列ブロック１５ｂのうち、コードＩＤがＩＤ１であるコードＡからのコード列は、図３Ａの（ａ）に示すようにＡＢＣであることに整合している。
そこでステップＳ７２０で、矢印７２８ｂに示すように、符号７０５ｂで示す検索結果コード位置に、検索開始コードＩＤであるＩＤ１の指すＩＤ関係表３１０ｂのコード位置Ｐ４を設定する。
【０１３４】
そして、検索開始コードＩＤであるＩＤ１は検索終了コードＩＤでないことから、図７Ｂに示すステップＳ７２２で検索開始コードＩＤをＩＤ２に更新し、さらに検索動作は続けられる。しかし、その処理は、図１０Ｂを参照して説明したものと同様であるので、その説明は省略する。
【０１３５】
以上本発明を実施するための形態について詳細に説明したが、本発明の実施の形態はそれに限ることなく種々の変形が可能であることは当業者に明らかである。
また、本発明のコード列検索装置が、索引データ管理表とコード別ＩＤ範囲表とＩＤ関係表を格納する記憶手段と、図６〜図９Ｂに示した処理をコンピュータに実行させるプログラムによりコンピュータ上に構築可能なことは明らかである。
【０１３６】
さらに、図４Ａ〜図５Ｃに示したコード列検索のための索引データを作成する処理とその均等物をコンピュータに実行させるプログラムにより、本発明の索引データ作成装置及び方法が実現可能であることも明らかである。そして、それらのプログラムにより、本発明の索引データを作成する手段等がコンピュータ上に実現される。
したがって、上記プログラム、及びプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の実施の形態に含まれる。さらに、本発明のコード列検索のための索引データのデータ構造及びそのデータ構造を有する索引データを記録したコンピュータ読み取り可能な記録媒体も、本発明の実施の形態に含まれる。
【０１３７】
以上詳細に説明した本発明が提供する新しい索引データ構造であるコード別ＩＤ範囲表とＩＤ関係表及びそれらを管理する索引データ管理表を採用することにより、索引データ作成の負荷を軽減すると共に、効率的にコード列検索を行うことが可能となる。
また、本発明によれば、索引データを複数の格納領域に分割して格納することができるので、多量の索引データであっても、利用するハードウェア環境に応じてコード列ブロックの大きさを決定し、索引データへのアクセスやメンテナンスを容易にすることもできる。
【符号の説明】
【０１３８】
１０    文字列
１０ａ  検索対象コード列
１１    コード位置ポインタ
２０    文字位置順の接尾辞
２０ａ  辞書順の接尾辞
３０    接尾辞配列
４０    検索文字列
４０ａ  検索コード列
５０    圧縮接尾辞配列
１０１  検索対象コード列読出手段
１０２  コード別ＩＤ範囲表生成手段
１０３  ＩＤ関係表生成手段
１０４  索引データ作成管理手段
１０５  索引データ作成手段
１１１  検索コード列読出手段
１１２  コード別ＩＤ範囲読出手段
１１３  ＩＤ関係読出手段
１１４  コードＩＤ照合手段
１１５  コード列検索管理手段
１１６  コード列検索手段
３０１  データ処理装置
３０２  中央処理装置
３０３  キャッシュメモリ
３０４  バス
３０５  主記憶装置
３０６  外部記憶装置
３０７  通信装置
３０８  データ格納装置
３０９  コード別ＩＤ範囲表
３１０  ＩＤ関係表
３１１  コード種別ポインタ
３１２  コードＩＤポインタ
３２１  索引データ管理表
３２２  索引データ管理ポインタ
３２４  索引データの格納領域
【図１】
2010231675.tif 000003
【図２Ａ】
2010231675.tif 000004
【図２Ｂ】
2010231675.tif 000005
【図２Ｃ】
2010231675.tif 000006
【図３Ａ】
2010231675.tif 000007
【図３Ｂ】
2010231675.tif 000008
【図４Ａ】
2010231675.tif 000009
【図４Ｂ】
2010231675.tif 000010
【図４Ｃ】
2010231675.tif 000011
【図５Ａ】
2010231675.tif 000012
【図５Ｂ】
2010231675.tif 000013
【図５Ｃ】
2010231675.tif 000014
【図６】
2010231675.tif 000015
【図７Ａ】
2010231675.tif 000016
【図７Ｂ】
2010231675.tif 000017
【図８Ａ】
2010231675.tif 000018
【図８Ｂ】
2010231675.tif 000019
【図８Ｃ】
2010231675.tif 000020
【図９Ａ】
2010231675.tif 000021
【図９Ｂ】
2010231675.tif 000022
【図１０Ａ】
2010231675.tif 000023
【図１０Ｂ】
2010231675.tif 000024
【図１０Ｃ】
2010231675.tif 000025
【手続補正書】
【提出日】平成21年12月25日(2009.12.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１７
【補正方法】変更
【補正の内容】
【請求項１７】
検索対象である検索対象コード列を検索コード列により検索するコード列検索のためのデータ構造において、
前記検索対象コード列を複数に分割した部分コード列であるコード列ブロックであり、該コード列ブロックの末尾のコードと該コード列ブロックの次に位置するコード列ブロックの先頭のコードとを重複させて前記検索対象コード列を複数に分割したコード列ブロック毎に設けられた、前記コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤの範囲であるコードＩＤ範囲を同一種別のコード毎に格納したコード別ＩＤ範囲表と、前記コードＩＤに対応して、前記コード列ブロックにおいて該コードＩＤに係るコードの次に位置するコードのコードＩＤである次コードＩＤを格納するとともに、前記コードＩＤに係るコードが前記コード列ブロックの末尾に位置する場合は前記次コードＩＤとして前記コード列ブロックの先頭のコードのコードＩＤを格納するＩＤ関係表と、前記コード列ブロック毎に該コード列ブロックの先頭のコードのコードＩＤである先頭コードＩＤを格納した索引データ管理表と
を備え、
検索実行部と、検索管理部と、前記コード別ＩＤ範囲表、前記ＩＤ関係表及び前記ＩＤ管理表を記憶する記憶部とを備えたコード列検索装置が、
前記検索実行部により、
前記検索コード列を読み出す検索コード列読出ステップと、
指定されたコード列ブロックに対応する前記コード別ＩＤ範囲表から、前記検索コード列読出ステップで読み出された検索コード列の先頭のコードあるいは２番目のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出すコード別ＩＤ範囲読出ステップと、
前記コード別ＩＤ範囲読出ステップで読み出された前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれるコードＩＤあるいは前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出し、以後、読み出された次コードＩＤに対応して格納された次コードＩＤを順次前記ＩＤ関係表から読み出すとともに、該次コードＩＤが当該コード列ブロックの先頭のコードのコードＩＤと等しいか判定するＩＤ関係読出ステップと、
前記ＩＤ関係読出ステップで読み出された次コードＩＤが当該コード列ブロックの先頭のコードのコードＩＤと等しくないとき、該次コードＩＤが前記コード別ＩＤ範囲読出ステップで読み出されたコードＩＤの範囲に含まれるか照合するコードＩＤ照合ステップと、
を実行し、
前記検索管理部により、
前記検索実行部に先頭のコード列ブロックから前記コード列ブロックを順次指定する検索開始位置指定ステップを実行するとともに、
前記ＩＤ関係読出ステップにおいて、前記読み出した次コードＩＤが前記コード列ブロックの先頭のコードのコードＩＤと等しいと判定されると、前記コード列ブロックの次に位置するコード列ブロックを前記検索実行部に指定する次コード列指定ステップを実行し、
前記検索管理部が前記検索開始位置指定ステップを実行すると、
前記コード別ＩＤ範囲読出ステップでは、前記検索コード列の先頭のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出し、
前記ＩＤ関係読出ステップでは、最初に、前記検索コード列の先頭のコードの種別のコードＩＤ範囲に含まれるコードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出し、
前記検索管理部が前記次コード列指定ステップを実行すると、
前記コード別ＩＤ範囲読出ステップでは、前記検索コード列の２番目のコードからコード毎に、該コードの種別のコードＩＤ範囲を順次読み出し、
前記ＩＤ関係読出ステップでは、最初に、前記索引データ管理表に格納された前記指定されたコード列ブロックの先頭コードＩＤに対応して格納された前記次コードＩＤを前記指定されたコード列ブロックに対応するＩＤ関係表から読み出すことにより、
前記検索対象コード列の前記検索コード列による検索の実行を可能とする
ことを特徴とするコード列検索のためのデータ構造。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項２１
【補正方法】変更
【補正の内容】
【請求項２１】
検索対象である検索対象コード列を検索コード列により検索するコード列検索のための索引データ作成装置において、
前記検索対象コード列を複数に分割した部分コード列であるコード列ブロックであって、該コード列ブロックの末尾のコードと該コード列ブロックの次に位置するコード列ブロックの先頭のコードとを重複させて前記検索対象コード列を複数に分割したコード列ブロックを順次読み出し、該読み出したコード列ブロックのコードの種別毎の出現回数を求めるコード列ブロック読出手段と
前記コード列ブロック読出手段が求めたコードの種別毎の出現回数に基づいて、前記コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤの範囲であるコードＩＤ範囲を同一種別のコード毎に格納したコード別ＩＤ範囲表を前記コード列ブロック毎に生成するコード別ＩＤ範囲表生成手段と、
前記コード列ブロック読出手段が読み出したコード列ブロックと前記コード別ＩＤ範囲表に基づき、前記コードＩＤに対応して、前記コード列ブロックにおいて該コードＩＤに係るコードの次に位置するコードのコードＩＤである次コードＩＤを格納したＩＤ関係表を前記コード列ブロック毎に生成するＩＤ関係表生成手段と、
前記コード列ブロック毎に該コード列ブロックに対応した前記コード別ＩＤ範囲表とＩＤ関係表を格納する索引データの格納領域を確保するとともに、前記コード列ブロックの先頭のコードのコードＩＤと前記索引データの格納領域のポインタを前記コード列ブロック毎に格納する索引データ管理表を生成する索引データ作成管理手段と、
を備えたことを特徴とする索引データ作成装置。
【手続補正３】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項２３
【補正方法】変更
【補正の内容】
【請求項２３】
検索対象である検索対象コード列を検索コード列により検索するコード列検索のための索引データ作成装置による索引データ作成方法において、
前記検索対象コード列を複数に分割した部分コード列であるコード列ブロックであって、該コード列ブロックの末尾のコードと該コード列ブロックの次に位置するコード列ブロックの先頭のコードとを重複させて前記検索対象コード列を複数に分割したコード列ブロックを読み出し、該読み出したコード列ブロックのコードの種別毎の出現回数を求めるコード列ブロック読出ステップと
前記コード列ブロック読出ステップで求めたコードの種別毎の出現回数に基づいて、前記コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤの範囲であるコードＩＤ範囲を同一種別のコード毎に格納したコード別ＩＤ範囲表を生成するコード別ＩＤ範囲表生成ステップと、
前記コード列ブロック読出ステップで読み出したコード列ブロックと前記コード別ＩＤ範囲表生成ステップで生成されたコード別ＩＤ範囲表に基づき、前記コードＩＤに対応して、前記コード列ブロックにおいて該コードＩＤに係るコードの次に位置するコードのコードＩＤである次コードＩＤを格納したＩＤ関係表を生成するＩＤ関係表生成ステップと、
を備え、
前記コード列ブロック読出ステップ、前記コード別ＩＤ範囲表生成ステップ及びＩＤ関係表生成ステップを全ての前記コード列ブロックについて繰り返すことを特徴とする索引データ作成方法。
【手続補正４】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項２４
【補正方法】変更
【補正の内容】
【請求項２４】
検索対象である検索対象コード列を検索コード列により検索するコード列検索のための索引データ作成方法をコンピュータに実行させる索引データ作成プログラムにおいて、
コンピュータに、
コード列検索のための索引データ作成方法であって、
前記検索対象コード列を複数に分割した部分コード列であるコード列ブロックであり、該コード列ブロックの末尾のコードと該コード列ブロックの次に位置するコード列ブロックの先頭のコードとを重複させて前記検索対象コード列を複数に分割したコード列ブロックを読み出し、該読み出したコード列ブロックのコードの種別毎の出現回数を求めるコード列ブロック読出ステップと
前記コード列ブロック読出ステップで求めたコードの種別毎の出現回数に基づいて、前記コード列ブロックに位置する全ての各コードを一意に識別するコードＩＤの範囲であるコードＩＤ範囲を同一種別のコード毎に格納したコード別ＩＤ範囲表を生成するコード別ＩＤ範囲表生成ステップと、
前記コード列ブロック読出ステップで読み出したコード列ブロックと前記コード別ＩＤ範囲表生成ステップで生成されたコード別ＩＤ範囲表に基づき、前記コードＩＤに対応して、前記コード列ブロックにおいて該コードＩＤに係るコードの次に位置するコードのコードＩＤである次コードＩＤを格納したＩＤ関係表を生成するＩＤ関係表生成ステップと、
を備え、
前記コード列ブロック読出ステップ、前記コード別ＩＤ範囲表生成ステップ及びＩＤ関係表生成ステップを全ての前記コード列ブロックについて繰り返すことを特徴とする索引データ作成方法を実行させることを特徴とする索引データ作成プログラム。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】変更
【補正の内容】
【００１６】
以下、本発明を実施するための形態を、図面を参照しながら説明する。
図２Ａは、本発明の一実施の形態における索引用のデータ構造を作成するための機能ブロックを説明する図である。索引データ作成管理手段１０４は、索引データ作成手段１０５による検索対象コード列を分割したブロック（コード列ブロック）毎の索引データの作成を管理し、索引データ管理表を作成する。索引データ作成手段１０５は、コード列ブロック読出手段１０１、コード別ＩＤ範囲表生成手段１０２及びＩＤ関係表生成手段１０３を含む。
検索対象コード列から順次コード列ブロックがコード列ブロック読出手段１０１で読み出され、コード別ＩＤ範囲表生成手段１０２とＩＤ関係表生成手段１０３に渡される。コード別ＩＤ範囲表生成手段１０２は、コード毎にそのコードＩＤの範囲を格納したコード別ＩＤ範囲表をコード列ブロック毎に作成し、ＩＤ関係表生成手段１０３は、各コードＩＤの次に位置するコードＩＤである次コードＩＤを格納したＩＤ関係表をコード列ブロック毎に生成する。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１３８
【補正方法】変更
【補正の内容】
【０１３８】
１０    文字列
１０ａ  検索対象コード列
１１    コード位置ポインタ
２０    文字位置順の接尾辞
２０ａ  辞書順の接尾辞
３０    接尾辞配列
４０    検索文字列
４０ａ  検索コード列
５０    圧縮接尾辞配列
１０１  コード列ブロック読出手段
１０２  コード別ＩＤ範囲表生成手段
１０３  ＩＤ関係表生成手段
１０４  索引データ作成管理手段
１０５  索引データ作成手段
１１１  検索コード列読出手段
１１２  コード別ＩＤ範囲読出手段
１１３  ＩＤ関係読出手段
１１４  コードＩＤ照合手段
１１５  コード列検索管理手段
１１６  コード列検索手段
３０１  データ処理装置
３０２  中央処理装置
３０３  キャッシュメモリ
３０４  バス
３０５  主記憶装置
３０６  外部記憶装置
３０７  通信装置
３０８  データ格納装置
３０９  コード別ＩＤ範囲表
３１０  ＩＤ関係表
３１１  コード種別ポインタ
３１２  コードＩＤポインタ
３２１  索引データ管理表
３２２  索引データ管理ポインタ
３２４  索引データの格納領域
【手続補正７】
【補正対象書類名】図面
【補正対象項目名】図２Ａ
【補正方法】変更
【補正の内容】
【図２Ａ】
2010231675.tif 000026