我正在尝试编写一个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
我正在寻找一条语句,在其中可以使用将两个值进行比较的任何表达式作为“相似性”度量。我看过使用patterns或match recognize,但它们似乎不支持与未知数量的先前事件进行这种动态比较。
答案 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,您可以将该事件作为事件的事件属性。