当前位置: 首页 > 知识库问答 >
问题:

Drools核心DRL-只触发一个显著性最高的规则,跳过其他规则

赵钊
2023-03-14

我有一个简单的JAVA bean,有两个int字段:'a'和'b'。

rule "First rule"
salience 10
when
    $bean : Bean ( a == 1)
then
    $bean.setB(10);
end

rule "Second rule"
salience 20
when
    $bean : Bean ( a == 1)
then
    $bean.setB(20);
end

更新

非常感谢你的回答。

也许我应该详细描述一下我的问题。我有一套1500条规则。每条规则:

    null
for (Object fact : facts) {
    FactHandle fh = session.insert(fact);
    session.fireAllRules(1);
    session.delete(fh);
}

Java代码:

for (Object fact : facts) {
    session.execute(fact);
}

解决方案2的DRL文件:我向每个规则添加了相同的激活组:

rule "Rule"
activation-group "group"
salience X
when
    ...
then
    ...

共有1个答案

应嘉容
2023-03-14

可以使用drools.halt();在你的最高显著性规则中。

这样做就是终止流并结束规则执行(正是您所需要的)。

 类似资料:
  • 假设我有一个议程组“daily”,它有两组drools规则集A有规则“default-1”,“default-2”,“default-3”,集B有规则“custom-1”,“custom-2”,“custom-3” 当议程组“daily”变得集中,并且当前事实与自定义模式匹配时,我只希望“custom-1”和/或“custom-2”和/或“custom-3”触发;否则,只有“Default-1”和

  • 我使用显著性来确定每个规则的优先级,但当我使用所有规则时,它并不总是选择显著性更高的规则。如何使规则引擎始终选择显著性较高的规则? 输出 触发规则的Actionlistener 口水主 规则结构

  • 我在同一个drl文件中有两个Drools规则,如下所示: 我的想法是用第一条规则处理所有处于临界状态的事件。然后使用第二个规则,如果任何阀门有警报,这是由“如果临界”规则设置的,发送一个短信。 你知道吗?用口水可能吗?

  • 我对drools和KIE服务器是新手。我遇到了一个问题,即如何通过触发规则RHS(then action)在工作记忆中插入新的事实,然后通过这些动态插入的事实激活其他规则。 我所期望的是,当BaseFeature从外部插入工作内存并激活RuleOne时,在RuleOne内部“然后”它将插入新的事实RuleResult,并希望激活RuleTwo,但它没有激活RuleTwo,只是RuleOne被激活了

  • 我必须在java方面这样做吗? 编辑:同时,非常欢迎针对Drools的教程/指南建议。

  • 我是个流口水的新手。我创建了以下对象: 和a*。包含规则的drl文件: 在Postman中,我试图用以下主体调用规则: 我得到了以下答案: 问题是,我的值为空,而不是我期望作为响应的对象。server.log是空的,我看不出有什么问题。请你帮我。 非常感谢你。