Esper规则语言:上下文嵌套
Esper rule language: context nesting
我有以下两个类
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 和心率的 macAddress 编写了一个上下文规则。它们都单独工作,但当我尝试嵌套它们时,规则将不再触发。
cepRule.createEPL("create context PartitionByMac
context PartitionByMacSteps partition by macAddress from Steps,
context PartitionByMacHeartRate partition by macAddress from HeartRate");
我做错了什么?
你要的是
create context PartitionByMac
partition by macAddress from Steps, macAddress from HeartRate;
这可确保相同的 macaddress 值位于同一分区中以分析步数和心率事件。
嵌套上下文的行为不同。
我有以下两个类 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 和心率的 macAddress 编写了一个上下文规则。它们都单独工作,但当我尝试嵌套它们时,规则将不再触发。
cepRule.createEPL("create context PartitionByMac
context PartitionByMacSteps partition by macAddress from Steps,
context PartitionByMacHeartRate partition by macAddress from HeartRate");
我做错了什么?
你要的是
create context PartitionByMac
partition by macAddress from Steps, macAddress from HeartRate;
这可确保相同的 macaddress 值位于同一分区中以分析步数和心率事件。
嵌套上下文的行为不同。