Elasticsearch自定义评分函数测试空日期值

时间:2018-03-23 14:39:24

标签: elasticsearch elasticsearch-5 elasticsearch-painless

我无法找到如何在ES自定义评分函数中测试空值的任何示例。 根据文档,脚本是groovy,根据日志,脚本是无痛的评估,但即便如此,我仍然被一些错误困惑

"script":"doc['response_rate'].value ? (doc['response_rate'].value + 1) : 0",
"lang":"painless",
"caused_by":{
  "type":"wrong_method_type_exception",
  "reason":"cannot convert MethodHandle(Doubles)double to (Object)boolean"}}}]

这似乎说我试图将一个double加到boolean并引发,但我需要测试非空值。

我应该如何撰写评分脚本?

编辑:我已经明白,在无痛我不能使用三元? :运算符,所以我必须明确地写doc['xx'].value != null。但是,这似乎会为使用空值索引的日期产生奇怪的结果。似乎在无痛的情况下,该值不为null(尽管在我null时它在json中确实是GET /_search并且以下不起作用

"script":"(doc['unavailable_until'].value != null) ? 1 : 0"

并且似乎总是返回0(就好像空日期实际上不是null)。我看到有些人报告某些奇怪的默认日期,在这种情况下如何将这个日期与Date.now进行比较?

1 个答案:

答案 0 :(得分:0)

我想知道为什么我之前找不到this page ...

基本上,可以调用.empty来检查空值。也适用于日期

"script":"doc['unavailable_until'].empty ? 1 : 0",