2016-04-20 9 views
0

Я следующие два класса HeartRate с полями:Esper язык правила: контекст вложенности

int heartrate; 
String heartratesTimestamp; 
String macAddress; 

И шаги с полями:

int steps; 
String stepsTimestamp; 
String macAddress; 

Правило я написал пожары, когда число шагов более 100 за последние 1 минуту и ​​частота сердечных сокращений выше 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()); 

Я хотел бы cha это правило, чтобы оно было основано на контексте macAddress. Так что правило только рассматривает шаги и душевные переживания с тем же macAddress. Я написал контекстное правило для macAddress шагов и один для macAddress heartrate. Они работают индивидуально, но когда я пытаюсь их вложить, правило больше не срабатывает.

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

Что я делаю неправильно?

ответ

1

Что вы хотите

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

Это гарантирует, что одни и те же MacAddress значение земли в том же разделе для анализа шагов и HeartRate событий.

Вложенный контекст ведет себя по-разному.