시작하며
ElasticSearch는 검색뿐 아니라 강력한 집계(Aggregations) 기능을 제공한다. 집계는 크게 메트릭 집계, 버킷 집계, 파이프라인 집계로 나뉜다. 각 집계 유형의 개념과 대표적인 사용 예시를 Q&A 형식으로 정리한다.

집계 유형별 개념과 예시
메트릭 집계 (Metric Aggregation)
메트릭 집계는 도큐먼트에 대해 산술적인 연산을 수행한다.
Q. SQL의 DISTINCT와 비슷한 효과를 내려면 어떤 집계를 사용해야 하는가? 해당 집계에서 precision_threshold 값은 무엇을 의미하는가?
A. 카디널리티 집계(Cardinality Aggregation)를 사용한다. precision_threshold는 정확도 수치를 의미하며 기본값은 3000이다. 높을수록 정확하지만 리소스도 많이 소모한다.
평균값 집계 예시
GET kibana_sample_data_ecommerce/_search
{
"size":0,
"aggs":{
"stats_aggs":{
"avg":{
"field" : "products.base_price"
}
}
}
}카디널리티 집계 예시 (유니크한 값의 개수)
GET kibana_sample_data_ecommerce/_search
{
"size":0,
"aggs":{
"cardi_aggs":{
"cardinality":{
"field" : "day_of_week",
"precision_threshold": 100
}
}
}
}버킷 집계 (Bucket Aggregation)
버킷 집계는 특정 기준에 맞춰 도큐먼트를 그룹화하는 집계이다. SQL의 GROUP BY와 유사하다.
Q. 금요일에 판매된 제품들의 아이디(키워드)를 중복 제거하여 구하라 (데이터: kibana_sample_data_ecommerce, 필드: products._id.keyword)
A. 검색 쿼리로 금요일 데이터를 필터링한 뒤 버킷 집계를 사용한다.
GET kibana_sample_data_ecommerce/_search
{
"size":0,
"query": {
"term": {
"day_of_week": {
"value": "Friday"
}
}
},
"aggs": {
"cardi_aggs":{
"terms":{
"field" : "products._id.keyword"
}
}
}
}파이프라인 집계 (Pipeline Aggregation)
파이프라인 집계는 이전 집계 결과를 입력으로 사용하는 집계이다.
Q. 부모 집계와 형제 집계란 무엇인가?
A. 파이프라인 집계의 두 가지 유형이다.
- 부모 집계(parent aggregation): 단독으로 사용할 수 없으며 기존 집계 내부에서 작성된다.
- 형제 집계(sibling aggregation): 기존 집계 내부가 아니라 외부에서 수행되는 집계이다.
정리하며
ElasticSearch의 집계는 검색과 결합하여 강력한 데이터 분석 기능을 제공한다. 메트릭 집계로 수치를 계산하고, 버킷 집계로 데이터를 그룹화하며, 파이프라인 집계로 집계 결과를 다시 집계하는 구조를 이해하면 복잡한 분석 쿼리도 체계적으로 작성할 수 있다. 실제 운영에서는 집계 시 size: 0을 설정해 불필요한 도큐먼트 반환을 막아 성능을 최적화하는 것이 중요하다.