【发布时间】:2018-09-17 23:55:22
【问题描述】:
我正在尝试编写一个查询(不确定是否可能),形式为“如果一个人的值为 X,他们的下一个值在接下来的 5 秒内不能是值 Y”
我的两个尝试是:
顺序:
define stream inStream(person string, value string);
from every s1=inStream[value == 'X'],
s2=inStream[person == s1.person and value == 'Y'] within 5 sec
select s2.person
insert into outStream
这适用于简单的情况,但如果我提供如下输入:
"bob", "X"
"steve", "ABC"
"bob", "Y"
那么规则永远不会为 Bob 触发,因为中间有来自 Steve 的事件。
如果我尝试这样的模式:
define stream inStream(person string, value string);
from every s1=inStream[value == 'X']
-> s2=inStream[person == s1.person and value == 'Y'] within 5 sec
select s2.person
insert into outStream
然后它在以下情况下失败:
"bob", "X"
"bob", "Z"
"bob", "Y"
因为 Y 在 5 秒内仍然在 X 之后出现,即使两者之间有一个值。
我的问题是,有没有一种方法可以使用条件进行顺序查询(例如,仅对同一个人进行顺序查询)或通过某种检查来了解在 X 和 Y 之间是否收到了另一个值的模式?
【问题讨论】:
标签: complex-event-processing siddhi