首页 文章

流口水决策表 - 如何进行第一场比赛?

提问于
浏览
2

drools决策表文档(link)声明可以在决策表中选择第一个匹配的行:

由于每一行都是规则,因此适用相同的原则 . 当规则引擎处理事实时,任何匹配的规则都可能触发 . (有些人对此感到困惑 . 当规则触发并模拟一个非常简单的决策表时,可以清除议程,其中只有第一个匹配影响一个动作 . )

这是怎么做到的?我已设置 Sequential=true ,但我不确定还需要做什么 .

2 回答

  • 0

    Drools提供了一种通过在决策表规则集中定义激活组来解决此问题(仅选择第一个匹配行)的方法 .

    只有在您希望将drools决策表用作查找表时,您的解决方法maxrules = 1才有效 . 在这种情况下,由于只能触发一个规则,因此使用drools没有优于使用经典数据库查找表的优势,只会增加复杂性 .

    如果您决定使用drools或一般的规则引擎,则应将“规则”或“决策”移动到规则定义中,以便从其优势中获益最多(RETE引擎,灵活性,应用程序代码中的规则分离等) . )

  • 2

    FireAllRulesCommand需要作为批处理执行的一部分添加,最大规则设置为1:

    StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
    
        Transaction tx = new Transaction();
        tx.setSenderBin("12345");
    
        List<Command<?>> commands = new ArrayList<Command<?>>();     
        commands.add(CommandFactory.newInsert( tx ));
        commands.add(new FireAllRulesCommand(1));
    
        ExecutionResults results = ksession.execute(
            CommandFactory.newBatchExecution(commands));
    
    • 编辑:请参阅接受的答案,了解这种做法的首选方式 .

相关问题