elasticsearch 无法将MethodHandle(日期)JodaCompatibleZonedDateTime转换为(对象)双精度型

s1ag04yj  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(451)

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

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"
       }
     }
ehxuflar

ehxuflar1#

您获取的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()}

相关问题