DRL 文件中的 Drools 7 访问事实
Drools 7 access fact in DRL file
我正在使用 Drools 7 将字符串传递到 drools 规则中:
public static void main(String[] args) {
log("Starting");
KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
KieSession ksession = kc.newKieSession("RulesKS");
ksession.insert( "asdf" );
ksession.fireAllRules();
ksession.dispose();
log("Done");
}
请注意,我将 "fact" 的值为 asdf
设置为 运行 规则反对。这是我的规则文件:
package drools7
function boolean ifContains(String target, String searchFor) {
return target.indexOf(searchFor) != -1;
}
rule "First Rule"
salience 90
when
eval(ifContains("target", "et"))
then
System.out.println("Does contain");
end
现在,当我 运行 我的主要方法时,我看到:
Does contain
打印到标准输出,但我如何在 drools 规则文件中检查我插入的实际情况?
这是如何工作的?我想看看事实是否包含"et",而不是标量值?
我建议您先阅读 Drools official documentation and/or 一些 Drools 书籍。
对于您的特定情况,您需要做的是在规则的左侧编写一个与您的事实相匹配的模式:
rule "First Rule"
salience 90
when
String(ifContains(this, "et"))
then
System.out.println("Does contain");
end
您甚至可以优化您的规则以避免使用不必要的函数定义,并使用 contains
运算符进行调用:
rule "First Rule"
salience 90
when
String(this contains "et")
then
System.out.println("Does contain");
end
希望对您有所帮助,
我正在使用 Drools 7 将字符串传递到 drools 规则中:
public static void main(String[] args) {
log("Starting");
KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
KieSession ksession = kc.newKieSession("RulesKS");
ksession.insert( "asdf" );
ksession.fireAllRules();
ksession.dispose();
log("Done");
}
请注意,我将 "fact" 的值为 asdf
设置为 运行 规则反对。这是我的规则文件:
package drools7
function boolean ifContains(String target, String searchFor) {
return target.indexOf(searchFor) != -1;
}
rule "First Rule"
salience 90
when
eval(ifContains("target", "et"))
then
System.out.println("Does contain");
end
现在,当我 运行 我的主要方法时,我看到:
Does contain
打印到标准输出,但我如何在 drools 规则文件中检查我插入的实际情况?
这是如何工作的?我想看看事实是否包含"et",而不是标量值?
我建议您先阅读 Drools official documentation and/or 一些 Drools 书籍。
对于您的特定情况,您需要做的是在规则的左侧编写一个与您的事实相匹配的模式:
rule "First Rule"
salience 90
when
String(ifContains(this, "et"))
then
System.out.println("Does contain");
end
您甚至可以优化您的规则以避免使用不必要的函数定义,并使用 contains
运算符进行调用:
rule "First Rule"
salience 90
when
String(this contains "et")
then
System.out.println("Does contain");
end
希望对您有所帮助,