Эластичный поиск date_histogram extended_bounds

Я хочу получить date_histogram в течение определенного периода, как ограничить период даты? Должен ли я использовать параметр extended_bounds? Например: я хочу запросить гистограмму date_ между 2016-08-01 и 2016-08-31, и интервал - день. Я запрашиваю с этим выражением:

{
  "aggs": {
    "cf_loan": {
      "date_histogram": {
        "field": "createDate",
        "interval": "day",
        "format": "yyyy-MM-dd",
        "min_doc_count": 0,
        "extended_bounds": {
          "min": "2016-08-01",
          "max": "2016-08-31"
        }
      }
    }
  }
}

Но я получаю гистограмму date_his в диапазоне.

1 ответ

Вы почти там, вам нужно добавить range запрос, чтобы выбрать только те документы, чьи createDate поле находится в желаемом диапазоне.

{
  "query": {
    "range": {                           <---- add this range query
      "createDate": {
        "gte": "2016-08-01T00:00:00.000Z",
        "lt": "2016-09-01T00:00:00.000Z"
      }
    }
  },
  "aggs": {
    "cf_loan": {
      "date_histogram": {
        "field": "createDate",
        "interval": "day",
        "format": "yyyy-MM-dd",
        "min_doc_count": 0,
        "extended_bounds": {
          "min": "2016-08-01",
          "max": "2016-08-31"
        }
      }
    }
  }
}

Роль extended_bounds параметр, чтобы убедиться, что вы будете получать ежедневные ведра от min в max даже если в них нет документов. Например, скажем, у вас есть 1 документ каждый день между 2016-08-04 и 2016-08-28, а затем без extended_bounds параметр, вы получите 25 сегментов (2016-08-04, 2016-08-05, 2016-08-06, ..., 2016-08-28).

С extended_bounds Параметр, вы также получите следующие сегменты, но с 0 документов:

  • 2016-08-01
  • 2016-08-02
  • 2016-08-03
  • 2016-08-29
  • 2016-08-30
  • 2016-08-31
Другие вопросы по тегам