04 ElasticSearch Aggregation
04 ElasticSearch Aggregation
1. Note
1. Note
- Aggreation은
- 정리해두고 필요에 따라계속 보면서 익숙해져야할듯.
- SQL처럼 점점 익숙해지기를!
2. ElasticSearch Aggregation
1. ElasticSearch Aggregation 개념
- 검색된 문서를 그룹화하거나 통계 계산을 수행하는 기능
- 검색 결과를 분석하는 기능
2. 특징
1. Query 결과를 대상으로 동작
- Aggregation은 항상 Query 결과를 기준으로 수행됨
- 검색된 문서 집합을 대상으로 계산
흐름
1 2 3 4
1. Query 실행 2. 문서 검색 3. Aggregation 수행 4. 결과 반환
2. 문서(Document)를 반환하지 않을 수도 있음
상황에 따라서 검색된 문서를 제거하고 통계만 보기도함.
1 2 3 4 5 6 7 8 9 10
GET /products/_search { "size": 0, -- hit건수 0으로 처리 "query": { ... }, "aggs": { ... } }
3. 계층 구조(Tree Structure)
계층적으로 분석하여 조회가 가능함
1 2 3 4 5 6
카테고리별 └─ 브랜드별 └─ 평균 가격 # 전자기기 - 삼성 => 평균가 # 전자기기 - 애플 => 평균가
4. 검색과 분석을 함께 수행 가능
검색과 동시에 분석을 활용 하기도 함.
1 2 3 4 5
특정 상품 리스트 : 휴대폰 + 브랜드별 가격 평균 : 가격 평균 # 휴대폰 리스트와 브랜드별 가격 평균가
3. 종류
| 구분 | 목적 | 대표 종류 |
|---|---|---|
| Bucket Aggregation | 그룹화 | terms, range, date_histogram |
| Metric Aggregation | 통계 계산 | avg, sum, min, max |
| Pipeline Aggregation | aggregation 결과 후처리 | avg_bucket, derivative |
| Matrix Aggregation | 여러 필드 간 관계 분석 | matrix_stats |
4. 사용 방법
1
2
3
4
5
6
7
8
9
10
11
12
13
-- 가장 단순화해서 사용 방법
GET /products/_search
{
"size": 0, # 조회된 리스트 가져오지 않음
"aggs": { # Aggreation 사용 명시
"avg_price": { # Alias 리턴될 값의 Key
"avg": { #사용할 함수
"field": "price" # price필드의 값
}
}
}
}
5. query와 비교
| 구분 | Query | Aggregation |
|---|---|---|
| 목적 | 문서 검색 | 데이터 분석 |
| 역할 | 어떤 문서를 가져올지 | 가져온 문서를 어떻게 계산할지 |
| 결과 | 문서(Hits) | 통계 데이터 |
| 주요 기능 | match, term, filter, bool | terms, avg, sum |
3. 종류별 체크
1. Bucket Aggregation
| 종류 | 목적 | 설명 | 사용 예시 | SQL |
|---|---|---|---|---|
terms | 값 기준 그룹화 | 특정 필드 값 기준으로 bucket 생성 | 카테고리별 상품 수 | GROUP BY category |
range | 범위별 그룹화 | 숫자 범위 기준 bucket 생성 | 가격대별 상품 개수 | CASE WHEN |
date_histogram | 날짜 그룹화 | 시간 단위 bucket 생성 | 일별 주문 수 | GROUP BY DATE() |
histogram | 숫자 간격 그룹화 | interval 기준 숫자 bucket 생성 | 100 단위 가격 분포 | 숫자 grouping |
filter | 조건 그룹화 | 특정 조건 문서만 bucket 생성 | 전자기기 상품 통계 | WHERE |
filters | 다중 조건 그룹화 | 여러 조건 bucket 생성 | 삼성 vs 애플 비교 | 여러 WHERE |
nested | nested 객체 그룹화 | nested 타입 내부 문서 집계 | 리뷰 평점 분석 | JOIN 유사 |
missing | NULL 그룹화 | 값 없는 문서 bucket 생성 | category 없는 상품 | IS NULL |
global | 전체 문서 그룹화 | query 무시 전체 문서 집계 | 전체 평균 가격 | 전체 테이블 |
sampler | 샘플링 | 일부 데이터 기반 분석 | 대용량 로그 분석 | LIMIT SAMPLE 느낌 |
2. Metric Aggregation
| 종류 | 목적 | 설명 | 사용 예시 | SQL |
|---|---|---|---|---|
avg | 평균 계산 | 특정 필드의 평균값 계산 | 평균 상품 가격 | AVG(price) |
sum | 합계 계산 | 특정 필드 총합 계산 | 총 매출 금액 | SUM(price) |
min | 최소값 계산 | 가장 작은 값 조회 | 최저 가격 상품 | MIN(price) |
max | 최대값 계산 | 가장 큰 값 조회 | 최고 가격 상품 | MAX(price) |
value_count | 개수 계산 | 값이 존재하는 문서 수 계산 | 상품 수 | COUNT(price) |
cardinality | 중복 제거 개수 | 유니크한 값 개수 계산 | 브랜드 수 | COUNT(DISTINCT brand) |
stats | 통계 묶음 조회 | count, min, max, avg, sum 한번에 반환 | 가격 통계 대시보드 | 여러 집계 함수 |
extended_stats | 확장 통계 | stats + 분산, 표준편차 제공 | 가격 분포 분석 | 통계 함수 |
percentiles | 백분위 계산 | P50, P95, P99 등 계산 | API 응답 시간 분석 | Percentile 함수 |
median_absolute_deviation | 이상치 분석 | 중앙 절대 편차 계산 | 이상 데이터 탐지 | 통계 함수 |
top_hits | 대표 문서 조회 | bucket 내부 문서 조회 | 카테고리별 최신 상품 | ORDER BY ... LIMIT |
3. Pipeline Aggregation
| 종류 | 목적 | 설명 | 사용 예시 | SQL |
|---|---|---|---|---|
avg_bucket | bucket 평균 계산 | bucket 결과 평균 | 월 평균 매출 | AVG() |
sum_bucket | bucket 합계 계산 | bucket 결과 총합 | 총 판매량 | SUM() |
min_bucket | bucket 최소값 | 가장 작은 bucket 값 | 최소 매출 월 | MIN() |
max_bucket | bucket 최대값 | 가장 큰 bucket 값 | 최고 매출 월 | MAX() |
stats_bucket | bucket 통계 | 여러 bucket 통계 반환 | 월별 매출 통계 | 통계 함수 |
extended_stats_bucket | 확장 통계 | 분산/표준편차 포함 | 매출 변동성 분석 | 통계 함수 |
percentiles_bucket | bucket 백분위 | percentile 계산 | 응답 시간 분포 | Percentile |
derivative | 변화량 계산 | 이전 bucket 대비 증감량 | 일별 증가량 | LAG() 유사 |
moving_fn | 이동 평균 | rolling average 계산 | 최근 7일 평균 | Window Function |
bucket_script | 사용자 계산식 | script 기반 계산 | 매출 증가율 | 계산식 |
bucket_sort | bucket 정렬 | 집계 결과 정렬 | 상위 매출 카테고리 | ORDER BY |
4. Matrix Aggregation
| 종류 | 목적 | 설명 | 사용 예시 | SQL |
|---|---|---|---|---|
matrix_stats | 다중 필드 관계 분석 | 평균, 분산, 공분산, 상관관계 계산 | 가격과 할인율 관계 분석 | 통계 함수 |
This post is licensed under CC BY 4.0 by the author.