(57)【要約】      （修正有）【課題】複数の検索モードに対応し、どの検索モードを選択しても高速に検索処理を実行することが可能な技術を提供する。【解決手段】検索装置（１０１）は、データベース（１０８）に格納された複数のエントリー情報を順に検索キーと比較し、当該検索キーに適合するエントリー情報を検索する検索手段（１０７）と、検索手段がエントリー情報を検索するための処理を実行しているか否かにかかわらずデータを書き込むことが可能なバッファと、検索手段により検索されたエントリー情報を記憶手段へ転送する転送手段（１０９）とを備える。転送手段は、検索モードに応じて、検索されたエントリー情報を一時的にバッファに記憶させてから記憶手段へ転送するか、バッファに記憶させずに記憶手段へ転送するかを切り替える。【選択図】図１
2018077629.tif 000002
【特許請求の範囲】
【請求項１】
データベースに格納された複数のエントリー情報を順に検索キーと比較し、当該検索キーに適合するエントリー情報を検索する検索手段と、
前記検索手段がエントリー情報を検索するための処理を実行しているか否かにかかわらずデータを書き込むことが可能なバッファと、
前記検索手段により検索されたエントリー情報を記憶手段へ転送する転送手段と
を備え、
前記転送手段は、検索モードに応じて、検索されたエントリー情報を一時的に前記バッファに記憶させてから前記記憶手段へ転送するか、前記バッファに記憶させずに前記記憶手段へ転送するかを切り替える
ことを特徴とする検索装置。
【請求項２】
前記検索手段は、前記転送手段が検索されたエントリー情報を前記記憶手段へ転送している間は、エントリー情報の検索を停止することを特徴とする請求項１に記載の検索装置。
【請求項３】
前記転送手段は、前記複数のエントリー情報から前記検索キーに適合するいずれかのエントリー情報が検索されたことに応じて前記エントリー情報の検索を終了する検索モードにおいては、前記バッファに記憶させずに検索されたエントリー情報を前記記憶手段へ転送することを特徴とする請求項１又は２に記載の検索装置。
【請求項４】
前記転送手段は、前記複数のエントリー情報のうち前記検索キーに適合する全てのエントリー情報を検索する検索モードにおいては、検索されたエントリー情報を一時的に前記バッファに記憶させてから前記記憶手段へ転送することを特徴とする請求項１から３のいずれか１項に記載の検索装置。
【請求項５】
前記転送手段は、前記バッファに記憶されたエントリー情報の個数が予め定められた閾値以上になったことに応じて、該バッファに記憶されたエントリー情報を前記記憶手段へ転送することを特徴とする請求項４に記載の検索装置。
【請求項６】
前記転送手段は、前記バッファに記憶されたエントリー情報のデータサイズが予め定められた閾値以上になったことに応じて、該バッファに記憶されたエントリー情報を前記記憶手段へ転送することを特徴とする請求項４又は５に記載の検索装置。
【請求項７】
前記転送手段は、前記バッファにエントリー情報が記憶されてから予め定められた時間が経過したことに応じて、該バッファに記憶されたエントリー情報を前記記憶手段へ転送することを特徴とする請求項４から６のいずれか１項に記載の検索装置。
【請求項８】
請求項１から７のいずれか１項に記載の検索装置を備えることを特徴とする情報処理装置。
【請求項９】
データを検索するための処理を実行しているか否かにかかわらずデータを書き込むことが可能なバッファを用いてデータを検索する検索方法であって、
データベースに格納された複数のエントリー情報を順に検索キーと比較し、当該検索キーに適合するエントリー情報を検索する検索工程と、
前記検索工程により検索されたエントリー情報を記憶手段へ転送する転送工程と
を有し、
前記転送工程においては、検索モードに応じて、検索されたエントリー情報を一時的に前記バッファに記憶させてから前記記憶手段へ転送するか、前記バッファに記憶させずに前記記憶手段へ転送するかを切り替える
ことを特徴とする検索方法。
【請求項１０】
コンピュータを請求項１から７のいずれか１項に記載の検索装置が備える各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は検索装置及び検索方法、情報処理装置、コンピュータプログラムに関する。
【背景技術】
【０００２】
ＴＣＰ（Transmission Control Protocol）／ＩＰ（Internet Protocol）の通信プロトコルを使用してネットワークに接続し、通信相手とデータ転送を行う通信機器がある。近年、このような通信機器間で高解像度、高精細の映像データを転送するような利用形態が増えてきている。そして、この広帯域なデータ転送を可能とするためには、通信機器における通信プロトコル処理の高速化が不可欠となってくる。そこで、ＴＯＥ（ＴＣＰ／ＩＰオフロードエンジン）といった通信プロトコル処理に特化した補助的デバイスを通信機器の内部に装備し、広帯域なデータ転送を実現することが一般化している。ＴＯＥは、通信プロトコル処理を専用のソフトウエア／ハードウエアで実行して通信機器のＣＰＵ負荷を軽減するものである。
【０００３】
通信プロトコル処理では、ソケット検索やリアセンブル検索等、様々な用途に検索処理が実行される。そのため、シングルヒット検索とマルチヒット検索（全文検索）など複数の検索モードに対応した検索装置が必要となる。
【０００４】
シングルヒット検索について、以下に説明する。検索対象となる全情報はエントリーと呼ばれる１つのデータ単位の集合体として構成する。そして、この検索対象となる全情報に対してエントリー順に検索キーと比較し、一致するかどうかを判定する比較処理を順次実行する。そして、一致を検出した時点で比較処理を終了して、一致したエントリー情報を検索結果として記録する。このように、シングルヒット検索では、検索対象のエントリー情報を１つずつ検索キーと比較していき、検索キーと一致するエントリー情報が発見された段階で比較処理を終了して、発見したエントリー情報を検索結果とする。
【０００５】
マルチヒット検索について、以下に説明する。検索対象となる全情報はエントリーと呼ばれる１つのデータ単位の集合体として構成する。そして、この検索対象となる全情報に対してエントリー順に検索キーと比較し、一致するかどうかを判定する比較処理を順次実行する。そして、検索対象の全ての情報に対して比較処理が終了した時点で、一致したエントリー情報の全てを検索結果として記録する。このように、マルチヒット検索では、全てのエントリー情報と検索キーとを比較し、検索キーと一致する全てのエントリー情報を検索結果とする。
【０００６】
そして、シングルヒット検索やマルチヒット検索を高速に実行するために、特許文献１には、検索結果を表示部に表示するまでの時間を短縮するための構成が記載されている。特許文献１の構成では、検索結果件数を取得し、取得した検索結果件数に基づいて、検索結果を格納するバッファサイズを設定する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１２−１３３６０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１に記載の構成では、検索情報が入力された時点でプレ検索を実行して検索結果の数量に応じて一時的に蓄積するバッファの容量を設定する。つまり、操作者が検索ボタンを押下するなどして検索の実行を命令する前に予めバッファの容量を必要なサイズに設定する制御を行うものである。
【０００９】
しかしながら、上記従来技術では、シングルヒット検索に適用した場合に検索結果を表示部に表示するまでの時間を短縮できないという課題があった。これは、シングルヒット検索であれば検索結果は１つであるから、検索結果の数量はシングルヒット検索を選択した時点で確定しており、検索結果の数量からバッファの容量を設定する必要がないためである。つまり、上記従来技術のバッファの容量を設定する手順そのものがシングルヒット検索の検索結果を表示部に表示するまでの時間を短縮する効果に結びつかないという課題があった。
【００１０】
本発明は、上記の課題を解決して、シングルヒット検索やマルチヒット検索のような複数の検索モードに対応し、どの検索モードを選択しても高速に検索処理を実行する技術を提供することを目的としている。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、本発明による検索装置は以下の構成を備える。即ち、
データベースに格納された複数のエントリー情報を順に検索キーと比較し、当該検索キーに適合するエントリー情報を検索する検索手段と、
前記検索手段がエントリー情報を検索するための処理を実行しているか否かにかかわらずデータを書き込むことが可能なバッファと、
前記検索手段により検索されたエントリー情報を記憶手段へ転送する転送手段と
を備え、
前記転送手段は、検索モードに応じて、検索されたエントリー情報を一時的に前記バッファに記憶させてから前記記憶手段へ転送するか、前記バッファに記憶させずに前記記憶手段へ転送するかを切り替える。
【発明の効果】
【００１２】
本発明によれば、複数の検索モードに対応し、どの検索モードを選択しても高速に検索処理を実行することができる。
【図面の簡単な説明】
【００１３】
【図１】検索装置を含む情報処理装置のブロック図。
【図２】データ転送部の内部ブロック図。
【図３】検索処理の手順を示すフローチャート。
【図４】シングルヒット検索のタイミングチャート
【図５】マルチヒット検索のタイミングチャート
【図６】マルチヒット検索（バッファなし）のタイミングチャート
【発明を実施するための形態】
【００１４】
以下、添付図面を参照して本発明の実施の形態を詳細に説明する。
【００１５】
＜情報処理装置＞
図１は、本発明の一実施形態における検索装置１０１を装備した情報処理装置１００の内部ブロックを示した図である。情報処理装置１００は、メインバス１１を介して装置全体の制御を行うメインＣＰＵ１３、共有メモリ１２、及び、検索装置１０１を装備したＴＯＥ（TCP/IP Offload Engine）に代表されるサブシステム１０が接続して構成される。
【００１６】
サブシステム１０においては、ローカルバス１０２を介してサブシステム全体の制御を行うサブＣＰＵ１０４、内部メモリ１０３、及び、検索装置１０１が接続され、メインバス１１とはブリッジ１０５を介して接続される。
【００１７】
検索装置１０１は、リクエスト受付部１０６、検索エンジン１０７、データベース１０８、及び、データ転送部１０９を備える。リクエスト受付部１０６は、レジスタで構成されており、サブＣＰＵ１０４あるいはメインＣＰＵ１３から検索処理を実行するために必要な設定情報の入力を受け付ける機能ブロックである。検索処理にはシングルヒット検索やマルチヒット検索など複数の検索モードがあり、設定情報には検索キーや検索モードを選択する内容も含まれる。リクエスト受付部１０６は、入力された検索キーと選択された検索モードを検索エンジン１０７に通知する。同様に選択された検索モードだけでなく検索処理を実行するのに必要な設定情報をデータ転送部１０９に通知する。
【００１８】
検索エンジン１０７は、実際に検索処理を実行する機能ブロックである。ここでは、選択された検索モードに応じてデータベース１０８に登録されている全情報をエントリー単位で順に読み出して検索キーと一致（適合）するかどうかの比較処理を実行する。シングルヒット検索であれば比較処理は一致した段階で終了となり、マルチヒット検索ではデータベース１０８内の全情報に対して比較処理を実行した段階で終了となる。
【００１９】
また、検索エンジン１０７は、データベース１０８だけでなく内部メモリ１０３や共有メモリ１２にエントリー情報が登録された場合でも検索処理を実行できる。つまり、登録されているエントリー情報を内部メモリ１０３や共有メモリ１２からデータ転送部１０９によってエントリー単位で順に読み出して検索キーと一致するかどうか比較処理を行う機能を装備している。そして、検索結果情報は比較処理において一致を検出したタイミングで順次データ転送部１０９へ送られる。データ転送部１０９への検索結果情報の転送完了を待って、次の比較処理が起動する。したがって、何らかの理由によりデータ転送部１０９への検索結果情報の転送が停止すると、停止している期間だけ検索処理も停止する仕組みとなっている。
【００２０】
なお、本実施形態では、検索エンジン１０７は、データベース１０８に格納された複数のエントリー情報を順に検索キーと比較し、当該検索キーに一致するエントリー情報を検索する例を説明するが、検索する情報は検索キーに一致するものに限られない。すなわち、検索エンジン１０７は、検索キーと一定の関係性を有するエントリー情報を検索キーに適合するエントリー情報として検索するようにしてもよい。例えば、エントリー情報の特定の部分（例えば、エントリー情報の特定ビットから一定ビット長の部分）が検索キーと一致するエントリー情報を検索キーに適合するものとして検索してもよい。あるいは例えば、エントリー情報のハッシュ値が検索キーと一致するエントリー情報を検索キーに適合するものとして検索してもよい。
【００２１】
データ転送部１０９は、検索エンジン１０７から受け取った検索結果情報を内部メモリ１０３や共有メモリ１２へ書き出す処理を行う機能ブロックである。また、検索対象の情報をエントリー単位でデータベース１０８あるいは内部メモリ１０３や共有メモリ１２との間で読み書きする処理を行う機能ブロックでもある。
【００２２】
データ転送部１０９は、検索エンジン１０７から受け取った検索結果情報をリクエスト受付部１０６からの通知に従って、内部メモリ１０３や共有メモリ１２等の記憶装置へ書き出して転送する。また、受け取った検索結果情報を内部に一時的に記憶するバッファを装備している。このバッファは、検索エンジン１０７から検索結果情報を取得するタイミングとは独立したタイミングでデータを書き込んだり、内部メモリ１０３や共有メモリ１２へ書き出せるように構成される。すなわち、バッファは、検索エンジン１０７がエントリー情報を検索するための処理を実行しているか否かにかかわらずデータを書き込むことが可能である。バッファは検索処理と並行して複数の検索結果情報を保持し、複数の検索結果情報をまとめて共有メモリ１２又は内部メモリ１０３へ転送することができるため、マルチヒット検索においてバッファを利用することで検索結果の出力を高速に行うことができる。また、データ転送部１０９内にはバッファを使用しないで検索結果情報を直接内部メモリ１０３や共有メモリ１２へ書き出すように選択する機能も装備している。
【００２３】
また、データ転送部１０９は、データベース１０８に対してエントリー情報の登録、削除、参照、更新する処理も実行する。登録処理は、リクエスト受付部１０６の通知に従って、新規に登録するエントリー情報を内部メモリ１０３や共有メモリ１２から読み取ってデータベース１０８に書き込む処理である。削除処理は、リクエスト受付部１０６の通知に従って、すでにデータベース１０８に登録してあるエントリー情報を削除する処理である。参照処理は、リクエスト受付部１０６の通知に従って、指定されたエントリー情報をデータベース１０８から全て読み出して内部メモリ１０３や共有メモリ１２の指定領域へ書き込む処理である。更新処理は、リクエスト受付部１０６の通知に従って、更新するエントリー情報を内部メモリ１０３や共有メモリ１２から読み取ってデータベース１０８に上書きする処理である。
【００２４】
また、データ転送部１０９は、データベース１０８と同様に内部メモリ１０３や共有メモリ１２に対してエントリーの登録、削除、参照、更新する処理も実行可能である。登録処理は、リクエスト受付部１０６の通知に従って、新規に登録するエントリー情報を内部メモリ１０３や共有メモリ１２の指定の領域から読み取り、内部メモリ１０３や共有メモリ１２の別に指定された領域へ書き込む処理である。削除処理は、リクエスト受付部１０６の通知に従って、すでに内部メモリ１０３や共有メモリ１２に登録してあるエントリー情報を削除する処理である。参照処理は、リクエスト受付部１０６の通知に従って、指定されたエントリー情報を内部メモリ１０３や共有メモリ１２から全て読み出し、内部メモリ１０３や共有メモリ１２の別に指定された領域へ書き込む処理である。更新処理は、リクエスト受付部１０６の通知に従って、更新するエントリー情報を内部メモリ１０３や共有メモリ１２の指定の領域から読み取り、内部メモリ１０３や共有メモリ１２の別に指定の領域へ上書きする処理である。
【００２５】
データベース１０８は、メモリ等の記憶装置で構成され、検索対象となる情報をエントリー単位で内部に格納している。検索処理中は、エントリー単位で検索対象の情報を検索エンジン１０７へ出力する動作を行う。また、内部に記録されている検索対象の情報に対してエントリー単位で登録、削除、参照、更新が可能になっている。本実施形態では、検索対象のエントリー情報はＩＰアドレス、ＭＡＣアドレス等の文字列データである場合の例を説明するが、エントリー情報の種類は問わない。例えば、文書データ、画像データ、コンピュータプログラムコード等の情報処理装置において取り扱うことできる任意の種類のデータをエントリー情報とすることができる。
【００２６】
共有メモリ１２、あるいは内部メモリ１０３は、検索対象となる情報をエントリー単位で内部に格納することも可能である。データベース１０８に検索対象となる情報が記録されている場合と比較すると、検索エンジン１０７がエントリー情報を読み書きするのに消費されるアクセス時間が長くなる。そして、検索対象の情報をどこに格納するかによって、アクセス時間はデータベース１０８＜内部メモリ１０３＜共有メモリ１２のようになる。そのため、検索処理時間が最短となるのはデータベース１０８に検索対象の情報を格納する場合となる。
【００２７】
＜データ転送部＞
図２は、図１に示した検索装置１０１に装備されるデータ転送部１０９の内部ブロックを示した図である。データ転送部１０９の内部は、制御部２０１の制御によって、バスマスタ２０２、バッファ２０３、セレクタ２０４のそれぞれの機能ブロックを制御する構成になっている。
【００２８】
制御部２０１は、セレクタ２０４に対して、取得した検索結果情報をバッファ２０３へ出力するか、バスマスタ２０２へ出力するかの制御情報を設定する。また、バッファ２０３に対して、バスマスタ２０２へ内部に蓄積している検索結果情報を出力するタイミングを設定する。また、バスマスタ２０２に対して、検索結果情報やエントリー情報の読み出しや書き出しの転送設定を行う。
【００２９】
バスマスタ２０２は、検索結果情報をローカルバス１０２上の内部メモリ１０３あるいはメインバス１１上の共有メモリ１２へ送信する。また、同様に内部メモリ１０３や共有メモリ１２からエントリー情報を読み込み、検索エンジン１０７へ送信する。また、データベース１０８に検索対象の情報が格納されている場合は、このエントリー情報に対する登録、削除、参照、更新を行うための転送を行う。また、内部メモリ１０３や共有メモリ１２に検索対象の情報が格納されている場合は、このエントリー情報に対する登録、削除、参照、更新を行うための転送を行う。
【００３０】
バッファ２０３は、検索結果情報を内部に蓄積し、設定された数量まで検索結果情報が蓄積された場合、バスマスタ２０２に蓄積している検索結果情報を送信する。
【００３１】
セレクタ２０４は、検索エンジン１０７から送られてくる検索結果情報をバッファ２０３へ出力するか、バスマスタ２０２へ出力するかどちらかを選択する処理を行う。制御部２０１によって、バッファ２０３か、あるいはバスマスタ２０２かの指定された方へ検索結果情報を出力する。
【００３２】
その他の構成例として、セレクタ２０４の内部にカウンタを装備し、検索エンジン１０７から送られてくる検索結果情報の回数をカウントする機能を装備するようにしてもよい。このカウンタはシングルヒット検索、及びマルチヒット検索が終了した時点でクリアされる仕組みとなっている。そして、カウンタのカウンタ値には、検索モードごとに閾値が定められる。例えば、シングルヒット検索に対しては、閾値が１に設定され、カウンタの値が１未満（＝０）の場合は直接バスマスタ２０２へ検索結果情報を出力する。カウンタの値が１以上の場合は、バッファ２０３へ検索結果情報を出力する。マルチヒット検索に対しては、閾値として上記の１以外の値を設定してもよい。例えば、カウンタは、バッファに記憶されたエントリー情報の個数をカウントし、その個数が予め定められた閾値以上になったことに応じて、バッファのエントリー情報を内部メモリ１０３等の記憶装置へ転送するために用いることができる。
【００３３】
また、さらなる他の構成例として、セレクタ２０４の内部にタイマを装備し、検索エンジン１０７から送られてくる検索結果情報の時間間隔を測定する機能を装備するようにしてもよい。このタイマは検索エンジン１０７から送られてくる検索結果情報を受け取ったタイミングでタイマ値を検出→リセット→スタートの３つの処理を矢印の順に実施する。そして、検出したタイマの値が一定値未満の場合はバッファ２０３へ検索結果情報を出力するように動作する。検出したタイマの値が一定値以上の場合は直接バスマスタ２０２へ検索結果情報を出力するように動作する。タイマの一定値は制御部２０１によって設定できるものである。このように構成することで、バッファにエントリー情報が記憶されてから予め定められた時間が経過したことに応じて、バッファに記憶されたエントリー情報は内部メモリ１０３等の記憶装置へ転送される。
【００３４】
なお、本実施形態では、データ転送部１０９内にバッファ２０３を設けた構成例を説明しているが、データ転送部１０９の外に設けてもよい。
【００３５】
＜検索処理＞
図３は、図１に示した情報処理装置１００における検索処理をフローチャートに示したものである。このフローチャートは情報処理装置１００が動作状態であり、内部に実装している検索装置１０１に対してメインＣＰＵ１３あるいはサブＣＰＵ１０４からコンピュータプログラムに基づき検索処理を実行した際の検索処理フローを示している。
【００３６】
（Ｓ３０１）
このステップは、このフローチャートのスタートを示している。情報処理装置１００が動作状態であり、いつでも検索装置１０１に対して検索処理を実行できる状態を示している。
【００３７】
（Ｓ３０２）
このステップでは、検索装置１０１にメインＣＰＵ１３あるいはサブＣＰＵ１０４から検索処理の実行指示があったかどうかを判定する。メインＣＰＵ１３あるいはサブＣＰＵ１０４によってリクエスト受付部１０６に検索処理を実行するための入力情報が書き込まれた場合（Ｓ３０２でＹＥＳ）はＳ３０３へ移行し、そうでなければ（Ｓ３０２でＮＯ）現在の状態を維持する。
【００３８】
ここではリクエスト受付部１０６のレジスタに検索処理を実行するのに必要となる情報が入力されたかどうかを判断している。入力される情報には検索モード選択情報や検索処理を実際に実行するために必要となる情報（検索キーやバッファ２０３の蓄積量の閾値など）がある。そして、リクエスト受付部１０６に検索処理を実行するのに必要な情報が全て入力されるとＳ３０３へ移行するが、必要な情報が入力されるまでは現在の状態（Ｓ３０２）を維持する。
【００３９】
その他の構成例として、リクエスト受付部１０６へ入力する情報には、データ転送部１０９内のセレクタ２０４にカウンタが装備されている場合、このカウンタの閾値も含まれるようにしてもよい。また、さらなる他の構成例として、リクエスト受付部１０６へ入力する情報には、データ転送部１０９内のセレクタ２０４にタイマが装備されている場合、このタイマの閾値も含まれるようにしてもよい。
【００４０】
（Ｓ３０３）
このステップでは、Ｓ３０２で入力された検索処理を実行するための情報において、シングルヒット検索を実行する情報があったかどうかを判定する。Ｓ３０２で入力された検索処理を実行するための情報にシングルヒット検索を実行する情報があれば（Ｓ３０３でＹＥＳ）Ｓ３０４へ移行し、そうでなければ（Ｓ３０３でＮＯ）Ｓ３１０に移行する。
【００４１】
ここでは、Ｓ３０２で入力された検索モードを選択する情報によって、シングルヒット検索なのかマルチヒット検索なのかによって次に実行する処理内容が変化することを示している。そして、リクエスト受付部１０６からデータ転送部１０９や検索エンジン１０７に対して検索モード選択情報など、検索処理を実行するのに必要な情報の通知を行っている。
【００４２】
その他の構成例として、上記データ転送部１０９への通知には、データ転送部１０９内のセレクタ２０４にカウンタが装備されている場合、このカウンタの閾値も含まれるようにしてもよい。さらなる他の構成例として、上記データ転送部１０９への通知には、データ転送部１０９内のセレクタ２０４にタイマが装備されている場合、このタイマの閾値も含まれるようにしてもよい。
【００４３】
（Ｓ３０４）
このステップでは、Ｓ３０３においてシングルヒット検索を実行すると判断されたことによって、シングルヒット検索を実行するための準備を行う。シングルヒット検索が選択されたことは、リクエスト受付部１０６からデータ転送部１０９内の制御部２０１へ通知される。そして、通知を受けて制御部２０１は、セレクタ２０４に対して検索エンジン１０７から送られてくる検索結果情報を直接バスマスタ２０２へ送信するように設定を行う。
【００４４】
また、シングルヒット検索で使用する検索キーは、リクエスト受付部１０６から検索エンジン１０７に通知される。ここで、検索対象の情報がデータベース１０８だけでなく、内部メモリ１０３や共有メモリ１２に配置されている場合もある。この場合は、制御部２０１は、バスマスタ２０２に対して内部メモリ１０３や共有メモリ１２からエントリー情報を読み出す指示を行う。そして、バスマスタ２０２は、内部メモリ１０３や共有メモリ１２からエントリー情報を読み出す設定を行う。この時、読みだされたエントリー情報は、順次検索エンジン１０７へ送り込むように設定されている。
【００４５】
（Ｓ３０５）
このステップでは、Ｓ３０４においてシングルヒット検索を実行するための準備が完了したので、シングルヒット検索を開始する処理を行う。シングルヒット検索を開始する準備が整うと、検索エンジンは、検索対象の情報が記録されているデータベース１０８よりエントリー単位で情報を読み出して、検索キーと一致するかどうか比較処理を開始する。あるいは、検索対象の情報が内部メモリ１０３や共有メモリ１２に記憶されている場合は、バスマスタ２０２が、内部メモリ１０３や共有メモリ１２からエントリー情報を読み出して順次検索エンジン１０７へ送信する。そして、検索エンジンは、バスマスタ２０２によってデータ転送部１０９から送られてくるエントリー情報に対して検索キーと一致するかどうかの比較処理を開始する。
【００４６】
（Ｓ３０６）
このステップでは、Ｓ３０５で開始されたシングルヒット検索処理において、検索キーと読みだしたエントリー情報が一致したかどうかを判定する。検索エンジン１０７において検索キーと読みだしたエントリー情報が一致した場合（Ｓ３０６でＹＥＳ）は、Ｓ３０７へ移行し、そうでなければ（Ｓ３０６でＮＯ）Ｓ３０８へ移行する。
【００４７】
シングルヒット検索を実行しているので、検索エンジン１０７において検索キーと読みだしたエントリー情報が一致した場合はその時点で検索処理を終了として、検索結果を出力するためにＳ３０７へ移行する。
【００４８】
（Ｓ３０７）
このステップでは、Ｓ３０６において検索キーと読みだしたエントリー情報が一致したため、実施したシングルヒット検索の検索結果を出力する。検索エンジン１０７は、検索キーと読みだしたエントリー情報が一致したので、一致したエントリー情報の全てあるいは一部を検索結果情報としてデータ転送部１０９へ送付する。データ転送部１０９内では、検索結果情報は、バッファ２０３に蓄積することなくバスマスタ２０２へ送られ、バスマスタ２０２から内部メモリ１０３か、共有メモリ１２の指定領域へ書き込まれる。例えば、セレクタ２０４がカウンタを備え、シングルヒット検索についてのカウンタ値の閾値が１に設定されている場合は、カウンタ値が０（閾値以下）であるので、バッファ２０３を介さず直接バスマスタ２０２へ検索結果を出力する。ここで検索結果情報が内部メモリ１０３と共有メモリ１２の指定領域とのいずれに書き込まれるかは、Ｓ３０２で検出したメインＣＰＵ１３あるいはサブＣＰＵ１０４によって入力された入力情報に含まれる。
【００４９】
（Ｓ３０８）
このステップでは、Ｓ３０５で開始されたシングルヒット検索処理において、検索対象である全ての情報に対して検索処理を実行したかどうかを判定する。検索エンジン１０７において検索対象となる全ての情報に対し、エントリー単位で比較処理が全て終了した場合（Ｓ３０８でＹＥＳ）はＳ３０９へ移行し、そうでなければ（Ｓ３０８でＮＯ）Ｓ３０６へ移行する。
【００５０】
検索エンジンにおいて検索対象となる全ての情報に対して検索処理が終了した場合は、これ以上検索キーと比較する対象が無いのでシングルヒット検索処理を終了とし、検索終了結果を出力するためにＳ３０９へ移行する。
【００５１】
（Ｓ３０９）
このステップでは、Ｓ３０８において、検索対象となる全ての情報に対し、検索キーと読みだしたエントリー情報の比較処理が終了したため、実施したシングルヒット検索の結果を出力する。
【００５２】
検索エンジン１０７は、検索キーと読みだしたエントリー情報が一致するものは無かったことを示す検索結果情報をデータ転送部１０９へ送付する。データ転送部１０９内では、検索結果情報はバッファ２０３に蓄積することなくバスマスタ２０２へ送られ、バスマスタ２０２から指定された内部メモリ１０３か、共有メモリ１２の領域に書き込まれる。
【００５３】
（Ｓ３１０）
このステップでは、Ｓ３０３においてマルチヒット検索を実行すると判断されたことによって、マルチヒット検索を実行するための準備を行う。マルチヒット検索が選択されたことは、リクエスト受付部１０６からデータ転送部１０９内の制御部２０１へ通知される。そして、通知を受けて制御部２０１は、セレクタ２０４に対して検索エンジン１０７から送られてくる検索結果情報をバッファ２０３へ送信するように設定を行う。
【００５４】
その他の構成例として、上記データ転送部１０９内の制御部２０１への通知には、セレクタ２０４にカウンタが装備されている場合、このカウンタの閾値も含まれるようにしてもよい。そのため、通知を受けて制御部２０１は、セレクタ２０４に対して検索結果情報をカウンタ値に従って直接バスマスタ２０２かバッファ２０３へ送信するか制御するように設定を行う。
【００５５】
その他の構成例として、上記データ転送部１０９内の制御部２０１への通知には、セレクタ２０４にタイマが装備されている場合、このタイマの閾値も含まれるようにしてもよい。そのため、通知を受けて制御部２０１は、セレクタ２０４に対して検索結果情報をタイマ値に従って直接バスマスタ２０２かバッファ２０３へ送信するか制御するように設定を行う。
【００５６】
また、制御部２０１は、バッファ２０３に対して、内部に蓄積した検索結果情報をバスマスタ２０２へ送付するタイミングの設定も行う。このタイミングは、バッファ２０３内部に蓄積する検索結果情報の蓄積量が閾値を超えたタイミングとなるので制御部２０１はバッファ２０３に対してその閾値を設定する。
【００５７】
この閾値は、バッファ２０３の全蓄積容量から検索エンジン１０７から送られてくる検索結果情報の１回分の情報量を減算した蓄積量の値とすることができる。これにより、バッファ２０３の蓄積量が閾値に達した場合でも残り１回分の検索エンジン１０７から送られてくる検索結果情報を蓄積する余裕がある。したがって、閾値に達した段階でバスマスタ２０２へ蓄積している検索結果情報を送付することで検索結果情報の消失とバッファの有効利用の両立を実現できる。
【００５８】
その他の構成例として、閾値は、検索エンジン１０７から送られてくる検索結果情報のｎ回分（ｎは整数）の情報量をバッファ２０３の全蓄積容量から減算した蓄積量の値とするようにしてもよい。ここでｎは、検索対象となる全ての情報量とマルチヒット検索によって一致した検索結果情報の総量の割合を使用する。ただし、この割合は、複数回実行したマルチヒット検索結果から割合の平均値を用いる。そして、割合からマルチヒット検索時に検索エンジン１０７から検索結果情報がどの程度出力されるかを予測して、最適となるｎを求めて閾値を設定する。
【００５９】
その他の構成例として、閾値は、検索結果情報が最終的に共有メモリ１２に記録される場合は、メインバス１１上でデータ転送時に発生するバースト転送サイズに対応して上記閾値を設定するようにしてもよい。バッファ２０３に蓄積した検索結果情報が、バースト転送サイズの倍数になるように閾値を設定する。
【００６０】
また、マルチヒット検索で使用する検索キーは、リクエスト受付部１０６から検索エンジン１０７に通知される。
【００６１】
ここで、検索対象の情報がデータベース１０８だけでなく、内部メモリ１０３や共有メモリ１２に配置されている場合もある。この場合は、制御部２０１は、バスマスタ２０２に対して内部メモリ１０３や共有メモリ１２からエントリー情報を読み出す指示を行う。そして、バスマスタ２０２は、内部メモリ１０３や共有メモリ１２からエントリー情報を読み出す設定を行う。この時、読みだされたエントリー情報は、順次検索エンジン１０７へ送り込むように設定されている。
【００６２】
（Ｓ３１１）
このステップでは、Ｓ３１０においてマルチヒット検索を実行するための準備が完了したので、マルチヒット検索を開始する。マルチヒット検索を開始する準備が整うと、検索エンジンは、検索対象の情報が記録されているデータベース１０８よりエントリー単位で情報を読み出して、検索キーと一致するかどうか比較処理を開始する。あるいは、検索対象の情報が内部メモリ１０３や共有メモリ１２に記憶されている場合は、バスマスタ２０２が、内部メモリ１０３や共有メモリ１２からエントリー情報を読み出して順次検索エンジン１０７へ送信する。そして、検索エンジンは、バスマスタ２０２によってデータ転送部１０９から送られてくるエントリー情報に対して検索キーと一致するかどうか比較処理を開始する。
【００６３】
（Ｓ３１２）
このステップでは、Ｓ３１１で開始されたマルチヒット検索処理において、検索対象である全ての情報に対して検索処理を実行したかどうかを判定する。検索エンジン１０７において検索対象となる全ての情報に対し、エントリー単位で比較処理が全て終了した場合（Ｓ３１２でＹＥＳ）は、Ｓ３１５へ移行し、そうでなければ（Ｓ３１２でＮＯ）Ｓ３１３へ移行する。
【００６４】
検索エンジンにおいて検索対象となる全ての情報に対して検索処理が終了した場合は、これ以上検索キーと比較する対象が無いのでマルチヒット検索処理を終了とし、検索終了結果を出力するためにＳ３１５へ移行する。
【００６５】
（Ｓ３１３）
このステップでは、Ｓ３１２でマルチヒット検索が実行中と判断されている状態において検索結果情報が閾値以上にバッファ２０３に蓄積していないかどうかを判定する。バッファ２０３に蓄積している検索結果情報が閾値以上の場合（Ｓ３１３でＹＥＳ）は、Ｓ３１４へ移行し、そうでなければ（Ｓ３１３でＮＯ）Ｓ３１２へ移行する。
【００６６】
具体的には、セレクタ２０４がカウンタを装備している場合、検索エンジン１０７からバッファ２０３へ送られてくる検索結果情報（エントリー情報）をカウントし、カウント値がマルチヒット検索についての閾値以上になったかを判定することができる。あるいは、バッファに記憶されたエントリー情報のデータサイズが予め定められた閾値以上になったかを判定してもよい。ここでは、マルチヒット検索の実行中に、バッファ２０３の蓄積量の許容量を超えるような書き込み要求が発生してこれ以上蓄積できなくなり、新たに検索結果情報が書き込めなくなることがないように監視する意味を持っている。
【００６７】
また、セレクタ２０４にタイマを設け、バッファにエントリー情報が記憶されてからの経過時間が予め定められた時間の閾値を超えたかを判定してもよい。バッファにエントリー情報が記憶されてから予め定められた時間が経過したことに応じて、バッファに記憶されたエントリー情報を内部メモリ１０３等の記憶装置へ転送することで、検索の状況をリアルタイムに記憶装置に反映させることができる。
【００６８】
（Ｓ３１４）
このステップでは、Ｓ３１３において検索結果情報が閾値以上にバッファ２０３に蓄積していたため、実施中のマルチヒット検索の検索結果情報をバッファ２０３から出力する。
【００６９】
データ転送部１０９は、制御部２０１によってバッファ２０３に対して内部に蓄積している検索結果情報をバスマスタ２０２へ出力するように制御する。そして、制御部２０１によってバスマスタ２０２に対して内部メモリ１０３か、共有メモリ１２の指定領域へ検索結果情報を書き出すように制御する。
【００７０】
（Ｓ３１５）
このステップでは、Ｓ３１２において、検索対象となる全ての情報に対し、検索キーと読みだしたエントリー情報の比較処理が終了したため、実施したマルチヒット検索の結果出力する。
【００７１】
データ転送部１０９内のバッファ２０３に蓄積している全て検索結果情報はバスマスタ２０２へ送られ、バスマスタ２０２から内部メモリ１０３か、共有メモリ１２の指定領域に書き込まれる。仮にマルチヒット検索実行中に検索キーと読みだしたエントリー情報が一致するものが１つも無かった場合でも、検索エンジン１０７はその旨を示す検索結果情報をデータ転送部１０９へ送付する。データ転送部１０９は、検索結果情報をバスマスタ２０２によって内部メモリ１０３か、共有メモリ１２の指定領域に書き込みを行う。
【００７２】
（Ｓ３１６）
このステップは、このフローチャートの終了を示している。一連の検索処理が終了したことを意味する。
【００７３】
上記のように本実施形態ではＳ３０３で検索モードを判定し、検索モードに応じて、検索されたエントリー情報を一時的にバッファに記憶させてから内部メモリ１０３等の記憶装置へ転送するか、バッファに記憶させずに記憶装置へ転送するかを切り替える。ここで、前述のように、記憶装置への書込み中は検索を停止しなければならないが、バッファへの書込みは検索と並行して行うことができる。そのため、マルチヒット検索においては、検索結果をバッファへ書き込みながら検索を進めることで短時間に処理を終えることができる。さらに、シングルヒット検索においても、検索結果をバッファへ書き込まずに直ちに記憶装置へ書き込むため、バッファの読み書きの時間を要することなく高速に処理を終えることが可能である。
【００７４】
＜シングルヒット検索の動作＞
図４は、図１に示した情報処理装置１００において、シングルヒット検索実行時における検索結果出力部分のタイミングチャートを示した図である。図１〜図３に記載の一部の機能ブロックや処理内容を抽出し、それぞれの動作時間を示して動作タイミングを時系列で表記している。これにより、シングルヒット検索実行時の処理経過を分かりやすく示している。
【００７５】
タイミングチャートの始まりは、Ｓ３０５において、検索エンジン１０７が検索対象となる全ての情報に対し、検索キーと読みだしたエントリー情報が一致するかどうか比較処理を開始した時点である。そして、タイミングチャートの終わりは、Ｓ３０７において、検索結果情報が指定された内部メモリ１０３か、共有メモリ１２に書き込んだ時点（４０４）である。
【００７６】
ＣＬＫは、基準となるタイミングを表しており、図１に示す情報処理装置１００における基準となる動作タイミングをクロック表記したものである。波形の立ち上がりに同期して情報処理装置１００内の各機能ブロックが動作することを示している。
【００７７】
ＣＨ１は、シングルヒット検索が実行中かどうかを示している。Ｈｉｇｈの状態はシングルヒット検索が実行中を示しており、Ｌｏｗの状態はシングルヒット検索を実行していない状態（停止状態）を示している。Ｓ３０４において、シングルヒット検索を開始した時点からＳ３０７かＳ３０９に到達するまでの期間をＨｉｇｈと表記している。それ以外の期間はＬｏｗとしてシングルヒット検索を実行していない状態を示している。
【００７８】
ＣＨ２は、シングルヒット検索において、検索エンジン１０７が検索キーと読みだしたエントリー情報が一致したことを検出したタイミングをＨｉｇｈと表記し、Ｌｏｗはそれ以外の状態を示している。
【００７９】
ＣＨ３は、バッファ２０３に検索結果情報が書き込まれたタイミングをＨｉｇｈと表記し、Ｌｏｗはそれ以外の状態を示している。図４では、シングルヒット検索を実行しているのでバッファ２０３に検索結果情報が書き込まれることが無いためＬｏｗのままである。
【００８０】
ＣＨ４は、データ転送部１０９が検索結果情報を指定された内部メモリ１０３か、共有メモリ１２に書き込む処理を実行している状態をＨｉｇｈと表記し、Ｌｏｗはそれ以外の状態を示している。
【００８１】
４０１のタイミングは、シングルヒット検索において検索エンジン１０７が検索キーと読みだしたエントリー情報が一致したことを検出したタイミングである。そして、シングルヒット検索は、バッファ２０３に検索結果情報を書き込んでいない。そのため、４０１のタイミングの直後から検索結果情報を指定された内部メモリ１０３か、共有メモリ１２に書き込む処理を実行することが可能となる。これによって、４０１から４０４までの期間が最短時間となるような動作フローとなっている。
【００８２】
＜マルチヒット検索の動作＞
図５は、図１に示した情報処理装置１００において、マルチヒット検索実行時における検索結果出力部分のタイミングチャートを示した図である。図１〜図３に記載の一部の機能ブロックや処理内容を抽出し、それぞれの動作時間を示して動作タイミングを時系列で表記している。これにより、マルチヒット検索実行時の処理経過を分かりやすく示している。
【００８３】
タイミングチャートの始まりは、Ｓ３１１において、検索エンジン１０７が検索対象となる全ての情報に対し、検索キーと読みだしたエントリー情報が一致するかどうか比較処理を開始した時点である。そして、タイミングチャートの終わりは、Ｓ３１４において、検索結果情報を指定された内部メモリ１０３か、共有メモリ１２に書き込んだ時点（５０６）である。
【００８４】
ＣＨ５は、マルチヒット検索が実行中かどうかを示している。Ｈｉｇｈの状態はマルチヒット検索が実行中を示しており、Ｌｏｗの状態はマルチヒット検索を実行していない状態を示している。Ｓ３１０において、マルチヒット検索を開始した時点からＳ３１５に到達するまでの期間をＨｉｇｈと表記している。それ以外の期間はＬｏｗとしてシングルヒット検索を実行していない状態を示している。図５ではＳ３１１からＳ３１４の終了までとなるので全てＨｉｇｈの状態である。
【００８５】
ＣＨ６は、マルチヒット検索において、検索エンジン１０７が検索キーと読みだしたエントリー情報が一致したことを検出したタイミングをＨｉｇｈと表記し、Ｌｏｗはそれ以外の状態を示している。
【００８６】
マルチヒット検索では、検索エンジン１０７が検索キーと読みだしたエントリー情報が一致したことを検出する毎にバッファ２０３に検索結果情報を書き込む処理を行う。図５では、検索エンジン１０７が検索キーと読みだしたエントリー情報が一致したことを検出した５０１のタイミングの直後に５０２のタイミングにおいてバッファ２０３に検索結果情報が書き込まれる様子を示している。同様に、検索エンジン１０７が検索キーと読みだしたエントリー情報が一致したことを検出した５０３のタイミングの直後に５０４のタイミングでバッファ２０３に検索結果情報が書き込まれる様子を示している。ここで５０３のタイミングでは、ＣＬＫ（基準となる動作タイミング）に対して連続で検索キーと読みだしたエントリー情報が一致を検出したことを示している。この場合でもバッファ２０３は、検索と同じ速度で検索キーに一致したエントリー情報を内部に蓄積可能な能力を持っているので、５０４のタイミングで検索結果情報を内部に蓄積している。
【００８７】
そして、Ｓ３１３においてバッファ２０３の蓄積量が閾値となったことを検出すると（Ｓ３１３でＹＥＳ）、蓄積している検索結果情報を指定された内部メモリ１０３か、共有メモリ１２に書き込む処理に移行する。そのため、バッファ２０３に蓄積されている検索結果情報を指定された内部メモリ１０３か、共有メモリ１２に書き込む処理を開始するタイミングが５０５となり、検索結果情報の書き込みが終了するタイミングが５０６となる。５０５と５０６の間の期間も検索処理は実行される。図５ではこの期間において、検索エンジン１０７が検索キーと読みだしたエントリー情報が一致しなかった場合を示している。５０６のタイミングの後、全てのエントリー情報について検索キーとの比較処理を終えるまで検索処理を継続する。
【００８８】
なお、５０５と５０６の間の期間において、検索キーと読みだしたエントリー情報が一致した場合は一時的に検索処理を一時停止にする。書き込み処理期間中（５０５と５０６の間の期間）に検索エンジン１０７が検索キーと読みだしたエントリー情報が一致したことを検出しても検索結果情報を記録できない状況になる。そのため、検索エンジン１０７は、５０５のタイミングで開始された書き込み処理の終了を検出するまで（５０６のタイミングを検出するまで）検索処理を一時停止にする。検索処理の停止期間は、検索キーと読みだしたエントリー情報が一致を検出してから５０６までの期間となる。そして、５０６のタイミングの後、バッファ２０３に検索結果情報を書き込み、その後、全てのエントリー情報について検索キーとの比較処理を終えるまで検索処理を継続する。
【００８９】
図６は、図５に対して、バッファ２０３を使用しない場合におけるマルチヒット検索の動作を示したものである。図６では、検索エンジン１０７が検索キーと読みだしたエントリー情報が一致したことを検出した６０１のタイミングの直後に６０２のタイミングで検索結果情報を指定された内部メモリ１０３か、共有メモリ１２に書き込む処理を開始する。
【００９０】
バッファ２０３を使用しない場合、この書き込み処理期間中に検索エンジン１０７が検索キーと読みだしたエントリー情報が一致したことを検出しても検索結果情報を記録できない状況になる。そのため、検索エンジン１０７は、６０２のタイミングで開始された書き込み処理の終了を検出するまで（６０４のタイミングを検出するまで）検索処理を一時停止にする。検索処理の停止期間は、６０３から６０５の期間となる。検索対象の全情報に対して検索処理を実行する場合、検索処理の停止期間（６０３から６０５の期間）が発生すると検索処理全体の処理時間が遅延することを示している。
【００９１】
本実施形態の検索装置１０１においては、検索対象の全情報に対して検索処理を実行するマルチヒット検索の場合、検索処理全体の処理時間が遅延しないように検索結果情報を一時的に蓄積するバッファ２０３を使用する。一方、シングルヒット検索の場合、図４に示すように、検索処理全体の処理時間を短縮するために検索結果情報を一時的に蓄積しないように制御する。そのため、シングルヒットとマルチヒットのいずれの検索処理を行う場合においても、高速に検索結果を出力することができる。
【００９２】
＜その他の実施形態＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００９３】
１０：サブシステム、１１：メインバス、１２：共有メモリ、１３：メインＣＰＵ、１００：情報処理装置、１０１：検索装置、１０２：ローカルバス、１０３：内部メモリ、１０４：サブＣＰＵ、１０５：ブリッジ、１０６：リクエスト受付部、１０７：検索エンジン、１０８：データベース、１０９：データ転送部、２０１：制御部、２０２：バスマスタ、２０３：バッファ、２０４：セレクタ
【図１】
2018077629.tif 000003
【図２】
2018077629.tif 000004
【図３】
2018077629.tif 000005
【図４】
2018077629.tif 000006
【図５】
2018077629.tif 000007
【図６】
2018077629.tif 000008