Elasticsearch: 집계(Aggregations) 완벽 정리
Elasticsearch는 단순한 검색 기능뿐만 아니라 데이터 분석 및 통계 처리까지 가능합니다.
✔ Aggregation(집계) 기능을 활용하면 다양한 연산 수행 가능
✔ Kibana와 연동하여 데이터 시각화 가능
✔ Metrics Aggregation & Bucket Aggregation으로 데이터 분석 가능
이번 글에서는 Aggregation 개념, 설정 방법, 주요 기능, 실전 예제까지 상세히 알아보겠습니다.
1. Aggregations 개요
개념 | Elasticsearch에서 데이터를 그룹화하고 통계 처리하는 기능 | |
사용 목적 | 데이터 분석, 로그 처리, 검색 결과 요약, 통계 계산 | |
주요 유형 | Metrics Aggregation (숫자 연산) Bucket Aggregation (데이터 그룹화) |
2. Aggregation 기본 구조
🔹 Aggregation 문법
✔ _search API에서 aggs(aggregations) 옵션을 사용
✔ 여러 개의 Aggregation을 동시에 수행 가능
📌 예제 1: Aggregation 기본 구조
GET my_index/_search
{
"query": { ... },
"aggs": {
"aggregation_name_1": {
"aggregation_type": {
"field": "필드명"
}
},
"aggregation_name_2": {
"aggregation_type": {
"field": "필드명"
}
}
}
}
✅ 여러 개의 Aggregation을 한 번에 실행 가능
3. 데이터 예제 (지하철 승객 수 데이터)
이제 Aggregation을 테스트할 지하철 승객 수 데이터를 입력합니다.
📌 예제 2: my_stations 인덱스 생성 및 데이터 입력
PUT my_stations/_bulk
{"index": {"_id": "1"}}
{"date": "2019-06-01", "line": "1호선", "station": "종각", "passangers": 2314}
{"index": {"_id": "2"}}
{"date": "2019-06-01", "line": "2호선", "station": "강남", "passangers": 5412}
{"index": {"_id": "3"}}
{"date": "2019-07-10", "line": "2호선", "station": "강남", "passangers": 6221}
{"index": {"_id": "4"}}
{"date": "2019-07-15", "line": "2호선", "station": "강남", "passangers": 6478}
{"index": {"_id": "5"}}
{"date": "2019-08-07", "line": "2호선", "station": "강남", "passangers": 5821}
{"index": {"_id": "6"}}
{"date": "2019-08-18", "line": "2호선", "station": "강남", "passangers": 5724}
{"index": {"_id": "7"}}
{"date": "2019-09-02", "line": "2호선", "station": "신촌", "passangers": 3912}
{"index": {"_id": "8"}}
{"date": "2019-09-11", "line": "3호선", "station": "양재", "passangers": 4121}
{"index": {"_id": "9"}}
{"date": "2019-09-20", "line": "3호선", "station": "홍제", "passangers": 1021}
{"index": {"_id": "10"}}
{"date": "2019-10-01", "line": "3호선", "station": "불광", "passangers": 971}
✅ 지하철 노선, 역명, 날짜, 승객 수 데이터를 포함한 샘플 데이터 생성
4. Metrics Aggregations (숫자 계산)
✔ 숫자 필드(passangers)를 대상으로 평균, 최대, 최소, 합계를 계산
📌 예제 3: 승객 수의 평균, 합계, 최대, 최소값 구하기
GET my_stations/_search
{
"size": 0,
"aggs": {
"avg_passengers": {
"avg": {
"field": "passangers"
}
},
"sum_passengers": {
"sum": {
"field": "passangers"
}
},
"max_passengers": {
"max": {
"field": "passangers"
}
},
"min_passengers": {
"min": {
"field": "passangers"
}
}
}
}
✅ 지하철 승객 수의 평균, 합계, 최대, 최소값을 계산
5. Bucket Aggregations (데이터 그룹화)
✔ 문자열 필드를 기준으로 그룹화하여 데이터 집계 가능
✔ 승객 수를 지하철 노선(line) 또는 역(station)별로 그룹화 가능
📌 예제 4: 지하철 노선(line)별 평균 승객 수 구하기
GET my_stations/_search
{
"size": 0,
"aggs": {
"group_by_line": {
"terms": {
"field": "line.keyword"
},
"aggs": {
"avg_passengers": {
"avg": {
"field": "passangers"
}
}
}
}
}
}
✅ 각 지하철 노선별 평균 승객 수를 구하는 쿼리
📌 예제 5: 날짜(date)별 총 승객 수 구하기
GET my_stations/_search
{
"size": 0,
"aggs": {
"group_by_date": {
"date_histogram": {
"field": "date",
"calendar_interval": "month"
},
"aggs": {
"sum_passengers": {
"sum": {
"field": "passangers"
}
}
}
}
}
}
✅ 월별 승객 수를 계산하는 date_histogram을 사용
6. Nested Aggregations (중첩 집계)
✔ 하나의 집계 내부에서 또 다른 집계를 수행
✔ 예: 지하철 노선별 승객 수 합계를 계산하고, 그 안에서 최대값 구하기
📌 예제 6: 노선별 승객 수 합계 & 최대값 구하기
GET my_stations/_search
{
"size": 0,
"aggs": {
"group_by_line": {
"terms": {
"field": "line.keyword"
},
"aggs": {
"sum_passengers": {
"sum": {
"field": "passangers"
}
},
"max_passengers": {
"max": {
"field": "passangers"
}
}
}
}
}
}
✅ 각 노선별로 승객 수 합계 및 최대값을 구하는 중첩 집계(Nested Aggregation)
7. 정리
Metrics Aggregations | 숫자 필드 연산 | avg, sum, max, min |
Bucket Aggregations | 특정 필드를 기준으로 그룹화 | terms, date_histogram |
Nested Aggregations | 하나의 집계 내부에서 또 다른 집계 수행 | terms + sum + max 조합 |
8. 학습 가이드
1️⃣ Aggregation의 기본 개념을 이해하고 직접 쿼리 실행
2️⃣ terms, avg, sum, date_histogram을 사용하여 데이터 분석 실습
3️⃣ 중첩 Aggregation을 활용하여 고급 데이터 분석 적용
9. 마무리
Elasticsearch의 집계(Aggregations) 기능을 활용하면
✔ 검색 결과를 통계적으로 분석 가능
✔ 다양한 유형의 데이터 그룹화 및 연산 수행 가능
✔ Kibana와 연동하여 강력한 시각화 기능 제공
다음 학습에서는 Aggregation 성능 최적화 및 고급 활용법을 다루겠습니다! 🚀
'Elastic Search > 집계' 카테고리의 다른 글
[Elasticsearch] Pipeline Aggregations (파이프라인 집계) 완벽 정리 (0) | 2025.02.03 |
---|---|
[Elasticsearch] Sub-Aggregations (하위 집계) 완벽 정리 (0) | 2025.02.03 |
[Elasticsearch] Bucket Aggregations (버킷 집계) 완벽 정리 (0) | 2025.02.03 |
[Elasticsearch] Metrics Aggregations (메트릭 집계) 완벽 정리 (0) | 2025.02.03 |