- 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 |