2017-09-18 8 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 sを超えます。 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 

この例で注意すべきことの一つは、高い優先度を持つオブジェクトが挿入されている場合ということで、どの:B.flag()がtrueにそのflagged属性を設定している、あなたはこのような何かを試すことができますと仮定すると

答えて

1

すでに低いAでフラグが立てられていたBは、再タグ付けされません。

あなたはあなたにBsを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'をチェックし、2番目は' A'を最も高い優先度でフィルタリングします(優先度が最も高いものを除いてすべてをフィルタリングしています)。 –

関連する問題