Слюни: расставьте приоритеты сопоставления фактов на основе значения поля
Рассмотрим следующий сценарий в 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? Как это влияет на производительность?
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 с высоким приоритетом, любой B, уже помеченный более низким значением A, не будет повторно помечен.
Если вам нужно пометить ваш 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
Надеюсь, поможет,