Elasticsearch диапазон дат выпуска - PullRequest
2 голосов
/ 01 июля 2019

Я изучаю Elasticsearch и имею проблему с запросами диапазона дат.Мои запросы сравнивают только дни, а не целые даты.Вот краткий пример:

DELETE test

PUT /test
{
  "mappings": {
      "properties": {
        "date" : {
          "type": "date",
          "format": "dd MM YYYY"
        }
      }

  }
}

POST /_bulk
{"index" : {"_index": "test"}}
{"date": "01 01 2001"}

POST /test/_search
{
  "query": {
    "range": {
      "date": {
        "lt": "01 01 2016",
        "gt": "01 01 2000"
      }
    }
  }
}

POST /test/_search
{
  "query": {
    "range": {
      "date": {
        "lte": "01 01 2000",
        "gte": "01 01 2016"
      }
    }
  }
}

Насколько я понимаю, первый поисковый запрос должен вернуть документ - дата 2001 года <2016 и> 2000. Второй запрос ничего не должен возвращать, потому что 2001 не <= 2000 и> = 2016.Но это работает совершенно наоборот.

Не могли бы вы указать мне, что я скучаю?

1 Ответ

2 голосов
/ 01 июля 2019

Причиной сбоя является то, что ES неправильно форматирует вашу дату. Поведение форматирования даты изменилось между 6.x и 7.0 и joda на основе форматеров даты заменены на java . Если вы измените свой формат на "format": "dd MM yyyy" (обратите внимание на нижний регистр yyyy), вы найдете результаты поиска.

Причина, по которой формат не работает, заключается в том, что YYYY означает дата недели года . Вы почти всегда хотите использовать формат yyyy в нижнем регистре для обозначения года в формате даты.

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