Drools:根据字段的值优先考虑事实匹配

时间:2017-09-18 13:05:26

标签: drools drools-fusion

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

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

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

1 个答案:

答案 0 :(得分:1)

假设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都不会被重新标记。

如果你需要重新翻译你的Bs,那么你可以尝试这样的事情:

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

希望它有所帮助,