1

如何定义 Siddhi 查询以检测具有以下属性的两个事件 e1 和 e2:

  • e1 可能出现在 e2 之前或之后。
  • 这意味着: abs( e1.timestamp - e2.timestamp ) <= 5s)

在 Drools 中我们可以使用 Allen 运算符一致:e1 一致 e2[5s]

4

1 回答 1

0

如果 e1 和 e2 都是来自同一流的两种不同类型的事件,则

from every e1=FooStream -> e2=FooStream[e1.type!= e2.type and math:abs(e1.timestamp - e2.timestamp ) <= 5*6000] 
within 10 sec
select e1.timestamp, e2. ...
insert into OutputStream;

否则,如果它们来自不同的流,您可能需要编写两个查询

from every e1=FooStream -> e2=BarStream[math:abs( e1.timestamp - e2.timestamp ) <= 5*6000] 
within 10 sec
select e1.timestamp, e2. ...
insert into OutputStream; 

from every e1=BarStream -> e2=FooStream[math:abs( e1.timestamp - e2.timestamp ) <= 5*6000] 
within 10 sec
select e1.timestamp, e2. ...
insert into OutputStream; 

如果“timestamp”是一个 Siddhi 事件时间戳(不是事件中的属性),那么我们可以使用“5 秒内”并省略过滤子句,但如果 timeStamp 也作为普通属性发送,那么我们必须遵循上述查询格式。

于 2016-01-17T17:34:21.563 回答