2

drools 决策表文档(链接)指出,可以选择决策表中的第一个匹配行:

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

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

4

2 回答 2

2

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

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

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

于 2013-01-12T10:03:26.560 回答
0

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));

- 编辑:请参阅接受的答案以了解首选方式。

于 2013-01-10T16:51:59.177 回答