本実施例1に係る照合装置の構成の一例について説明する。図1は、本実施例1に係る照合装置の構成を示す機能ブロック図である。図1に示すように、この照合装置100は、通信部110と、入力部120と、表示部130と、記憶部140と、制御部150とを有する。
通信部110は、ネットワークを介して他の外部装置と通信を実行する処理部である。通信部110は、通信装置に対応する。
入力部120は、照合装置100に入力するための入力装置である。例えば、入力部120は、キーボードやマウス、タッチパネル等に対応する。
表示部130は、制御部150から出力される情報を表示する表示装置である。表示部130は、液晶モニタやタッチパネル等に対応する。
記憶部140は、クエリ141および照合データ142を有する。記憶部140は、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子などの記憶装置に対応する。
クエリ141は、ウィンドウ型直列パターンのクエリである。ウィンドウ型直列パターンのクエリは、イベントの出現順序を規定しないウィンドウを直列に接続したものである。図2は、本実施例1に係るクエリのデータ構造の一例を示す図である。図2に示すように、クエリ141は、ウィンドウ141a,141bが定義され、ウィンドウ141aおよびウィンドウ141bが直列に接続される。ウィンドウ141aとウィンドウ141bとのインターバル条件を「5−8分」とする。
ウィンドウ141aは、イベント「A」が出現するというイベント条件と、イベント「B」が出現するというイベント条件と、イベント「C」が出現するというイベント条件とを含む。また、ウィンドウ141aのウィンドウ幅条件は、4分である。このため、ある開始時刻から4分後までの時間帯に、順不同で、イベントA,B,Cが出現する場合には、ウィンドウ141aの条件を満たすことになる。
ウィンドウ141bは、イベント「D」が出現するというイベント条件と、イベント「E」が出現するというイベント条件とを含む。また、ウィンドウ141bのウィンドウ幅条件は、3分である。このため、ある開始時刻から3分後までの時間帯に、順不同で、イベントD,Eが出現する場合には、ウィンドウ141bの条件を満たすことになる。
照合データ142は、クエリ141の照合対象となる情報であり、イベントの出現時刻の情報を含む。図3は、本実施例1に係る照合データのデータ構造の一例を示す図である。図3に示すように、照合データ142は、時刻と、顧客IDと、場所と、イベントとをそれぞれ対応付ける。時刻は、イベントが出現した時刻を示す情報である。顧客IDは、イベントに関連する顧客を一意に識別する情報である。場所は、イベントが出現した場所を一意に識別する情報である。イベントは、イベントの種別を示す。例えば、図3の時刻「0」分において、場所「3F」でイベント「A」が出現し、顧客ID「432」の顧客に関連する旨のレコードが登録される。
なお、図3の照合データ142のデータイメージは、図4に示すものとなる。図4は、照合データのデータイメージを示す図である。後述する説明では、図4に示すようなデータイメージを利用して、適宜説明を行う。図4の横軸は時刻に対応する。図4において、例えば、時刻「0」において、イベント「A」が出現している。
図1の説明に戻る。制御部150は、ウィンドウ処理部151および照合部152を有する。制御部150は、例えば、ASIC(Application Specific Integrated Circuit)や、FPGA(Field Programmable Gate Array)などの集積装置に対応する。また、制御部150は、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)等の電子回路に対応する。
ウィンドウ処理部151は、クエリ141を参照し、クエリ141のウィンドウのウィンドウ幅条件よりも大きい幅のウィンドウを、照合データ142上に設定する処理部である。例えば、ウィンドウ処理部151は、式(1)に基づく時間幅のウィンドウを、照合データ142に設定する。ウィンドウ処理部151は、照合データ142上に設定したウィンドウが、クエリ141のウィンドウのイベント条件を満たす場合には、設定したウィンドウを仮ウィンドウとする。
ウィンドウ処理部151が、仮ウィンドウを構築する処理手順について説明する。図5は、本実施例1に係る仮ウィンドウ構築処理の処理手順を示すフローチャートである。図5に示すように、ウィンドウ処理部151は、照合データ142の時間を各ウィンドウ幅条件の長さで分割し、分割領域に対して時刻順に番号を付与する(ステップS101)。
ウィンドウ処理部151は、連続する2つの分割領域から最後の時刻を除いた期間を、ウィンドウに対する予備ウィンドウに設定する(ステップS102)。ウィンドウ処理部151は、1つのイベントを検知し(ステップS103)、ウィンドウのイベント条件で振り分ける(ステップS104)。
ウィンドウ処理部151は、イベントの時刻をウィンドウ幅条件で割った値を分割領域番号とし、分割領域番号に一致する予備ウィンドウにイベントを追加する(ステップS105)。ただし、ステップS105において、ウィンドウ処理部151は、ステップS102で取り除いた最後の時刻と、イベントの時刻が一致する場合には、イベントを追加しない。
ウィンドウ処理部151は、予備ウィンドウがウィンドウのイベント条件を満たすか否かを判定する(ステップS106)。ウィンドウ処理部151は、予備ウィンドウがウィンドウのイベント条件を満たさない場合には(ステップS106,No)、ステップS108に移行する。
一方、ウィンドウ処理部151は、予備ウィンドウがウィンドウのイベント条件を満たす場合には(ステップS106,Yes)、予備ウィンドウを仮ウィンドウに設定する(ステップS107)。
ウィンドウ処理部151は、処理を終了する場合には(ステップS108,Yes)、ウィンドウを設定する処理を終了する。一方、ウィンドウ処理部151は、処理を終了しない場合には(ステップS108,No)、ステップS103に移行する。
ここで、図2に示したクエリ141と、図4に示した照合データ142とを例にして、ウィンドウ処理部151が実行する仮ウィンドウ構築処理について説明する。図6〜図9は、本実施例1に係る仮ウィンドウ構築処理を説明するための図である。
図6について、ウィンドウ処理部151は、クエリ141のウィンドウ141aのウィンドウ幅条件「4」によって照合データ142の時間を分割し、分割領域70a,70b,70c,70d,70eを設定する。ウィンドウ処理部151は、分割領域70a〜70eに対して、分割領域番号0〜4をそれぞれ設定する。ウィンドウ処理部151は、クエリ141のウィンドウ141bのウィンドウ幅条件「3」によって照合データ142の時間を分割し、分割領域80a,80b,80c,80d,80e,80f,80gを設定する。ウィンドウ処理部151は、分割領域80a〜80gに対して、分割領域番号0〜6をそれぞれ設定する(ステップS10)。
ウィンドウ処理部151は、連続する分割領域から、最後の時刻を除いた期間を予備ウィンドウに設定する。ウィンドウ処理部151は、分割領域70a,70bについて、最後の時刻「7」を除いた期間を予備ウィンドウ71として設定する。ウィンドウ処理部151は、分割領域80a,80bについて、最後の時刻「5」を除いた期間を予備ウィンドウ81として設定する(ステップS11)。
ウィンドウ処理部151は、他の連続する分割領域についても、上記ステップS11と同様の処理を実行し、予備ウィンドウ72,73,74,75および予備ウィンドウ82,83,84,85,86,87を設定する(ステップS12)。
ウィンドウ処理部151は、予備ウィンドウを設定した後に、照合データ142に対してイベントの走査を開始する。以下の説明では、時刻Xにおいて、イベントYを検知することを、イベント(X,Y)を検知すると適宜表記する。また、予備ウィンドウ71〜75は、図2のクエリ141のウィンドウ141aに定義されたイベント条件A,B,Cに対応するイベントA,B,Cが追加された場合に、イベント条件を満たすことになる。予備ウィンドウ81〜87は、クエリ141のウィンドウ141bに定義されたイベント条件D,Eに対応するイベントD,Eが追加された場合に、イベント条件を満たすことになる。
ウィンドウ処理部151は、イベント(0,A)を検知する。イベントAの時刻が「0」であり、ウィンドウ幅条件が「4」であるため、分割領域番号は「0÷4=0」となる。分割領域番号と同一の番号が割り当てられた分割領域を含む予備ウィンドウ71に、イベントAを追加する。なお、予備ウィンドウ71は、クエリ141のウィンドウ141aのイベント条件を満たしていない(ステップS13)。ステップS13に示す処理は、図5のステップS105、S106に示した処理に対応する。以下の処理についても同様である。
図7の説明に移行する。ウィンドウ処理部151は、イベント(1,B)、(2,A)を検知する。イベント(1,B)、(2,A)に対する分割領域番号は「0」となる。このため、ウィンドウ処理部151は、予備ウィンドウ71にイベントA,Bを登録する。なお、予備ウィンドウ71は、クエリ141のウィンドウ141aのイベント条件を満たしていない(ステップS14)。
ウィンドウ処理部151は、イベント(4,B)、(4,C)、(5,C)を検知する。イベント(4,B)、(4,C)、(5,C)に対する分割領域番号は「1」となる。ウィンドウ処理部151は、分割領域番号「1」に対応する予備ウィンドウ71、72にイベントB,C,Cを登録する。ウィンドウ処理部151は、予備ウィンドウ71が、クエリ141のウィンドウ141aのイベント条件を満たすので、予備ウィンドウ71を仮ウィンドウに登録する。なお、予備ウィンドウ72は、クエリ141のウィンドウ141aのイベント条件を満たしていない(ステップS15)。
ウィンドウ処理部151は、イベント(9,B)、(10,A)、(10,C)を検知する。イベント(9,B)、(10,A)、(10,C)に対する分割領域番号は「2」となる。ウィンドウ処理部151は、分割領域番号「2」に対応する予備ウィンドウ72,73にイベントB,A,Cを登録する。ウィンドウ処理部151は、ウィンドウ72,73が、クエリ141のウィンドウ141aのイベント条件を満たすので、予備ウィンドウ72,73を仮ウィンドウに登録する(ステップS16)。
ウィンドウ処理部151は、イベント(11,A)、(11,B)を検知する。イベント(11,A)、(11,B)に対する分割領域番号は「2」となる。また、イベント(11,A)、(11,B)は、分割領域70cの最後の時刻である。このため、ウィンドウ処理部151は、仮ウィンドウ73にのみ、イベントA,Bを追加する(ステップS17)。
図8の説明に移行する。ウィンドウ処理部151は、イベント(12,A)を検知する。イベント(12,A)に対する分割領域番号は「3」となる。ウィンドウ処理部151は、分割領域番号「3」に対応する仮ウィンドウ73および予備ウィンドウ74に、イベントAを追加する。予備ウィンドウ74は、クエリ141のウィンドウ141aのイベント条件を満たしていない(ステップS18)。
ウィンドウ処理部151は、イベント(14,B)を検知する。イベント(14,B)に対する分割領域番号は「3」となる。ウィンドウ処理部151は、分割領域番号「3」に対応する仮ウィンドウ73および予備ウィンドウ74に、イベントBを追加する。予備ウィンドウ74は、クエリ141のウィンドウ141aのイベント条件を満たしていない(ステップS19)。
ウィンドウ処理部151は、イベント(14,D)を検知する。イベント(14,D)に対する分割領域番号は「3」となる。ウィンドウ処理部151は、イベント(14,D)が、分割領域80eで最後の時刻であるため、予備ウィンドウ85にのみ、イベントDを追加する。ウィンドウ85は、クエリ141のウィンドウ141bのイベント条件を満たしていない(ステップS20)。
ウィンドウ処理部151は、イベント(15,E)を検知する。イベント(15,E)に対する分割領域番号は「3」となる。ウィンドウ処理部151は、分割領域番号「3」に対応する予備ウィンドウ85,86に、イベントEを追加する。ウィンドウ処理部151は、予備ウィンドウ85が、クエリ141のウィンドウ141bのイベント条件を満たすので、予備ウィンドウ85を仮ウィンドウ85に登録する。予備ウィンドウ86は、クエリ141のウィンドウ141bのイベント条件を満たしていない(ステップS21)。
図9の説明に移行する。ウィンドウ処理部151は、イベント(17,C)を検知する。イベント(17,C)に対する分割領域番号は「3」となる。ウィンドウ処理部151は、分割領域番号「3」に対応する予備ウィンドウ74,75に、イベントCを追加する。ウィンドウ処理部151は、予備ウィンドウ74が、クエリ141のウィンドウ141bのイベント条件を満たすので、予備ウィンドウ74を仮ウィンドウ74に登録する。予備ウィンドウ75は、クエリ141のウィンドウ141bのイベント条件を満たしていない(ステップS22)。
ウィンドウ処理部151は、イベント(17,E)を検知する。イベント(17,E)に対する分割領域番号は「5」となる。ウィンドウ処理部151は、イベント(17,E)が、分割領域80fの最後の時刻であるため、予備ウィンドウ86にのみ、イベントEを登録する。予備ウィンドウ86は、クエリ141のウィンドウ141bのイベント条件を満たしていない(ステップS23)。
ウィンドウ処理部151は、イベント(18,E)を検知する。イベント(18,E)に対する分割領域番号は「6」となる。ウィンドウ処理部151は、分割領域番号「6」に対応する予備ウィンドウ86,87に、イベントEを追加する。予備ウィンドウ86,86は、クエリ141のウィンドウ141bのイベント条件を満たしていない(ステップS24)。
ウィンドウ処理部151は、イベント(19,D)を検知する。イベント(19,D)に対する分割領域番号は「6」となる。ウィンドウ処理部151は、分割領域番号「6」に対応する予備ウィンドウ86,87に、イベントDを追加する。ウィンドウ処理部151は、予備ウィンドウ86,87が、クエリ141のウィンドウ141bのイベント条件を満たすので、予備ウィンドウ86,87を仮ウィンドウに登録する(ステップS25)。
図6〜図9に説明したように、ウィンドウ処理部151が、処理を実行すると、仮ウィンドウ71,72,73,74と、仮ウィンドウ85,86,87が登録される。図10は、本実施例1に係る仮ウィンドウ構築処理の処理結果の一例を示す図である。ウィンドウ処理部151は、処理結果を、照合部152に出力する。
照合部152は、ウィンドウ処理部151の処理結果を基にして、クエリ141の条件を満たすイベントの組み合わせを検出する処理部である。ウィンドウ処理部151の処理結果を図10に示すものであるとすると、照合部152は、仮ウィンドウ71〜74と、仮ウィンドウ85〜87との組み合わせについて、クエリ141のインターバル条件「5−8分」を満たす仮ウィンドウの組み合わせを判定する。
クエリ141のインターバル条件「5−8分」を満たす仮ウィンドウの組み合わせは、仮ウィンドウ71と仮ウィンドウ85との組み、仮ウィンドウ72と仮ウィンドウ86との組み、仮ウィンドウ72と仮ウィンドウ87との組みとなる。
このため、照合部152は、仮ウィンドウ71,85の組みに含まれるイベントの種別と時刻との組みを、照合結果として出力する。また、照合部152は、仮ウィンドウ72,86の組みに含まれるイベントの種別と時刻との組みを、照合結果として出力する。また、照合部152は、仮ウィンドウ72,87の組みに含まれるイベントの種別と時刻との組みを、照合結果として出力する。
次に、本実施例1に係る照合装置100の処理手順について説明する。図11は、本実施例1に係る照合装置の処理手順を示すフローチャートである。図11に示すように、照合装置100は、仮ウィンドウ構築処理を実行する(ステップS201)。このステップS201に示す仮ウィンドウ構築処理は、図5に示した処理手順に対応する処理である。
照合装置100は、インターバル条件をチェックし、インターバル条件を満たす仮ウィンドウの組みとリンクを出力する(ステップS202)。照合装置100は、組み合わせ展開を実行する(ステップS203)。例えば、ステップS203において、照合装置100は、インターバル条件を満たす仮ウィンドウの組みに含まれるイベントの組みを出力する。
なお、ここでは説明を省略するが、照合装置100は、インターバル条件を満たす仮ウィンドウに含まれるイベントの組み合わせ展開を行う。照合装置100は、各イベントの組み合わせにおいて、クエリ141の全ての条件を満たすか否かをチェックし、クエリ141の全ての条件を満たしていれば、かかるイベントの組み合わせを出力する。組み合わせ展開に関する詳しい説明は、実施例2において説明する。
次に、本実施例1に係る照合装置100の効果について説明する。照合装置100は、クエリ141に定義されたウィンドウ幅条件よりも大きいウィンドウを、照合データ142に対して設定し、クエリ141に定義されたウィンドウのイベント条件を満たすウィンドウを、仮ウィンドウとして設定する。そして、照合装置100は、各仮ウィンドウの組みについて、インターバル条件をチェックし、インターバル条件を満たす仮ウィンドウの組みに含まれるイベントを照合結果として出力する。本実施例1に係る照合装置100によれば、従来技術と比較して、インターバル条件のチェック対象となるウィンドウの組み合わせを削減することができ、これにより、クエリと照合データとのマッチングを高速に行うことができる。なお、本実施例1では、クエリに2つのウィンドウが定義された最も基礎となる例にて説明したが、クエリに3つ以上のウィンドウが定義された場合にも適用可能である。
次に、本実施例2に係る照合装置の構成の一例について説明する。図12は、本実施例2に係る照合装置の構成を示す機能ブロック図である。図12に示すように、この照合装置200は、通信部110と、入力部120と、表示部130と、記憶部140と、制御部250とを有する。通信部110、入力部120、表示部130、記憶部140に関する説明は、実施例1に示した通信部110、入力部120、表示部130、記憶部140に関する説明と同様であるため、同一の符号を付してここでは説明を省略する。
制御部250は、ウィンドウ処理部251および照合部252を有する。制御部250は、例えば、ASICや、FPGAなどの集積装置に対応する。また、制御部250は、例えば、CPUやMPU等の電子回路に対応する。
ウィンドウ処理部251は、クエリ141を参照し、クエリ141のウィンドウのウィンドウ幅条件よりも大きい幅の仮ウィンドウを、順次設定する処理部である。図13は、本実施例2に係るウィンドウ処理部の処理の一例を説明するための図である。図13では一例として、ウィンドウ幅条件を「4」として説明を行う。
ウィンドウ処理部251は、クエリ141のウィンドウ幅条件以上の値を「w」の値に設定する。ウィンドウ処理部251は、ウィンドウの開始時刻から「2×w」過ぎてから、初めに出現するイベントを特定する。ウィンドウ処理部251は、初めに出現するイベントよりも、「w−1」時間前の時刻から次のイベントが出現する時刻を、次の仮ウィンドウの開始時刻として、順次仮ウィンドウを構築していく。
ここでは一例として、Wの値を「4」として、ウィンドウ処理部251の説明を行う。図13に示すように、ウィンドウ処理部251は、ウィンドウ260の開始時刻「0」から「2×w」過ぎてから、初めに出現するイベント(9,B)を特定する。ウィンドウ処理部251は、特定したイベント(9,B)よりも、「w−1=3」時間前の時刻「6」から次のイベントが出現する時刻「9」を、次のウィンドウ261の開始時刻として特定する。
ここで、ウィンドウ処理部251が仮ウィンドウを構築する処理手順について説明する。図14は、本実施例2に係る仮ウィンドウ構築処理の処理手順を示すフローチャートである。図14に示すように、ウィンドウ処理部251は、1つのイベントを検知し(ステップS301)、イベントを該当する仮ウィンドウに追加する(ステップS302)。
ウィンドウ処理部251は、仮ウィンドウが存在しない場合には(ステップS303,No)、ステップS312に移行する。
一方、ウィンドウ処理部251は、仮ウィンドウが存在する場合には(ステップS303,Yes)、イベントの時刻から最新の仮ウィンドウの開始時刻を減算した値が、「2w−1」以上であるか否かを判定する(ステップS304)。ウィンドウ処理部251は、イベントの時刻から最新の仮ウィンドウの開始時刻を減算した値が、「2w−1」以上でない場合には(ステップS304,No)、ステップS309に移行する。
ウィンドウ処理部251は、イベントの時刻から最新の仮ウィンドウの開始時刻を減算した値が、「2w−1」以上の場合には(ステップS304,Yes)、最新の仮ウィンドウが全てのイベント条件を満たすか否かを判定する(ステップS305)。ウィンドウ処理部251は、最新の仮ウィンドウが全てのイベント条件を満たさない場合には(ステップS305,No)、ステップS311に移行する。
ウィンドウ処理部251は、最新の仮ウィンドウが全てのイベント条件を満たす場合には(ステップS305,Yes)、ステップS307に移行する。ウィンドウ処理部251は、最新の仮ウィンドウ内に「イベントの時刻−w+1」の時刻以降にイベントがあるか否かを判定する(ステップS306)。ウィンドウ処理部251は、最新の仮ウィンドウ内に「イベントの時刻−w+1」の時刻以降にイベントがない場合には(ステップS306,No)、ステップS309に移行する。
ウィンドウ処理部251は、最新の仮ウィンドウ内に「イベントの時刻−w+1」の時刻以降にイベントが有る場合には(ステップS306,Yes)、ステップS307に移行する。ウィンドウ処理部251は、最新の仮ウィンドウに含まれるイベントから「イベントの時刻−w+1」の時刻から初めのイベントを取り出す(ステップS307)。
ウィンドウ処理部251は、仮ウィンドウを新しく生成し、取り出したイベントの時刻を新しく生成した仮ウィンドウの開始時刻とし、開始時刻以降のイベントを新しい仮ウィンドウに追加する(ステップS308)。ウィンドウ処理部251は、イベント時刻をウィンドウの終了時刻とし、イベントを仮ウィンドウに追加する(ステップS309)。
ウィンドウ処理部251は、処理を終了する場合には(ステップS310,Yes)、仮ウィンドウ構築処理を終了する。一方、ウィンドウ処理部251は、処理を終了しない場合には(ステップS310,No)、ステップS301に移行する。
ところで、ステップS311において、ウィンドウ処理部251は、最新の仮ウィンドウを削除する(ステップS311)。ウィンドウ処理部251は、仮ウィンドウを新しく生成し、イベントの時刻を新しい仮ウィンドウの開始時刻に設定し(ステップS312)、ステップS309に移行する。
ここで、図2に示したクエリ141と、図4に示した照合データ142を例にして、ウィンドウ処理部251が実行する仮ウィンドウ構築処理について説明する。図15〜図17は、本実施例2に係る仮ウィンドウ構築処理を説明するための図である。図15〜図17の説明では、イベントA〜Cに対するウィンドウのwの値を「4」とし、イベントD,Eに対するウィンドウのwの値を「3」として説明を行う。
図15について説明する。ウィンドウ処理部251は、イベント(0,A)を検知する。ウィンドウ処理部251は、仮ウィンドウ260を生成する。ウィンドウ処理部251は、イベントAを、仮ウィンドウ260に追加する(ステップS30)。
ウィンドウ処理部251は、イベント(1,B)を検知する。ウィンドウ処理部251は、仮ウィンドウ260の終了時刻を、イベント(1,B)の時刻「1」に設定する。ウィンドウ処理部251は、イベントBを、仮ウィンドウ260に追加する(ステップS31)。
ウィンドウ処理部251は、イベント(2,A)、(4,B)、(4,C)、(5,C)を検知する。ウィンドウ処理部251は、仮ウィンドウ260の終了時刻をイベント(5,C)の時刻「5」に設定する。ウィンドウ処理部251は、各イベントA,B,C,Cを、仮ウィンドウ260に追加する(ステップS32)。
ウィンドウ処理部251は、イベント(9,B)を検知する。イベント(9,B)のイベント時刻「9」から最新の仮ウィンドウ260の開始時刻「0」を減算した値が、「2w−1=7」の値よりも大きくなる。また、最新の仮ウィンドウ260は、全てのイベント条件を満たす。また、「イベント(9,B)のイベント時刻「9」−w+1」=「9−4+1=6」以降に、最新の仮ウィンドウ260のイベントが存在しない。このため、ウィンドウ処理部251は、新しい仮ウィンドウ261を生成し、仮ウィンドウ261の開始時刻および終了時刻を「9」に設定する(ステップS33)。
ウィンドウ処理部251は、イベント(10,A)、(10,C)、(11,A)、(11,B)、(12,A)、(14,B)を検知する。ウィンドウ処理部251は、各イベントA,C,A,B,A,Bを、最新の仮ウィンドウ261に設定する。ウィンドウ処理部251は、仮ウィンドウの終了時刻を「14」に設定する(ステップS34)。
ウィンドウ処理部251は、イベント(14,D)を検知する。ウィンドウ処理部251は、ウィンドウ270を生成する。ウィンドウ処理部251は、イベントDを、仮ウィンドウ270に追加する(ステップS35)。
ウィンドウ処理部251は、イベント(15,E)を検知する。ウィンドウ処理部251は、イベントEを仮ウィンドウ270に追加する(ステップS36)。
ウィンドウ処理部251は、イベント(17,C)を検知する。イベント(17,C)のイベント時刻「17」から最新の仮ウィンドウ261の開始時刻「9」を減算した値が、「2×2−1=7」の値よりも大きくなる。最新の仮ウィンドウ261は、全てのイベント条件を満たす。また、「イベント(17,C)のイベント時刻「17」−w+1=17−4+1=14」以降に、最新の仮ウィンドウ261のイベント(14,B)が存在する。このため、ウィンドウ処理部251は、新しい仮ウィンドウ262を生成し、仮ウィンドウ262の開始時刻をイベント(14,B)の開始時刻「14」に設定する。また、ウィンドウ処理部251は、イベント(17,C)を、仮ウィンドウ262に追加し、イベント(17,C)の時刻「17」を、仮ウィンドウ262の終了時刻に設定する(ステップS37)。
図17の説明に移行する。ウィンドウ処理部251は、イベント(17,E)、(18,E)を検知する。ウィンドウ処理部251は、イベントE,Eを仮ウィンドウ270に追加する(ステップS38)。
ウィンドウ処理部251は、イベント(19,D)を検知する。イベント(19,D)のイベント時刻「19」から最新の仮ウィンドウ270の開始時刻「14」を減算した値が、「2×3−1=5」の値よりも大きくなる。最新の仮ウィンドウ270は、全てのイベント条件を満たす。また、「イベント(19,D)のイベント時刻「19」−w+1=17−3+1=15」以降に、最新の仮ウィンドウ261のイベント(17,E)が存在する。このため、ウィンドウ処理部251は、新しい仮ウィンドウ271を生成し、仮ウィンドウ271の開始時刻をイベント(17,E)の開始時刻に設定する。また、ウィンドウ処理部251は、イベント(18,E)、(19,D)を、仮ウィンドウ271に追加し、イベント(19,D)の時刻「19」を、仮ウィンドウ271の終了時刻に設定する(ステップS39)。
ウィンドウ処理部251は、時刻21以降のイベントの検知を試みるが、イベントは存在しない。このため、最新の仮ウィンドウ262は、全てのイベント条件を満たさない。ウィンドウ処理部251は、仮ウィンドウ262を削除する(ステップS40)。
ウィンドウ処理部251は、上記図15〜図17に示す処理を実行することで、仮ウィンドウ260,261および仮ウィンドウ270,271を構築する。ウィンドウ処理部251は、構築した仮ウィンドウの情報を、照合部252に出力する。
図12の説明に戻る。照合部252は、ウィンドウ処理部251によって構築された仮ウィンドウと、クエリ141とを基にして、クエリ141の条件を満たすイベントの組みを照合データ142から検出する処理部である。
照合部252は、各仮ウィンドウの組みが、クエリ141のインターバル条件を満たすか否かを確認する場合に、仮ウィンドウの組みの終了時刻と開始時刻と時間間隔を利用する代わりに、仮ウィンドウ内のイベントの時刻を考慮して行う。以下の説明では、仮ウィンドウの組みについて、先行する仮ウィンドウを先行ウィンドウと表記し、後続する仮ウィンドウを後続ウィンドウと表記する。
照合部252は、先行ウィンドウと後続ウィンドウとの関係が「最小インターバル条件」および「最大インターバル条件」を満たす場合に、先行ウィンドウと後続ウィンドウとの組みを出力する。
まず、最小インターバル条件について説明する。照合部252は、先行ウィンドウと後続ウィンドウとの「最小間隔」が、インターバル条件の最小値より大となる場合に、「最小インターバル条件」を満たすと判定する。図18は、最小インターバル条件を説明するための図である。
図18について、先行ウィンドウをウィンドウ280とし、後続ウィンドウをウィンドウ290とする。照合部252は、先行ウィンドウ280に含まれるイベントのうち、イベント条件を満たす最初のイベントの組みの中で一番遅いイベントの時刻を、第1基準時刻として特定する。そうすると、第1基準時刻は「10」となる。
照合部252は、後続ウィンドウ290に含まれるイベントのうち、イベント条件を満たす最後のイベントの組みの中で一番早いイベントの時刻を、第2基準時刻として特定する。そうすると、第2基準時刻は「14」となる。
照合部252は、第1基準時刻と第2基準時刻との間隔を最小間隔として算出する。図18に示す例では、最小間隔は「4」となり、インターバル条件の最小値「4」以下である。このため、照合部252は、仮ウィンドウ280,290の組みについて、最小インターバルの条件を満たさないと判定する。なお、仮に、第1基準時刻が「9」より早い時刻であれば、最小インターバル条件を満たすことになる。
続いて、最大インターバル条件について説明する。照合部252は、先行ウィンドウと後続ウィンドウとの「最大間隔」が、インターバル条件の最大値と、先行ウィンドウ幅条件と、後続ウィンドウ幅条件を加算した値以下となっている場合に、「最大インターバル条件」を満たすと判定する。図19は、最大インターバル条件を説明するための図である。
図19について、先行ウィンドウをウィンドウ281とし、後続ウィンドウをウィンドウ291とする。照合部252は、先行ウィンドウ281に含まれるイベントのうち、イベント条件を満たす最後のイベントの組みの中で一番早いイベントの時刻を、第3基準時刻として特定する。そうすると、第3基準時刻は「2」となる。
照合部252は、後続ウィンドウ291に含まれる最初のイベントの組みの中で一番遅いイベントの時刻を、第4基準時刻として特定する。そうすると、第4基準時刻は「19」となる。
照合部252は、第3基準時刻と第4基準時刻との間隔を最大間隔として算出する。図19に示す例では、最大間隔は「17」となる。一方、インターバル条件の最大値「8」と、先行ウィンドウ幅「4」と、後続ウィンドウ幅「3」を加算した値は「15」となる。このため、照合部252は、仮ウィンドウ281,291の組みについて、最大インターバル条件を満たさないと判定する。なお、仮に、第3基準時刻が「5」より遅い時刻であれば、最大インターバル条件を満たすことになる。
ここで、照合部252がインターバル条件を判定する処理手順について説明する。図20および図21は、インターバル条件判定処理の処理手順を示すフローチャートである。図20に示すように、照合部252は、クエリ141の先行するウィンドウ条件に対応する先頭の仮ウィンドウを取り出し、先行ウィンドウに設定する(ステップS401)。
照合部252は、クエリ141の後続ウィンドウ条件に対応する先頭の仮ウィンドウを取り出して後続ウィンドウに設定し、さらに、ベース後続ウィンドウに設定する(ステップS402)。
照合部252は、先行ウィンドウと後続ウィンドウについて、インターバル条件をチェックする(ステップS403)。照合部252は、最小インターバル条件を満たさない場合には(ステップS404,No)、図21のステップS407に移行する。
一方、照合部252は、最小インターバル条件を満たす場合には(ステップS404,Yes)、最大インターバル条件を満たすか否かを判定する(ステップS405)。照合部252は、最大インターバル条件を満たさない場合には(ステップS405,No)、図21のステップS411に移行する。
一方、照合部252は、最大インターバル条件を満たす場合には(ステップS405,Yes)、ステップS406に移行する。照合部252は、該当する先行ウィンドウと後続ウィンドウとの組みを出力していなければ出力し、先行ウィンドウと後続ウィンドウとのリンクを出力し(ステップS406)、図20のステップS408に移行する。
図21の説明に移行する。照合部252は、後続ウィンドウの次のウィンドウをベース後続ウィンドウに設定する(ステップS407)。照合部252は、後続ウィンドウの次の仮ウィンドウが存在する場合には(ステップS408,Yes)、後続ウィンドウの次の仮ウィンドウを取り出し、後続ウィンドウに設定し(ステップS409)、図20のステップS403に移行する。
一方、照合部252は、後続ウィンドウの次の仮ウィンドウが存在しない場合には(ステップS408,No)、先行ウィンドウの次の仮ウィンドウが存在するか否かを判定する(ステップS410)。照合部252は、先行ウィンドウの次の仮ウィンドウが存在しない場合には(ステップS410,No)、処理を終了する。
一方、照合部252は、先行ウィンドウの次の仮ウィンドウが存在する場合には(ステップS410,Yes)、先行ウィンドウの次の仮ウィンドウを取り出し、先行ウィンドウに設定する(ステップS411)。
照合部252は、ベース後続ウィンドウがNULLである場合には(ステップS412,Yes)、処理を終了する。照合部252は、ベース後続ウィンドウがNULLでない場合には(ステップS412,No)、ベース後続ウィンドウを後続ウィンドウに設定し(ステップS413)、図20のステップS403に移行する。
ここで、図17に示した仮ウィンドウの構築結果と、図2に示したクエリ141とを例にして、照合部252が実行するインターバル条件判定処理について説明する。図22〜図25は、本実施例2に係るインターバル条件判定処理を説明するための図である。
図22について説明する。照合部252は、クエリ141の先行するウィンドウ141aの条件に対応する先頭の仮ウィンドウ260を先行ウィンドウに設定する。照合部252は、クエリ141の後続ウィンドウ141bの条件に対応する後続の仮ウィンドウ270を、後続ウィンドウに設定する。また、後続ウィンドウ270を、ベース後続ウィンドウに設定する(ステップS50)。
照合部252は、先行ウィンドウ260と後続ウィンドウ270について、最小インターバル条件を満たすか否かを判定する。先行ウィンドウ260の第1基準時刻は、イベント(4,C)の「4」となる。後続ウィンドウ270の第2基準時刻は、イベント(14,D)の「14」となる。照合部252は、最小間隔が「10」となり、インターバル条件の最小値「4」よりも大となるため、先行ウィンドウ260と後続ウィンドウ270とは、最小インターバル条件を満たすと判定する(ステップS51)。
照合部252は、先行ウィンドウ260と後続ウィンドウ270について、最大インターバル条件を満たすか否かを判定する。先行ウィンドウ260の第3基準時刻は、イベント(2,A)の「2」となる。後続ウィンドウ270の第4基準時刻は、イベント(15,E)の「15」となる。ここで、最大間隔が「13」となり、インターバル条件の最大値「8」と、先行ウィンドウ幅条件「4」と、後続ウィンドウ幅条件「3」を加算した値「15」以下となる。このため、照合部252は、先行ウィンドウ260と後続ウィンドウ270とが、最大インターバル条件を満たすと判定する(ステップS52)。
先行ウィンドウ260および後続ウィンドウ270が最小インターバル条件および最大インターバル条件を満たす。このため、照合部252は、先行ウィンドウ260および後続ウィンドウ270の組みを出力し、リンクを出力する(ステップS53)。
図23の説明に移行する。照合部252は、後続ウィンドウ270の次の仮ウィンドウ271を後続ウィンドウに設定する(ステップS54)。
照合部252は、先行ウィンドウ260と後続ウィンドウ271とについて、最小インターバル条件を満たすか否かを判定する。先行ウィンドウ260の第1基準時刻は、イベント(4,C)の「4」となる。後続ウィンドウ271の第2基準時刻は、イベント(18,E)の「18」となる。照合部252は、最小間隔が「14」となり、インターバル条件の最小値「4」よりも大となるため、先行ウィンドウ260と後続ウィンドウ271とは、最小インターバル条件を満たすと判定する(ステップS55)。
照合部252は、先行ウィンドウ260と後続ウィンドウ271について、最大インターバル条件を満たすか否かを判定する。先行ウィンドウ260の第3基準時刻は、イベント(2,A)の「2」となる。後続ウィンドウ260の第4基準時刻は、イベント(19,D)の「19」となる。ここで、最大間隔が「17」となり、インターバル条件の最大値「8」と、先行ウィンドウ幅条件「4」と、後続ウィンドウ幅条件「3」を加算した値「15」よりも大となる。このため、照合部252は、先行ウィンドウ260と後続ウィンドウ271とが、最大インターバル条件を満たさないと判定する(ステップS56)。
図24の説明に移行する。照合部252は、先行ウィンドウ260の次の仮ウィンドウ261を先行ウィンドウに設定する。照合部252は、後続ウィンドウ270をベース後続ウィンドウに設定する(ステップS57)。
照合部252は、先行ウィンドウ261と後続ウィンドウ270とについて、最小インターバル条件を満たすか否かを判定する。先行ウィンドウ261の第1基準時刻は、イベント(10,A)の「10」となる。後続ウィンドウ270の第2基準時刻は、イベント(14,D)の「14」となる。照合部252は、最小間隔が「4」となり、インターバル条件の最小値「4」以下となるため、先行ウィンドウ261と後続ウィンドウ270とは、最小インターバル条件を満たさないと判定する。なお、先行ウィンドウ261とベース後続ウィンドウ270とが、最小インターバル条件を満たさない場合には、先行ウィンドウ261と仮ウィンドウ271とも最小インターバル条件を満たさない(ステップS58)。
照合部252は、後続ウィンドウ270の次の仮ウィンドウ271を後続ウィンドウおよびベース後続ウィンドウに設定する(ステップS59)。
照合部252は、先行ウィンドウ261と後続ウィンドウ271について、最小インターバル条件を満たすか否かを判定する。先行ウィンドウ261の第1基準時刻は、イベント(10,A)の「10」となる。後続ウィンドウ271の第2基準時刻は、イベント(18,E)の「18」となる。照合部252は、最小間隔が「8」となり、インターバル条件の最小値「4」よりも大となるため、先行ウィンドウ261と後続ウィンドウ271とは、最小インターバル条件を満たすと判定する(ステップS60)。
図25の説明に移行する。照合部252は、先行ウィンドウ261と後続ウィンドウ271について、最大インターバル条件を満たすか否かを判定する。先行ウィンドウ261の第3基準時刻は、イベント(10,C)の「10」となる。後続ウィンドウ271の第4基準時刻は、イベント(19,D)の「19」となる。ここで、最大間隔が「9」となり、インターバル条件の最大値「8」と、先行ウィンドウ幅条件「4」と、後続ウィンドウ幅条件「3」を加算した値「15」以下となる。このため、照合部252は、先行ウィンドウ261と後続ウィンドウ271とが、最大インターバル条件を満たすと判定する(ステップS61)。
先行ウィンドウ261および後続ウィンドウ271が最小インターバル条件および最大インターバル条件を満たす。このため、照合部252は、先行ウィンドウ261および後続ウィンドウ271の組みを出力し、リンクを出力する(ステップS62)。
照合部252は、先行ウィンドウ261の次の仮ウィンドウが存在しないため、インターバル条件判定処理を終了する。照合部252は、図22〜図25の処理を実行することで、先行ウィンドウ260と後続ウィンドウ270との組みと、先行ウィンドウ261と後続ウィンドウ271との組みを出力する。
照合部252は、各仮ウィンドウについてインターバル条件判定処理を実行した後に、組み合わせ展開を行い、クエリ141の条件を満たすイベントの組みを判定する。図26は、組み合わせ展開の結果の一例を示す図である。
図26において、イベント群300は、先行ウィンドウ260と後続ウィンドウ270との組み合わせ展開の結果である。イベント群400は、先行ウィンドウ261と後続ウィンドウ271の組み合わせ展開の結果である。照合部252は、イベント群300,400について、クエリ141の条件を満たすイベントの組みを特定する。
イベント群300において、イベント306,309の組みが、クエリ141の条件を満たす。イベント群400において、イベント401〜404,406〜409,411〜414の組みが、クエリ141の条件を満たす。このため、照合部252は、イベント306,309,イベント401〜404,406〜409,411〜414の組みを、クエリ141の照合結果として出力する。
次に、本実施例2に係る照合装置200の処理手順について説明する。図27は、本実施例2に係る照合装置の処理手順を示すフローチャートである。図27に示すように、照合装置100は、仮ウィンドウ構築処理を実行する(ステップS501)。ステップS501に示す仮ウィンドウ構築処理は、図14に示した処理手順に対応する処理である。
照合装置200は、インターバル条件をチェックし、インターバル条件を満たす仮ウィンドウの組みとリンクを出力する(ステップS502)。ステップ502に示す処理は、図20及び図21に示した処理手順に対応する処理である。照合装置200は、組み合わせ展開を実行し、クエリ141の条件を満たすイベントの組みを出力する(ステップS503)。
次に、本実施例2に係る照合装置200の効果について説明する。照合装置200は、クエリ141のウィンドウ幅条件以上の値を「w」の値に設定し、ウィンドウの開始時刻から「2×w」過ぎてから、初めに出現するイベント特定する。そして、照合装置200は、初めに出現するイベントよりも、「w−1」時間前の時刻から次のイベントが出現する時刻を、次の仮ウィンドウの開始時刻として、順次仮ウィンドウを構築し、クエリ141の条件を満たすか否かを判定する。このため、照合装置200によれば、インターバル条件のチェック対象となるウィンドウの組み合わせを削減することができ、これにより、クエリと照合データとのマッチングを高速に行うことができる。
また、照合装置200は、先行ウィンドウおよび後続ウィンドウに含まれるイベントの時刻を基にして、クエリ141のインターバル条件が満たされるか否かを判定する。具体的に、照合装置200は、先行ウィンドウに含まれるイベントのうち、イベント条件を満たす最初のイベントの組みの中で一番遅いイベントの時刻を、第1基準時刻として特定する。照合装置200は、後続ウィンドウに含まれるイベントのうち、イベント条件を満たす最後のイベントの組みの中で一番早いイベントの時刻を、第2基準時刻として特定する。そして、照合装置200は、第1基準時刻および第2基準時刻のインターバルと、最小インターバル条件とを基にして、最小インターバル条件を満たすか否かを判定する。
更に、照合装置200は、先行ウィンドウに含まれるイベントのうち、イベント条件を満たす最後のイベントの組みの中で一番早いイベントの時刻を、第3基準時刻として特定する。照合装置200は、後続ウィンドウに含まれる最初のイベントの組みの中で一番遅いイベントの時刻を、第4基準時刻として特定する。照合装置200は、第3基準時刻および第4基準時刻のインターバルと、最大インターバル条件、先行ウィンドウの幅、および後続ウィンドウの幅を基にして、最大インターバル条件を満たすか否かを判定する。
そして、照合装置200は、最小インターバル条件を満たし、かつ、最大インターバル条件を満たす場合に、先行ウィンドウと後続ウィンドウとが、クエリ141のインターバル条件を満たすと判定する。このため、クエリ141の解となり得るイベントの組みを含んだウィンドウの組みをより正確に特定することができる。
次に、上記の実施例に示した照合装置と同様の機能を実現する照合プログラムを実行するコンピュータの一例を説明する。図28は、照合プログラムを実行するコンピュータの一例を示す図である。
図28に示すように、コンピュータ500は、各種演算処理を実行するCPU501と、ユーザからのデータの入力を受け付ける入力装置502と、ディスプレイ503を有する。また、コンピュータ500は、記憶媒体からプログラム等を読取る読み取り装置504と、ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置505とを有する。また、コンピュータ500は、各種情報を一時記憶するRAM506と、ハードディスク装置507を有する。そして、各装置501〜507は、バス508に接続される。
ハードディスク装置507は、ウィンドウ処理プログラム507a、照合プログラム507bを有する。CPU501は、各プログラム507a,507bを読み出してRAM506に展開する。
ウィンドウ処理プログラム507aは、ウィンドウ処理プロセス506aとして機能する。照合プログラム507bは、照合プロセス506bとして機能する。
例えば、ウィンドウ処理プロセス506aは、ウィンドウ処理部151,251に対応する。照合プロセス506bは、照合部152,252に対応する。
なお、各プログラム507a,507bについては、必ずしも最初からハードディスク装置507に記憶させておかなくてもよい。例えば、コンピュータ500に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ500がこれらから各プログラム507a,507bを読み出して実行するようにしてもよい。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータが実行する照合方法であって、
第1ウィンドウにイベント条件が対応付けられ、前記第1ウィンドウに所定のウィンドウ幅条件が設定され、複数の前記第1ウィンドウが所定のインターバル条件によって直列に接続されたクエリに基づいて、前記ウィンドウ幅条件よりも大きいウィンドウ幅の第2ウィンドウを、イベントと前記イベントの出現時刻とを対応付けた照合データに設定し、
前記第2ウィンドウに含まれる前記照合データのイベントおよび各第2ウィンドウのインターバルが、前記第1ウィンドウのイベント条件および前記インターバル条件を満たすか否かを判定する
各処理を実行することを特徴とする照合方法。
(付記2)前記第2ウィンドウを前記照合データに設定する処理は、前記第2ウィンドウの開始時刻を起点として、前記第2ウィンドウの幅を2倍した時刻よりも後に出現する初めのイベントの時刻から、前記第2ウィンドウの幅だけ前の時刻に戻り、戻った時刻の次の時刻より後に出現する初めのイベントの時刻を開始時刻とする次の第2ウィンドウを設定することを特徴とする付記1に記載の照合方法。
(付記3)前記インターバル条件は最小インターバル条件を含み、前記判定する処理は、先行の第2ウィンドウに含まれるイベントのうち、前記イベント条件を満たす最初のイベントの組みの中で一番遅いイベントの第1時刻と、後続の第2ウィンドウに含まれるイベントのうち、前記イベント条件を満たす最後のイベントの組みの中で一番早いイベントの第2時刻とを特定し、前記第1時刻と前記第2時刻とのインターバルと、前記最小インターバル条件とを基にして、先行の第2ウィンドウと後続の第2ウィンドウとが、前記インターバル条件を満たすか否かを判定することを特徴とする付記2に記載の照合方法。
(付記4)前記インターバル条件は最大インターバル条件を含み、前記判定する処理は、先行の第2ウィンドウに含まれるイベントのうち、前記イベント条件を満たす最後のイベントの組みの中で一番早いイベントの第3時刻と、後続の第2ウィンドウに含まれるイベントのうち、前記イベント条件を満たす最初のイベントの組みの中で一番遅いイベントの第4時刻とを特定し、前記第3時刻と前記第4時刻とのインターバルと、前記最大インターバル条件と、先行の第2ウィンドウの幅と、後続の第2ウィンドウの幅とを基にして、先行の第2ウィンドウと後続の第2ウィンドウとが、前記インターバル条件を満たすか否かを判定することを特徴とする付記2に記載の照合方法。
(付記5)コンピュータに、
第1ウィンドウにイベント条件が対応付けられ、前記第1ウィンドウに所定のウィンドウ幅条件が設定され、複数の前記第1ウィンドウが所定のインターバル条件によって直列に接続されたクエリに基づいて、前記ウィンドウ幅条件よりも大きいウィンドウ幅の第2ウィンドウを、イベントと前記イベントの出現時刻とを対応付けた照合データに設定し、
前記第2ウィンドウに含まれる前記照合データのイベントおよび各第2ウィンドウのインターバルが、前記第1ウィンドウのイベント条件および前記インターバル条件を満たすか否かを判定する
各処理を実行させる照合プログラム。
(付記6)前記第2ウィンドウを前記照合データに設定する処理は、前記第2ウィンドウの開始時刻を起点として、前記第2ウィンドウの幅を2倍した時刻よりも後に出現する初めのイベントの時刻から、前記第2ウィンドウの幅だけ前の時刻に戻り、戻った時刻の次の時刻より後に出現する初めのイベントの時刻を開始時刻とする次の第2ウィンドウを設定することを特徴とする付記5に記載の照合プログラム。
(付記7)前記インターバル条件は最小インターバル条件を含み、前記判定する処理は、先行の第2ウィンドウに含まれるイベントのうち、前記イベント条件を満たす最初のイベントの組みの中で一番遅いイベントの第1時刻と、後続の第2ウィンドウに含まれるイベントのうち、前記イベント条件を満たす最後のイベントの組みの中で一番早いイベントの第2時刻とを特定し、前記第1時刻と前記第2時刻とのインターバルと、前記最小インターバル条件とを基にして、先行の第2ウィンドウと後続の第2ウィンドウとが、前記インターバル条件を満たすか否かを判定することを特徴とする付記6に記載の照合プログラム。
(付記8)前記インターバル条件は最大インターバル条件を含み、前記判定する処理は、先行の第2ウィンドウに含まれるイベントのうち、前記イベント条件を満たす最後のイベントの組みの中で一番早いイベントの第3時刻と、後続の第2ウィンドウに含まれるイベントのうち、前記イベント条件を満たす最初のイベントの組みの中で一番遅いイベントの第4時刻とを特定し、前記第3時刻と前記第4時刻とのインターバルと、前記最大インターバル条件と、先行の第2ウィンドウの幅と、後続の第2ウィンドウの幅とを基にして、先行の第2ウィンドウと後続の第2ウィンドウとが、前記インターバル条件を満たすか否かを判定することを特徴とする付記6に記載の照合プログラム。