2.X/4. Aggregations

4-06-2. Filter Bucket

drscg 2017. 9. 23. 23:25

But what if you would like to filter just the aggregation results? Imagine we are building the search page for our car dealership. We want to display search results according to what the user searches for. But we also want to enrich the page by including the average price of cars (matching the search) that were sold in the last month.

하지만, aggregation 결과를 filtering하고 싶다면? 자동차 대리점을 위한, 검색 페이지를 구현한다고 가정해 보자. 사용자가 무엇을 검색하느냐에 따라, 검색 결과를 표시해야 한다. 그러나, 지난 달에 판매된 (검색에 일치하는) 자동차의 평균 가격을 포함하면, 페이지가 더 멋질 것이다.

We can’t use simple scoping here, since there are two different criteria. The search results must match ford, but the aggregation results must match ford AND sold > now - 1M.

두 가지의 다른 기준이 있기 때문에, 여기에서 단순한 범위 지정을 사용할 수 없다. 검색 결과는 ford 에 일치해야 한다. 그러나 aggregation 결과는 ford AND sold > now - 1M 에 일치해야 한다.

To solve this problem, we can use a special bucket called filter. You specify a filter, and when documents match the filter’s criteria, they are added to the bucket.

이 이슈를 해결하기 위해, filter 라 불리는 특별한 bucket을 사용할 수 있다. filter를 지정하면, document가 filter의 기준에 일치하는 경우, 그들은 bucket에 추가된다.

Here is the resulting query:

아래가 그 query이다.

GET /cars/transactions/_search
{
   "size" : 0,
   "query":{
      "match": {
         "make": "ford"
      }
   },
   "aggs":{
      "recent_sales": {
         "filter": { 
            "range": {
               "sold": {
                  "from": "now-1M"
               }
            }
         },
         "aggs": {
            "average_price":{
               "avg": {
                  "field": "price" 
               }
            }
         }
      }
   }
}

query 범위외에도, filter를 적용하기 위해 filter bucket을 사용

그러므로, 이 avg metric은, ford 에서 만든, 지난 달에 팔린 자동차의 평균일 것이다.

Since the filter bucket operates like any other bucket, you are free to nest other buckets and metrics inside. All nested components will "inherit" the filter. This allows you to filter selective portions of the aggregation as required.

filter bucket은 다른 bucket과 마찬가지로 동작하기 때문에, 다른 bucket이나 metric 내부에 중첩하는 것이 자유롭다. 모든 중첩된 요소는 filter를 "상속(inherit)" 한다. 이는 필요에 따라 aggregation의 선택적인 부분을 filtering할 수 있다는 것을 의미한다.

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

4-06. Filtering Queries and Aggregations  (0) 2017.09.23
4-06-1. Filtering Queries  (0) 2017.09.23
4-06-3. Post Filter  (0) 2017.09.23
4-06-4. Recap  (0) 2017.09.23
4-07. Sorting Multivalue Buckets  (0) 2017.09.23