Фильтр диапазона дат Elasticsearch не дает правильных результатов с gte, lte

Было замечено, что lte и gte принимают значения нижней границы. как мне сделать так, чтобы верхняя граница для lte и нижняя граница для gte ??

Так выглядит мой запрос

{
  "from": 0,
  "size": 40,
  "query": {
    "filtered": {
      "filter": {
    "bool": {
      "should": [
        {
          "range": {
            "CreatedOn": {
              "lte": "201505",
              "gte": "201404",
              "format": "yyyyMM"
            }
          }
        }
      ]
    }
      }
    }
  }
}

Приведенный выше запрос не возвращает мне действительные документы, такие как «2015-05-06T12: 55: 34.44», «2015-05-26T14: 42: 24.963» и т. Д. Он возвращает только «2015-05-01T11: 42: 24.963». с LTE 201505


person Viola Pinto    schedule 25.06.2015    source источник


Ответы (1)


  • 201404 означает 1 апреля 2014 г.
  • 201505 означает 1 мая 2015 г.

Это причина, по которой вы получаете такой результат. Elasticsearch в фоновом режиме «переводит» ваш запрос в диапазон, например 1396310400000 TO 1430524799999, что означает 01 Apr 2014 00:00:00 GMT TO 01 May 2015 23:59:59 GMT.

Если вам нужно все в период с апреля 2014 года по май 2015 года, используйте это:

          "range": {
            "createdOn": {
              "lte": "201506||-1d/d",
              "gte": "201404",
              "format": "yyyyMM"
            }
          }
person Andrei Stefan    schedule 25.06.2015