SiddhiQL 模式和 Window 查询

SiddhiQL Pattern and Window Query

我正在尝试编写一个简单的 siddhi 查询来检测模式 例如:"Ice" "cream" "x" "y" "apple" "water"

其中事件 Ice & cream 应该放在一起,apple water 应该放在一起,x y 是 window.length(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

根据现有的符号,Siddhi 允许您仅根据时间 window 限制模式。请参考以下内容。

https://docs.wso2.com/display/CEP420/SiddhiQL+Guide+3.1#SiddhiQLGuide3.1-Pattern

作为基于长度 window 限制模式的变通方法,您可以向 "windowedStream" 引入名为索引的第三个属性,其中索引反映事件到达的顺序(即索引第一个事件是 1,第二个事件的索引是 2,依此类推)。然后以下查询将捕获长度为 window 的 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;

希望对您有所帮助。