Я пытаюсь выполнить довольно простой запрос с помощью 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. Скоро мы будем обновлять.