首页 > 解决方案 > 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

我正在寻找一个可以使用任何比较两个值的表达式作为“相似性”度量的语句。我查看了使用模式匹配识别,但它们似乎不支持与未知数量的先前事件进行这种类型的动态比较。

标签: esper

解决方案


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,您可能拥有或不拥有作为事件的事件属性。


推荐阅读