Математика эластичных относительных данных - все находим сегодня

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

У меня есть эластичный индекс, в котором каждый документ имеет такую ​​дату:


{
  // edited for brevity
  "releasedate": "2020-10-03T15:55:03+00:00",
}

и я использую django DRF для выполнения подобных запросов, где я передаю это значение &releasedate__gt=now-3d/d

В результате получается такой запрос с эластичным диапазоном.

{
  
  "from": 0,
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "releasedate": {
              "gt": "now/d-3d"
            }
          }
        }
        ]
    }
  },
  "size": 10,
  "sort": [
    "_score"
  ]
}

Если я хочу увидеть все документы со вчерашнего дня, я думаю об этом с точки зрения всех документов с releasedate больше, чем вчера, я решил, что ключевая часть запроса должна быть такой:

{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "releasedate": {
              "gt": "now/d-1d"
            }
          }
        }
        ]
    }
  }
}

Так что я ожидаю, что это будет примерно сейчас, до 00:00 сегодня, а затем вернется на один день назад.

Итак, если бы я запустил это 04.10.2020. Я предполагаю, что это попадет в документ с датой выпуска 2020-10-03T15:55:03+00:00.

Вот мои рассуждения

Округление с now/d приведет нас к 2020-10-04T00:00.

А потом возвращение в один прекрасный день с -1d приведет нас к 2020-10-03T00:00.

Это должен включать документ, но я его не вижу. Чтобы найти документы, мне нужно посмотреть назад более чем на один день, поэтому мне нужно использовать now/d-2d, чтобы найти подходящие документы.

Есть идеи, почему это может быть? Я не уверен, как узнать, что now/d-1d оценивает с точки зрения объекта, учитывающего часовой пояс, чтобы проверить - это то, чего я мог бы достичь, но я не знаю как с Elastic.

FWIW, здесь используется Elastic 5.6. Скоро мы будем обновлять.


person Chris Adams    schedule 05.10.2020    source источник


Ответы (1)


Я бы сказал, что как только вы обойдете вниз до ближайшего дняnow-2d/d или now/d-2d - как и вы), интервалы gt запроса действительно будут основаны на днях.

Другими словами, gt : 2020-10-03T00:00 - это >= 2020-10-0 4 T00:00. Поэтому вместо gt вам понадобится gte, и он будет работать как >=2020-10-03T00:00.

person Joe Sorocin    schedule 05.10.2020