Elasticsearch 自定义评分函数测试空日期值
Elasticsearch custom scoring function test null date values
我在任何地方都找不到有关如何在 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"}}}]
这似乎是说我正在尝试将双精度值转换为布尔值并加注,但我需要测试非空值。
我应该如何编写评分脚本?
编辑:我知道在 painless 中我不能使用三元 ? :
运算符,所以我必须明确地写 doc['xx'].value != null
。但是,对于使用空值索引的日期,这似乎会产生奇怪的结果。似乎在 painless 中该值不为空(尽管当我 GET /_search
时它确实在 json 中 null
)并且以下不起作用
"script":"(doc['unavailable_until'].value != null) ? 1 : 0"
并且似乎总是 return 0(好像空日期实际上不是空的)。我看到有些人报告了一些奇怪的默认日期,在这种情况下,我如何将此日期与 Date.now 之类的日期进行比较?
我想知道为什么我之前找不到this page...
基本上,只需调用 .empty
即可检查空值。也适用于日期
"script":"doc['unavailable_until'].empty ? 1 : 0",
我在任何地方都找不到有关如何在 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"}}}]
这似乎是说我正在尝试将双精度值转换为布尔值并加注,但我需要测试非空值。
我应该如何编写评分脚本?
编辑:我知道在 painless 中我不能使用三元 ? :
运算符,所以我必须明确地写 doc['xx'].value != null
。但是,对于使用空值索引的日期,这似乎会产生奇怪的结果。似乎在 painless 中该值不为空(尽管当我 GET /_search
时它确实在 json 中 null
)并且以下不起作用
"script":"(doc['unavailable_until'].value != null) ? 1 : 0"
并且似乎总是 return 0(好像空日期实际上不是空的)。我看到有些人报告了一些奇怪的默认日期,在这种情况下,我如何将此日期与 Date.now 之类的日期进行比较?
我想知道为什么我之前找不到this page...
基本上,只需调用 .empty
即可检查空值。也适用于日期
"script":"doc['unavailable_until'].empty ? 1 : 0",