2017-09-18 2 views
0

Drools에서 다음 시나리오를 고려하십시오. AB의 개체가 서로 대조되는 규칙이 있습니다. Drools : 필드의 값을 기준으로 사실 일치의 우선 순위 지정

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

그러나 A 객체는 priority라는 필드가, 그리고 B이 작업 메모리, 우선 순위가 가장 높은 일치하는 A에 도착했을 때해야 깃발이, 다른 모든 일치 A의 위. Drools에서 어떻게 가능합니까? 성능에 어떤 영향을 줍니까? 이 예에서 알 수

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 객체가 하나를 삽입 한 경우이다 :

답변

1

B.flag()이 true로 flagged 속성을 설정하는 것입니다 것은, 당신이 이런 식으로 뭔가를 시도 할 수 있다고 가정 이미 낮은 A로 표시된 플래그 B는 다시 태깅되지 않습니다. 당신이 당신에게 조식을 reflag해야하는 경우

는, 당신은 이런 식으로 뭔가를 시도 할 수 있습니다 :

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 

, 그것은 도움이 귀하의 답변에 대한

+0

감사합니다 희망! 'when' 세그먼트가 가장 높은 우선 순위를 갖는'A'를 선택하고'B'와 일치하는지 확인합니까? 또는 주어진'B '에 대해 가장 일치하는'A'를 선택합니까? – fzwd

+0

첫 번째 조건은 'A'를 확인하고 두 번째 조건은 가장 높은 우선 순위로 'A'를 필터링합니다 (우선 순위가 가장 높은 항목을 제외하고 실제로 모두 필터링 함). –