Я хочу вызвать правило, если в течение 10 секунд в одном месте произошли два события одного типа.
У меня есть следующее правило:
rule "trigger if there were more then 2 events of same type in same place"
when
$event1: Event($props : props, $props.get("EVENT_TYPE") == "FOO_TYPE", $props.containsKey("EVENT_PLACE"))
$eventPlace1: String() from $props.get("EVENT_PLACE")
$events: List(size > 2) from collect(Event($props2 : props,
$props2.get("EVENT_TYPE") == "FOO_TYPE",
$props2.containsKey("EVENT_PLACE"),
$props2.get("EVENT_DATE") == $eventPlace1
) over window:time(10s))
then
System.out.println("rule triggered, the events are: " + $events);
end
Поле props
в событии равно Map<String, Object>
.
Проблема в том, что это правило срабатывает несколько раз, а не один раз.
Например, я вставляю 4 события, где 3 изони имеют право на это правило, например, они имеют одинаковые EVENT_TYPE и EVENT_PLACE.
Я ожидаю, что правило будет применено один раз, но в действительности при пожарах - 3 раза, один раз для каждого соответствующего события.
Как добиться желаемого поведения?