2.X/4. Aggregations

4-04-1. Returning Empty Buckets

drscg 2017. 9. 24. 11:19

Notice something odd about that last response?

이전의 response가 뭔가 이상하지 않은가?

Yep, that is right. We are missing a few months! By default, the date_histogram (and histogram too) returns only buckets that have a nonzero document count.

그렇다. 빠져 있는 달이 있다. 기본적으로, date_histogram(histogram 도 마찬가지)은 document 수가 0 이 아닌 bucket만을 반환한다.

This means your histogram will be a minimal response. Often, this is not the behavior you want. For many applications, you would like to dump the response directly into a graphing library without doing any post-processing.

즉, histogram은 최소한으로 response한다. 가끔은 우리가 실제로 원하는 바가 아닐 수 있다. 많은 응용프로그램에서, response를, 어떤 후처리 없이, 그래프 라이브러리에 바로 전달하고 싶을 것이다.

Essentially, we want buckets even if they have a count of zero. We can set two additional parameters that will provide this behavior:

기본적으로, 수가 0 인 bucket도 필요하다. 이를 위한 2 개의 부가적인 매개변수가 있다.

GET /cars/transactions/_search
{
   "size" : 0,
   "aggs": {
      "sales": {
         "date_histogram": {
            "field": "sold",
            "interval": "month",
            "format": "yyyy-MM-dd",
            "min_doc_count" : 0, 
            "extended_bounds" : { 
                "min" : "2014-01-01",
                "max" : "2014-12-31"
            }
         }
      }
   }
}

이 매개변수는 비어 있는 bucket을 반환하게 한다.

이 매개변수는 년도 전체를 반환하게 한다.

The two additional parameters will force the response to return all months in the year, regardless of their doc count. The min_doc_count is very understandable: it forces buckets to be returned even if they are empty.

부가적인 2 개의 매개변수는 document 수에 관계없이, 해당 년도의 모든 달을 반환하게 한다.min_doc_count 는 비어 있는 bucket도 반환하게 한다.

The extended_bounds parameter requires a little explanation. The min_doc_count parameter forces empty buckets to be returned, but by default Elasticsearch will return only buckets that are between the minimum and maximum value in your data.

extended_bounds 매개변수는 약간의 설명이 필요하다. min_doc_count 매개변수는 비어 있는 bucket을 반환하도록 하는데, 기본적으로 Elasticsearch는 데이터의 최소와 최대값 사이에 있는 데이터만을 반환한다.

So if your data falls between April and July, you will have buckets representing only those months (empty or otherwise). To get the full year, we need to tell Elasticsearch that we want buckets even if they fall before the minimum value or after the maximum value.

따라서, 데이터가 4 월과 7 월 사이에 있다면, 비어 있든 아니든, 해당 달을 나타내는 bucket만을 가지게 될 것이다. 전체 년도의 데이터를 얻기 위해, Elasticsearch에게 최소 값 이전(以前) 또는 최대 값 이후(以後) 에 해당하는 bucket도 달라고 해야 한다.

The extended_bounds parameter does just that. Once you add those two settings, you will get a response that is easy to plug straight into your graphing libraries and give you a graph like Figure 37, “시간대별 자동차 판매량”.

extended_bounds 매개변수는 바로 이런 동작을 한다. 이들 2 개의 설정을 추가하면, response를 얻고, 그래프 라이브러리에 바로 전달할 수 있게 된다. 그리고 그래프는 Figure 37, “시간대별 자동차 판매량”와 같다.

Figure 37. 시간대별 자동차 판매량

시간대별 자동차 판매량


'2.X > 4. Aggregations' 카테고리의 다른 글

4-03. Building Bar Charts  (0) 2017.09.24
4-04. Looking at Time  (0) 2017.09.24
4-04-2. Extended Example  (0) 2017.09.24
4-04-3. The Sky’s the Limit  (0) 2017.09.24
4-05. Scoping Aggregations  (0) 2017.09.24