我正在尝试在有多个条件的地方编写滑动窗口规则。我尝试编写的规则是:
rule "1"
when
$test : Test (num1 > 100 && num2 > 101) && $number:Number() from accumulate(Test($t : num1) over window:time(20s), sum($t))
then
System.out.println("Output is "+$test.getNum1()+" and sum is "+$number+"");
end
在上述规则中,引擎将累加num1和num2的值,即使它们不满足条件。 &&
关键字按位运行,即同时评估LHS和RHS。
有人可以向我解释这种行为吗?
答案 0 :(得分:1)
在您的情况下,您有2个完全独立的模式:彼此之间没有引用on模式。然后,Drools将独立评估这些模式。
您可以做的就是以一种模式编写所有内容:
$number:Number() from accumulate(Test($t : num1 > 100, num2 > 101) over window:time(20s), sum($t))
或在模式之间建立“连接”:
$test : Test (num1 > 100 && num2 > 101) && $number:Number() from accumulate(Test(this == $test, $t : num1) over window:time(20s), sum($t))
希望有帮助,