2.X/4. Aggregations

4-07-3. Sorting Based on "Deep" Metrics

drscg 2017. 9. 23. 22:58

In the prior examples, the metric was a direct child of the bucket. An average price was calculated for each term. It is possible to sort on deeper metrics, which are grandchildren or great-grandchildren of the bucket—with some limitations.

이전의 예제에서, metric은 bucket의 직접적인 자식이었다. 평균 가격은 각 단어에 대해 계산된 값이었다. 더 아래의(deeper) metric으로 정렬하는 것이 가능하다. 약간의 제한이 있지만, bucket의 손자, 증손자도 가능하다.

You can define a path to a deeper, nested metric by using angle brackets (>), like so: my_bucket>another_bucket>metric.

my_bucket>another_bucket>metric 처럼, >(angle brackets)을 사용하여, 더 아래의 nested metric으로, 경로(path)를 지정할 수 있다.

The caveat is that each nested bucket in the path must be a single-value bucket. A filter bucket produces a single bucket: all documents that match the filtering criteria. Multivalue buckets (such as terms) generate many dynamic buckets, which makes it impossible to specify a deterministic path.

주의할 점은, 경로에 있는 각각의 nested bucket은 반드시 단일-값(single-value) bucket이어야 한다.filter bucket은 단일 bucket(filtering 기준에 일치하는 모든 document)을 생성한다. 다중 값 bucket(terms 같은)은 많은 동적인 bucket을 생성한다. 따라서 확정적인 경로를 지정할 수 없다.

Currently, there are only three single-value buckets: filterglobal, and reverse_nested. As a quick example, let’s build a histogram of car prices, but order the buckets by the variance in price of red and green (but not blue) cars in each price range:

현재로서는, 3 개의 단일-값 bucket(filterglobalreverse_nested)이 있다. 간단한 예로, 자동차 판매 가격의 histogram을 만들어보자. 단, bucket의 순서는, 각 가격 범위에서 빨강과 녹색(파랑이 아닌) 자동차의 가격 분산으로 한다.

GET /cars/transactions/_search
{
    "size" : 0,
    "aggs" : {
        "colors" : {
            "histogram" : {
              "field" : "price",
              "interval": 20000,
              "order": {
                "red_green_cars>stats.variance" : "asc" 
              }
            },
            "aggs": {
                "red_green_cars": {
                    "filter": { "terms": {"color": ["red", "green"]}}, 
                    "aggs": {
                        "stats": {"extended_stats": {"field" : "price"}} 
                    }
                }
            }
        }
    }
}

histogram에 의해 생성한 bucket을, nested metric의 분산에 따라, 정렬

단일-값 filter 를 사용했기 때문에, 중첩된 정렬을 사용할 수 있다.

metric으로 생성한 stats로 정렬

In this example, you can see that we are accessing a nested metric. The stats metric is a child of red_green_cars, which is in turn a child of colors. To sort on that metric, we define the path as red_green_cars>stats.variance. This is allowed because the filter bucket is a single-value bucket.

이 예제에서, nested metric을 access하는 것을 볼 수 있다. stats metric은 red_green_cars 의 자식이다. 그리고 차례대로 colors 의 자식이다. metric으로 정렬하기 위해, 경로를 red_green_cars>stats.variance 로 정의하였다. 이것은 filter bucket이 단일-값 bucket이기 때문에 가능하다.

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

4-07-1. Intrinsic Sorts  (0) 2017.09.23
4-07-2. Sorting by a Metric  (0) 2017.09.23
4-08. Approximate Aggregations  (0) 2017.09.23
4-08-1. Finding Distinct Counts  (0) 2017.09.23
4-08-2. Calculating Percentiles  (0) 2017.09.23