Не удалось правильно отфильтровать время в запросе ElasticSearch

Записи, которые сохраняются в ES, имеют поле с именем updated_at, в котором хранится время в эпохе. В моем поисковом запросе я фильтрую дату на основе формата «гггг-мм-дд» следующим образом:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "query": {
              "bool": {
                "filter": [
                  {
                    "range": {
                      "segment_status.updated_at": {
                        "from": "2022-05-16",
                        "to": "2022-05-16",
                        "include_lower": true,
                        "include_upper": true,
                        "boost": 1
                      }
                    }
                  }
                ],
                "adjust_pure_negative": true,
                "boost": 1
              }
            },
            "path": "segment_status",
            "ignore_unmapped": false,
            "score_mode": "avg",
            "boost": 1
          }
        }
        ]
    }
  }
        
}

Мой часовой пояс GMT+05:30. У меня есть запись, сохраненная с эпохой 1652733000, которая получается 17 мая около 2 часов ночи. Используя приведенный выше запрос ES, я попал в эту запись, и я предполагаю, что это потому, что время по Гринвичу — 16 мая.

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

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
0
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы правы, эти миллисекунды с эпохи оценивают понедельник, 16 мая 2022 г., 20:30:00 по времени UTC. Если вы хотите, чтобы пользователи могли выполнять поиск по дате в их собственном часовом поясе, вы должны перестать думать о своем часовом поясе. Если у вас есть доступ к дате как объекту LocalDate и часовому поясу пользователя, вы можете делать запросы к elasticsearch, используя миллисекунды с эпохи:

LocalDate date = ...
Instant startOfDay = date.atStartOfDay(userZoneId).toInstant();
Instant endOfDay = startOfDay.plusMillis(3600 * 24 * 1000 - 1);

Другие вопросы по теме