如何定义 Siddhi 查询以检测具有以下属性的两个事件 e1 和 e2:
- e1 可能出现在 e2 之前或之后。
- 这意味着: abs( e1.timestamp - e2.timestamp ) <= 5s)
在 Drools 中我们可以使用 Allen 运算符一致:e1 一致 e2[5s]
如果 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 也作为普通属性发送,那么我们必须遵循上述查询格式。