Drools:根据字段的值确定事实匹配的优先级
Drools: Prioritize fact matching based on a field's value
在 Drools 中考虑以下场景:
我们有一个规则,将 A
和 B
类型的对象相互匹配。
rule 1
when
$a : A()
$b : B($a.matches($b), flagged == false)
then
mofidy($b) { flag($a) }
end
然而,A
对象有一个名为 priority
的字段,当 B
到达工作内存时,具有最高优先级的匹配 A
应该标记它,高于所有其他匹配 A
s。
这在 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
希望对您有所帮助,
在 Drools 中考虑以下场景:
我们有一个规则,将 A
和 B
类型的对象相互匹配。
rule 1
when
$a : A()
$b : B($a.matches($b), flagged == false)
then
mofidy($b) { flag($a) }
end
然而,A
对象有一个名为 priority
的字段,当 B
到达工作内存时,具有最高优先级的匹配 A
应该标记它,高于所有其他匹配 A
s。
这在 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
希望对您有所帮助,