Подсчитайте количество фактов в скользящем окне с помощью Drools Fusion

Мне нужно написать правило, которое подсчитывает количество фактов, которые я получил в своем потоке за последние 10 секунд, если они соответствуют определенным критериям.

Так, например, если за последние 10 секунд 2 черных автомобиля проезжают перекресток, я хочу кого-то предупредить.

У меня есть следующее правило:

rule "check black cars in 10 seconds" dialect "java"
when

    $car : Car(color == Color.BLACK) over window:time(10s);
then

    System.out.println("got something");

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

Благодарю.

1 ответ

Решение
when
accumulate( Car(color == Color.BLACK) over window:time(10s);
            $cnt: count(1); $cnt == 2 )
then

Это сработает, когда вторая машина прибудет в течение 10 секунд после первой машины, и снова, когда третья машина прибудет в течение 10 секунд после второй машины, но позже, чем через 10 секунд после первой машины, но это то, что может быть получено из вашей (неопределенной) спец.

Другие вопросы по тегам