【问题标题】:cannot convert MethodHandle(Dates)JodaCompatibleZonedDateTime to (Object)double无法将 MethodHandle(Dates)JodaCompatibleZonedDateTime 转换为 (Object)double
【发布时间】:2022-10-22 01:41:01
【问题描述】:

如果字段存在,我正在尝试添加条件,然后根据它进行排序,否则使用另一个字段。因为其中之一将存在。 这是我的查询:

GET /my_index/_search
{
  "query": {
    "match_all": {}
  },
  "sort": {
    "_script": {
      "type":"number",
      "script": "if(doc['contextDates.event.date'].value != 0){ return doc['contextDates.event.date'].value} else { return doc['contextDates.start.date'].value}",
    "order": "asc"
    }
  }
}

当我执行此查询时,我收到以下错误:

"failed_shards" : [
      {
        "shard" : 0,
        "index" : "my_inedx",
        "node" : "UxKwS8SIR-uIbzo5_0IbcQ",
        "reason" : {
          "type" : "script_exception",
          "reason" : "runtime error",
          "script_stack" : [
            "return doc['contextDates.event.date'].value} else { ",
            "                                     ^---- HERE"
          ],
          "script" : "if(doc['contextDates.event.date'].value != 0){ return doc['contextDates.event.date'].value} else { return doc['contextDates.start.date'].value}",
          "lang" : "painless",
          "position" : {
            "offset" : 84,
            "start" : 47,
            "end" : 99
          },
          "caused_by" : {
            "type" : "wrong_method_type_exception",
            "reason" : "cannot convert MethodHandle(Dates)JodaCompatibleZonedDateTime to (Object)double"
          }
        }
      }
    ]

我也尝试过Double.parseDouble 方法,但它不起作用。这是我为contextDates 提供的内部文件

"contextDates" : {
        "event" : {
         "date" : "2020-06-26T00:00:00.000Z",
         "resolution" : "day",
         "score" : 0,
         "type" : "event"
       }
     }

【问题讨论】:

    标签: elasticsearch elasticsearch-scripting


    【解决方案1】:

    您获得的 doc 值是 JodaCompatibleZonedDateTime 类型,您尝试将其与 double 值进行比较,因此您需要像这样修改脚本

    if(doc['contextDates.event.date'].value.getMillis() != 0){ return doc['contextDates.event.date'].value.getMillis()} else { return doc['contextDates.start.date'].value.getMillis()}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 2018-11-24
      相关资源
      最近更新 更多