使用两次窗口查询Siddhi CEP

时间:2015-04-23 13:53:09

标签: wso2 complex-event-processing wso2cep siddhi

我正在尝试进行简单的查询,但需要两个时间窗口;如果您已经为此产品发送了上个月的广告,那么查询就像尝试向过去四个月内访问过网络产品两次以上的用户发送消息一样。

<ul style="left:50%">

并将继续?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

define stream webvisit (idClient string, idProduct string, chanel string)

from visits[productId =='Fondos’]#window.time(4 days)
select idClient, idProduct, chanel, count(idClient) as visitCount
group by idClient
insert into visits;


from visits[visitCount > 2]
select *
insert into resultStream; 

在第二个查询中,我们获取过去4天内每个客户的访问次数,在上一次查询中,我们使用count&gt;过滤这些结果。 2。

修改

由于您只需在最后一天内发送通知(假设其定义为:当前时间--24小时),您就需要发送通知,您可以尝试以下操作:

 define stream webvisit (idClient string, idProduct string, chanel string);

 from webvisit[idProduct == 'Fondos']#window.time(4 days) 
 select idClient, idProduct, chanel, count(idClient) as visitCount 
 group by idClient insert into visits for current-events; 

 from visits[visitCount > 2]#window.time(1 day) 
 select idClient, idProduct, chanel, count(idClient) as hitsForClientPerDay 
 insert into tempStream;

 from tempStream[hitsForClientPerDay < 2] 
 select idClient, idProduct, chanel, 'your custom message here' as advertisement 
 insert into advertisementStream;

第二个(1天窗口)查询跟踪在过去24小时内生成了多少个警报(&#39; hitsForClientPerDay&#39;),最后一个查询仅在没有&#39;在那段时间内是任何一个(请注意,当事件发生时hitsForClientPerDay将为1,因为当前事件也被认为是count(),所以我们将其检查为&lt; 2)。