首页 > 解决方案 > 无法分析大型规则的表达式错误

问题描述

我们正在使用 Drools v6.3.4 - 但测试过同样的问题也在 v7.3.0 中发生。当我们编写规则长度为 27000 个字符或更多的规则时,我们会收到“无法分析表达式”错误

rule "StoreRule"

    when
        (s: Store.StoreItems(storeitemname in ("STORE0000001","STORE0000002"....really long list)))
    then
        System.out.println("Discount!");
end

我们有一个解决方法,就是像这样拆分规则 -

rule "StoreRule"

    when
        (s: Store.StoreItems(storeitemname in (<List 1>))) ||
        (s: Store.StoreItems(storeitemname in (<List 2>))) ||....and so on
    then
        System.out.println("Discount!");
end

我们得到一个长列表的错误的根本原因是什么?除了上面指定的解决方法之外,还有更好的方法来处理此类规则吗?

当我们有大规则时,我们会收到以下错误。

在此处输入图像描述

标签: javadroolsdrools-kie-server

解决方案


确保一个 storeitemname 不能是另一个 storeitemname 的一部分

rule "StoreRule"

    when
        (s: Store.StoreItems("STORE0000001|STORE0000002|really long list" contains storeitemname))
    then
        System.out.println("Discount!");
end

推荐阅读