Как ранжировать запрос по дате, сопоставленной как долго - PullRequest
0 голосов
/ 23 января 2020

У меня есть внешняя база данных ES (т.е. я не могу изменить ее структуру) со следующим отображением

      "failure_url": {
        "properties": {
          "lastAccessTime": {
            "type": "long"
          },
          "url": {
            "type": "keyword"
          }
        }
     }

lastAccessTime представляет дату, но отображается как длинная. Стандартный фильтр «диапазона» завершается с ошибкой

      "caused_by": {
        "type": "number_format_exception",
        "reason": "For input string: "now""
      }

- это ошибка в выражении моего фильтра или из-за того, что поле не является «датой»? Если последнее, как я все еще могу запросить эту дату?

1 Ответ

0 голосов
/ 23 января 2020

Если вы хотите запросить в своем поле now и другие выражения совпадения даты , тогда ваше поле должно быть определено как тип date.

Одна вещь, которую вы можете сделать это создать другое поле типа date, а затем обновить индекс для индексации этого нового поля.

Итак, сначала измените ваше отображение следующим образом:

PUT my-index/_mappings
{
  "properties": {
    "lastAccessDate": {
      "type": "date"
    }
  }
}

А затем вы можете использовать обновление по запросу API для индексации дат из длинного поля:

POST my-index/_update_by_query
{
  "script": {
    "source": "ctx._source.lastAccessDate = ctx._source.lastAccessTime"
  }
}

Когда это будет сделано, вы сможете запустить запрос range для нового lastAccessDate поле типа date.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...