我正在尝试编写一个检测模式的简单siddhi查询 例如:" Ice" "霜" " X" " Y" "苹果" "水"
事件Ice&奶油都应该在一起,苹果水应该在一起,x y是窗口中的任意随机值。长度(6)
问题是以下查询不限制window.length(6)我该如何实现呢?
from every (( s1=windowedStream[s1.val=='ice']-> s2= windowedStream[s2.val=='cream'] )
-> ( a1=windowedStream[a1.val=='apple'] -> a2 = windowedStream[a2.val =='water'] ))
select s1.meta_timestamp, s1.val
insert into filteredStream
答案 0 :(得分:0)
根据现有符号,Siddhi允许您仅基于时间窗口限制模式。请参阅以下内容。
https://docs.wso2.com/display/CEP420/SiddhiQL+Guide+3.1#SiddhiQLGuide3.1-Pattern
作为基于长度窗口限制模式的一种解决方法,您可以向“windowedStream”引入名为index的第三个属性,其中index反映事件到达的顺序(即第一个事件的索引为1,索引为第二个事件是2,依此类推)。然后,以下查询将捕获在6个事件的长度窗口内发生的模式。
from every (( s1=tempStream[s1.val=='ice']-> s2= tempStream[s2.val=='cream'] )
-> ( a1=tempStream[a1.val=='apple'] -> a2 = tempStream[a2.val =='water' and a2.index- s1.index <= 6]))
select s1.meta_timestamp, s1.val
insert into filteredStream;
希望这有帮助。