我有一个问题,我可以使用规则引擎解决,我们的团队已经使用Drools编写了应用程序(但我是新手,所以为新手问题做好准备)。
我的一个问题是,其中一个事实是计算起来非常昂贵(REST调用远程服务器)。我想这意味着Drools'eval'功能可用于懒惰评估。
但是,我真的想把这个特定的事实强加到评估顺序的后面。我真的不希望Drools算法决定'这个函数的答案是一种非常有效的分区规则集的方法' - 也许是,如果成本是无关紧要的,但这个比其他人贵得多。
Drools是否有一些工具/黑客来解决这个问题,或者它是否是解决此问题的错误工具?
答案 0 :(得分:0)
如果您可以预加载REST事实,请执行此操作,以便Drools可以优化索引(散列)并加入它们。
如果没有,您的情况类似于使用from
直接使用hibernate进行drools。
你可以做的一些事情:
请查看手册中的salience
,以便最后执行这些规则。
另外,将eval()
最后放在规则LHS中。
答案 1 :(得分:0)
eval()不执行延迟评估;它只是简单地计算一个不能用DRL模式语法表达的布尔表达式。它需要在5.2中不太常见,因为它支持更丰富的自由形式表达式。
关于你关于昂贵事实的具体问题;在知识库中使用之前预先加载可能是您的最佳选择(正如Geoffey所说)。我假设一旦加载它们的计算是昂贵的,它们是非常静态的。
Rumor拥有它,在5.2之后,有异步“from”的计划,因此模式可以对异步加载的事实作出反应。它在阿根廷的长途飞行中被提及,目前最好被认为是 etherware ,但是在drools用户邮件列表上推送它可能会更具体。