не может преобразовать MethodHandle(Dates)JodaCompatibleZonedDateTime в (Object)double

Я пытаюсь добавить условия, если поле существует, а затем отсортировать по нему, иначе используйте другое поле. Так как один из них будет существовать. Вот мой запрос:

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

1 ответ

Значение документа, которое вы получаете, имеет типJodaCompatibleZonedDateTimeкоторый вы пытаетесь сравнить с двойным значением, поэтому вам нужно изменить свой скрипт следующим образом

      if(doc['contextDates.event.date'].value.getMillis() != 0){ return doc['contextDates.event.date'].value.getMillis()} else { return doc['contextDates.start.date'].value.getMillis()}
Другие вопросы по тегам