我想编写一个规则,当心率超过160时持续5分钟。我提出的规则如下:
EPAdministrator cepRule3 = cep.getEPAdministrator();
EPStatement cepStatementRule3 = cepRule3.createEPL("select * from "
+ "HeartRate.win:time(5 min) "
+ "group by macAddress "
+ "having min(heartrate) > 160");
cepStatementRule3.addListener(new rule3Listener());
我的HeartRate类包含以下字段:
int heartrate;
String heartratesTimestamp;
String macAddress;
我面临的问题是,每当心率超过160时,此规则就会触发。相反,我希望它仅在心率保持在160以上持续5分钟时才会开火。我该如何调整此规则?
答案 0 :(得分:2)
EPL: 每一个(HeartRate(心率> 160) - &gt;(计时器:间隔(5分钟)而非HeartRate(心率<= 160))
或简单地使用Java代码:
EPStatement cepStatementRule3 = cepRule3.createEPL("every(HeartRate(heartrate>160) -> (timer:interval(5 min) and not HeartRate(heartrate<=160))");
cepStatementRule3.addListener(new rule3Listener());
在Esper文档中查找EPL模式语法。