Esper规则语言:上下文嵌套

时间:2016-04-20 14:07:11

标签: java rules rule-engine complex-event-processing esper

我有以下两个班级 HeartRate字段:

int heartrate;
String heartratesTimestamp;
String macAddress;

带有字段的步骤:

int steps;
String stepsTimestamp;
String macAddress;

我写的规则在最后1分钟步数超过100且心率超过160时触发。

EPStatement cepStatementRule7 = cepRule.createEPL("context PartitionByMac select * from "
            + "Steps.win:time(1 min) S, HeartRate.win:time(1 min) H "
            + "having (max(S.steps)-min(S.steps) > 100) and (H.heartrate > 160)");
    cepStatementRule7.addListener(new rule7Listener());

我想更改此规则,以便它基于macAddress的上下文。因此规则只考虑使用相同macAddress的步骤和心率。我已经为步骤的macAddress写了一个上下文规则,为heartrate的macAddress编写了一个上下文规则。它们都是单独工作的,但是当我试图嵌套它们时,规则将不再发射。

cepRule.createEPL("create context PartitionByMac 
context PartitionByMacSteps partition by macAddress from Steps, 
context PartitionByMacHeartRate partition by macAddress from HeartRate");

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你想要的是

create context PartitionByMac 
partition by macAddress from Steps, macAddress from HeartRate; 

这可确保相同的macaddress值位于同一分区中,以分析Steps和Heartrate事件。

嵌套上下文的行为方式不同。