Гистограмма в фиксированном диапазоне дат (т.е. фиксированное количество сегментов), даже если данные отсутствуют - PullRequest
0 голосов
/ 01 марта 2019

Моя цель состоит в том, чтобы построить гистограмму между начальной и конечной датами, пустые даты должны появиться в гистограмме и иметь ноль в качестве значения счетчика.

Я пытаюсь следующий запрос, чтобы получить последние7 дней:

POST my_index/_search
{
  "size": 0,
  "query": {
    "range": {
      "date": {
        "gte": "now-7d/d",
        "lte": "now/d"
        }
      }
  },
  "aggs" : {
      "count_per_day" : {
          "date_histogram" : {
              "field" : "date",
              "interval" : "day",
              "order": {"_key": "desc"},
              "min_doc_count": 0
          }
      }
  }
}

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

Но если есть разрыв (то есть, есть данные 6 дней назад, но нет данных на 5-м и4-й день), пустые дни будут отображаться с нулями в качестве числа.

Как я могу заставить вернуть отсутствующие даты, даже если данных нет?Другими словами, как исправить количество сегментов (до 7 в примере выше), даже если нет данных?

1 Ответ

0 голосов
/ 01 марта 2019

Вы уже добавили "min_doc_count": 0, чтобы включить пустые сегменты.Все, что вам нужно сделать, это просто добавить extended_bounds параметр, чтобы форсировать начальные и конечные сегменты.Подробнее об этом можно узнать здесь .

Обновите ваш запрос следующим образом:

{
  "size": 0,
  "query": {
    "range": {
      "date": {
        "gte": "now-7d/d",
        "lte": "now/d"
      }
    }
  },
  "aggs": {
    "count_per_day": {
      "date_histogram": {
        "field": "date",
        "interval": "day",
        "order": {
          "_key": "desc"
        },
        "min_doc_count": 0,
        "extended_bounds": {
          "min": "now-7d/d",
          "max": "now/d"
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...