【问题标题】:Elasticsearch custom scoring function test null date valuesElasticsearch 自定义评分函数测试空日期值
【发布时间】:2018-09-02 06:44:08
【问题描述】:

我在任何地方都找不到如何在 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"}}}]

这似乎是说我正在尝试将双精度值转换为布尔值并引发,但我需要测试非空值。

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

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

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

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

【问题讨论】:

  • Null 在 Elasticsearch 中表示为 NA,但您可以在映射中指定自己的
  • @sramalingam24 与无痛日期的行为相同吗?我似乎有问题,尤其是现在的日期......

标签: elasticsearch elasticsearch-5 elasticsearch-painless


【解决方案1】:

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

基本上,只需调用.empty 即可检查空值。也适用于日期

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2014-10-24
    相关资源
    最近更新 更多