我们正在使用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

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

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

java - 无法分析大型规则的表达错误-LMLPHP

最佳答案

确保一个storeitemname不能是其他storeitemname的一部分

rule "StoreRule"

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

07-24 19:59