22

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

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

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

无法将 [>] 操作应用于类型 [org.elasticsearch.index.fielddata.ScriptDocValues.Double] 和 [java.lang.Double]。

我用 (float) doc['newPrice'] > 0 将其转换为浮点数,但错误相同。

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

并收到:

“不能从 [Double] 转换为 [double]。”

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

4

2 回答 2

45

您只是缺少.value访问字段值的方法。

你的脚本需要是这样的:

double price = doc['newPrice'].value > 0.0 ? doc['price'].value / doc['newPrice'].value : 0; _score * params.constant * price
于 2016-12-27T16:04:40.573 回答
4
doc['newPrice']

不同于

doc['newPrice'].value

你应该使用后者

于 2018-01-04T05:03:31.857 回答