java - Elasticsearch 无痛脚本错误

标签 java elasticsearch elasticsearch-painless

我没有 Java 经验,我对 elasticsearch painless 脚本语言有疑问。 (无痛这个名字选的不好)。

对于以下代码,我得到了错误:

{"lang": "painless",
"inline": "float price = doc['newPrice'] > 0.0 ? doc['price'] / doc['newPrice'] : 0; _score * params.constant * price",
"params": {"constant": 1.2}}}}

Cannot apply [>] operation to types [org.elasticsearch.index.fielddata.ScriptDocValues.Doubles] and [java.lang.Double].

我用 (float) doc['newPrice'] > 0 将其转换为 float,但出现了同样的错误。

然后我改为 "Double price = ((Double)doc['discountPrice'] > 0.0) ? doc['price']/doc['discountPrice'] : 0; _score * params.constant *价格",

并收到:

'Cannot cast from [Double] to [double].'

有人可以帮助我吗,尝试了很多具有类似错误的变体。 该死的无痛语言...

最佳答案

你只是missing the .value访问字段值。

你的脚本应该是这样的:

double price = doc['newPrice'].value > 0.0 ? doc['price'].value / doc['newPrice'].value : 0; _score * params.constant * price

关于java - Elasticsearch 无痛脚本错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41348247/

相关文章:

java - 在使用 TestNG 的测试用例失败的情况下重新运行整个类

java - 将变量添加到framework.jar后,它仍然无法访问

java - 360k文档后的ElasticSearch docker “HTTP/1.1 429 Too Many Requests”

elasticsearch - 在 elasticsearch/kibana 脚本字段中将 IP(字符串)转换为 long

elasticsearch - 有没有一种方法可以无痛地按字母顺序比较字符串

java - 如何使用大写字段名称将字符串序列化为对象?

java - 测试我的排序功能

elasticsearch - Elasticsearch 查询以返回与数组中所有元素匹配的文档

django - Django Haystack:Heroku Searchbox插件无法运行rebuild_index

sorting - Elasticsearch脚本:嵌套日期可以作为日期对象直接访问吗?