Drools:根据字段的值确定事实匹配的优先级

Drools: Prioritize fact matching based on a field's value

在 Drools 中考虑以下场景: 我们有一个规则,将 AB 类型的对象相互匹配。

rule 1
    when
        $a : A()
        $b : B($a.matches($b), flagged == false)
    then
        mofidy($b) { flag($a) }
end

然而,A 对象有一个名为 priority 的字段,当 B 到达工作内存时,具有最高优先级的匹配 A 应该标记它,高于所有其他匹配 As。 这在 Drools 中怎么可能?它如何影响性能?

假设 B.flag() 将其 flagged 属性设置为 true,您可以尝试这样的操作:

rule 1
when
    $a : A()
    not A(this != $a, priority > $a.priority)
    $b : B($a.matches($b), flagged == false)
then
    mofidy($b) { flag($a) }
end

在此示例中需要注意的一件事是,如果插入具有高优先级的 A 对象,则不会重新标记任何已经标记为较低 A 的 B。

如果你需要重新标记你的 B,那么你可以尝试这样的事情:

rule 1
when
    $a : A()
    not A(this != $a, priority > $a.priority)
    $b : B($a.matches($b), flag != $a)
then
    mofidy($b) { flag($a) }
end

希望对您有所帮助,