Database/Elaticsearch

term aggregation 기능 사용하기

BUST 2018. 5. 24. 22:49

- SQL의 Group by의 기능을 필요하다면 Terms Aggregation을 사용하면 된다.

- AVG, MAX 등의 데이터는 Metric Aggregation을 참고를 하면 된다

- SQL의 distinct 기능으로 활용될수도 있다. 

- 참고자료 : https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html


- Example SQL Sample

SELECT genre, count(*) FROM docs GROUP BY genre


- Term Aggregation Query

GET /_search

{

    "aggs" : {

        "genres" : {

            "terms" : { "field" : "genre" }

        }

    }

}


- Terms Aggregation Result

{

    ...

    "aggregations" : {

        "genres" : {

            "doc_count_error_upper_bound": 0, 

            "sum_other_doc_count": 0, 

            "buckets" : [ 

                {

                    "key" : "electronic",

                    "doc_count" : 6

                },

                {

                    "key" : "rock",

                    "doc_count" : 3

                },

                {

                    "key" : "jazz",

                    "doc_count" : 2

                }

            ]

        }

    }

}


- size 필드를 이용하여 approximate (대략적인) count를 값을 얻을수가 있다.

- 각각의 Shard에서 size만큼의 aggs 값을 합친다. 정확하지 않을수가 있다. 하지만 계산양이 적혀 빠르게 데이터를 얻을수가 있다.

  - Shard는 index에서 해당하는 shard의 갯수에 정해지고, 하나의 Lucene Segement로 구성이 된다.

- 특히, 상품 검색에서의 category 분류에 대한 갯수 등을 활용할때 사용된다.


GET /_search

{

    "aggs" : {

        "products" : {

            "terms" : {

                "field" : "product",

                "size" : 5

            }

        }

    }

}


'Database > Elaticsearch' 카테고리의 다른 글

Elastic Search  (0) 2018.12.12
Lucene Segment  (0) 2018.08.26
로그성 데이터의 날짜 기반의 index 설계  (0) 2018.05.24
_source를 이용하여 원하는 필드만 선택하기  (0) 2018.05.24
Elastic Search Nested Query  (0) 2018.05.22