Подсчитайте количество фактов в скользящем окне с помощью 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 секунд после первой машины, но это то, что может быть получено из вашей (неопределенной) спец.