java - 无法分析大型规则的表达式错误
问题描述
我们正在使用 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
我们得到一个长列表的错误的根本原因是什么?除了上面指定的解决方法之外,还有更好的方法来处理此类规则吗?
当我们有大规则时,我们会收到以下错误。
解决方案
确保一个 storeitemname 不能是另一个 storeitemname 的一部分
rule "StoreRule"
when
(s: Store.StoreItems("STORE0000001|STORE0000002|really long list" contains storeitemname))
then
System.out.println("Discount!");
end
推荐阅读
- macos - 替换字符applescript时出错
- quantum-computing - Hadamarding 的目的是什么,然后在传送期间测量消息?
- r - R:条形图宽度不一致
- python - Numba 索引错误:TypeError: Can't index at [0] in i8*
- html - 什么是html 以及它如何有用?
- sql - 我在 SQL 表中有一种格式的数据,现在我想将其插入到另一个表中,但格式不同
- android-studio - 我对 android studio 中的评论字体有疑问
- office-js - 如何从 Outlook JS 加载项创建和发送会议电子邮件和邀请?
- python - 这是访问与 Python 脚本相邻/打包的数据的认可方式吗?
- apache - Apache Lucene 版本