问题标签 [mvel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
608 浏览

java - MVEL 运算符重载

MVEL 使得向解析器上下文提供自定义函数变得非常容易,但目前尚不清楚是否有一种“官方”方式来重载如何评估运算符。我有两个特定的用例:

  • 对数组执行算术运算应将操作映射到数组的每个元素上,例如:

    [1, 2, 3] + 1 == [2, 3, 4]

  • 任何具有空操作数的操作都应计算为空(如#N/A在 Excel 中),例如:

    1 + null == null

如果对此没有“官方”解决方案,是否有一种明显的方法可以侵入 MVEL 来实现这一点?

0 投票
1 回答
2293 浏览

eclipse - 具有多个条件的 MVEL 表达式

我正在尝试使 MVEL 表达式起作用,但我遇到了问题。我很想确定定义为属性的日期是否介于其他两个日期之间。

所以在这种情况下,我的 ExistingStartDate = 3/6/14,current_period_start_date = 3/3/14 和 current_period_end_date = 3/16/14

我期待这是真的。我觉得我的语法一定有问题。任何帮助,将不胜感激!

0 投票
1 回答
3047 浏览

java - 为地图中的每个元素流口水 mvel

流口水的禁忌之一包括在结果(then 子句)中手动迭代集合。我需要编写一个流口水,它可以有效地迭代地图,同时为该地图中的每个键值对做一些事情。换句话说,我需要在 drools 中复制 for-each 循环的行为,而无需实际编写 for-each 循环。

现在,我意识到我可以在结果中编写一个 for-each 循环。我想让我的代码尽可能接近 drools 标准。我在下面提供了一个更具体的示例。

我有一张字符串和颜色的地图。

对于地图中的每种颜色,我想检查不同的集合以找到该颜色的确切代码。

Java 方言方法类似于以下内容:

使用流口水方言如何做类似的事情?

更新: 我越想这个问题,我越担心我不应该在口水的上下文中进行这种地图查找/迭代。正确的做法可能是将这些集合的事实对象表示插入到工作内存中。例如,我可以将每种颜色包装在一个 colorFact 中,其中包含了 Color 和一个指示颜色名称的字段。与代码相同。然后我可以写一个流口水:

如果这是解决问题的最佳方法,我担心我将不得不添加大量事实。我已经有几千了。这将创造数以万计的更多。我不担心记忆。相反,我担心遍历所有这些集合并将它们的元素添加到工作内存中所需的时间。任何人都可以评论这是否是最好的方法,或者是否存在更好的方法?

0 投票
0 回答
349 浏览

javascript - 在弹性搜索查询中使用脚本过滤器时,几次查询后出现 IllegalAccessError

我有一个“用户”弹性搜索索引,用户看起来像:

我想查找“小时”字段包含本地时间当前小时的所有用户。因此,例如,我只想在荷兰的 8.00-12.00 或 20.00-23.00 之间找到上述用户。

我的解决方案是使用脚本过滤器。我不知道如何用 MVEL 实现这个,所以我安装了javascript 插件。现在我的查询如下所示:

所以这行得通,但过了一段时间,elasticsearch 开始抛出异常,如下所示:

}

发布了一个类似的问题,有人建议这是 JIT 编译器的问题。作为一种解决方法,建议使用“-Dmvel2.disable.jit=true”禁用它。我已经尝试过了,将它放在 /etc/default/elasticsearch 的 ES_JAVA_OPTS 中,但它似乎没有任何效果。

有没有人知道出了什么问题以及如何解决它,或者有另一种执行此查询的方法?

0 投票
1 回答
3085 浏览

elasticsearch - elasticsearch聚合使用脚本来转换正在聚合的字段值

我目前有类似的东西:

但是 myfield 的值是“alpha 1.0”、“alpha 2.0”、“beta 1.0”。现在我只想聚合值“alpha”、“beta”。我怎么做?我试过:

但我想没有拆分功能。欢迎任何建议!

我在这里发现了一个类似的问题,但也没有答案。

0 投票
2 回答
1710 浏览

java - 如何解决 MVEL 中包含浮点值的表达式?

我的表情是这样的:($a+$b)/$c

MVEL.executeExpression()返回一个对象;我想myExpression返回一个浮点值而不是一个对象。如何解决这个问题?

0 投票
0 回答
215 浏览

java - MVEL2 NoClassDefFoundError

我是 mvel 新手,但我尝试在项目中使用它,但遇到了 NoClassDefFoundError:

我绝对不知道它为什么会发生,有人可以告诉我我错过了什么吗?有关信息,我在 karaf 容器中使用 mvel 2.1.9。

杰罗姆

0 投票
0 回答
500 浏览

lambda - 严格模式下的 MVEL Lambda 和闭包

我尝试在严格模式下使用 MVEL,但出现错误,我不明白为什么!

这是我的单一测试:

错误是:

漏洞?

0 投票
1 回答
451 浏览

java - 这个 drl 应该编译吗?

我正在开发一个为推广引擎系统运行 Drools 5.5 的项目。我在构建知识库时试图理解编译步骤时遇到了一些麻烦。

就是这种情况:我有一个 drl,它在条件大小 >= int 的列表上执行收集(LHS)。生成 drl 的系统做错了,现在我遇到了运行时异常。现在,我试图了解在这种情况下,流口水的编译是如何工作的。

问题是,在这个集合中,约束(size >= something ,其中 something 不是整数)没有被 drools 5.5 编译器验证,并且异常只会在运行时爆炸:

但是,在 drools 5.0.0 上验证了相同的代码,我可以在创建知识库之前删除此规则。

我不知道这是一个错误还是只是对流口水的 LHS 的误解。

无论如何,这是我正在处理的验证步骤

0 投票
2 回答
9861 浏览

java - Mvel评估

问题陈述:假设我有一个表达式(a + b + c),我想计算它的值并分配给某个变量。稍后我想在其他逻辑中使用该变量值。这一切都是通过 MVEL 完成的。问题是如果有人不在(a,b,c)is 中null,MVEL 会以字符串格式计算。

所以为了避免这种情况,我创建了自己的函数来传递每个对象,如果它为空,则将其设为零。

下面的示例代码

输出

我无法获得"d"此处的值,如果我删除工厂和空值检查功能,它会运行并且我能够获得"d". 但是我必须使它对算术运算安全,因为 MVEL 不能处理这个。

此外(null * 23),MVEL 返回为false.