Elasticsearch: агрегирование документов на основе диапазона дат

У меня есть набор документов в ElasticSearch 5.5 с двумя полями даты: start_date и end_date. Я хочу объединить их в сегменты гистограммы даты (например, еженедельно), так что если start_date

Рассмотрим следующий конкретный пример: у меня есть набор документов, описывающих сотрудников компании, и для каждого сотрудника у вас есть дата найма и (необязательно) дата увольнения. Я хочу построить гистограмму даты численности активных сотрудников за 12 месяцев.

Пример документа:

{
   "start_date": "2013-01-12T00:00:00.000Z",
   "end_date": "2016-12-08T00:00:00.000Z",
   "id": "123123123"
}

Есть ли способ сделать это в ES?

1 ответ

Я нашел один способ сделать это, используя фильтры агрегации ( https://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-bucket-filter-aggregation.html). Если мне нужен, скажем, отчет за 12 завершающих месяцев, то я бы создал 12 сегментов, где каждый блок определяет условия фильтра, такие как:

"bool":{
 "must":[{
  "range":{
   "start_date":{
    "lte":"2016-01-01T00:00:00.000Z"
   }
  }
 },{
 {
  "range":{
   "end_date":{
    "gt":"2016-02-01T00:00:00.000Z"
   }
  }
 }]
}

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

Я знаю, что этот вопрос довольно старый, но, поскольку он все еще открыт, я делюсь своими знаниями по этому поводу. Кроме того, в этом вопросе четко не объясняется, какой результат ожидается, но все же я думаю, что этого можно достичь с помощью "агрегирования гистограммы даты" и "агрегирования сценария ведра".

Вот ссылки на документацию для обоих этих агрегатов.

https://www.elastic.co/guide/en/elasticsearch/reference/5.5/search-aggregations-bucket-datehistogram-aggregation.html

https://www.elastic.co/guide/en/elasticsearch/reference/5.5/search-aggregations-pipeline-bucket-script-aggregation.html

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