Я пытаюсь написать EPStatement, который будет соответствовать любому событию, в котором нет указанного поля, «похожего» на другое событие в скользящем временном окне. Например, сопоставлять только те события, где «значение» находится на расстоянии не менее 3 от любого другого события в скользящем окне,

At t=t_0, E0={value=0}  // Match
At t=t_1, E1={value=9}  // Match
At t=t_2, E2={value=1}  // Don't match since value is within 3 of E0.value

Я ищу выражение, в котором я мог бы использовать любое выражение, сравнивающее два значения, в качестве метрики «подобия». Я рассматривал использование шаблонов или распознает совпадения, но они не распознают Похоже, что он поддерживает этот тип динамического сравнения с неизвестным количеством предыдущих событий.

0
user520747 7 Ноя 2018 в 18:57

1 ответ

Лучший ответ
select * from SomeEvent#keepall as e 
having not window(*).anyOf(p => Math.abs(p.value - e.value) <= 3 and p.id != e.id)

window(*) содержит все события. anyOf проходит через окно, чтобы найти совпадение. p.id=e.id исключает текущее событие. поле id, являющееся уникальным идентификатором события, которое вы можете иметь или не иметь в качестве свойства события для события.

0
user650839 7 Ноя 2018 в 19:13