Esper在滑动时间窗口中检测与先前事件不同的事件

时间:2018-11-07 15:57:46

标签: esper

我正在尝试编写一个EPStatement,它将匹配没有指定字段与滑动时间窗口中另一个事件“相似”的任何事件。例如,仅匹配“值”与滑动窗口中任何其他事件的距离至少为3的匹配事件,

At t=t_0, E0={value=0}  // Match
At t=t_1, E1={value=9}  // Match
At t=t_2, E2={value=1}  // Don't match since value is within 3 of E0.value

我正在寻找一条语句,在其中可以使用将两个值进行比较的任何表达式作为“相似性”度量。我看过使用patternsmatch recognize,但它们似乎不支持与未知数量的先前事件进行这种动态比较。

1 个答案:

答案 0 :(得分:0)

select * from SomeEvent#keepall as e 
having not window(*).anyOf(p => Math.abs(p.value - e.value) <= 3 and p.id != e.id)

window(*)保存所有事件。 anyOf会通过窗口查找匹配的内容。 p.id=e.id排除当前事件。字段id是该事件的唯一ID,您可以将该事件作为事件的事件属性。