DataBase/OpenSearch
집계(Aggregation)
코드몬스터
2025. 7. 10. 23:33
728x90
1. "버킷(bucket)"이 뭐예요? 🪣
OpenSearch에서 **집계(aggregation)**를 하게 되면, 데이터를 조건별로 "그룹"으로 나눠요.
이 그룹 하나하나를 버킷(bucket)이라고 부릅니다.
2. Aggregation 기본 구조
GET /my-index/_search
{
"size": 0, ← 검색 결과 문서는 안 받고
"aggs": { ← 대신 집계 결과만 받아요
"my_agg_name": { ← 집계 이름 (아무거나)
"terms": {
"field": "user.keyword"
}
}
}
}
3. Aggregation 종류 정리
✅ 1) terms 집계 (가장 많이 씀)
- 특정 필드 값 기준으로 그룹을 나눔
- Ex: 사용자별, 국가별, 상태값별
"aggs": {
"users": {
"terms": { "field": "user.keyword" }
}
}
✅ 2) range 집계
- 숫자나 날짜 필드를 범위로 구간 나누기
"aggs": {
"age_ranges": {
"range": {
"field": "age",
"ranges": [
{ "to": 20 },
{ "from": 20, "to": 40 },
{ "from": 40 }
]
}
}
}
✅ 3) date_histogram 집계
- 날짜 기준으로 시간 단위별 집계
- Ex: 일별, 시간별, 주별 발생 건수
"aggs": {
"per_day": {
"date_histogram": {
"field": "timestamp",
"calendar_interval": "day"
}
}
}
✅ 4) stats, avg, sum, min, max
- 수치 필드에 대한 기초 통계
"aggs": {
"price_stats": {
"stats": {
"field": "price"
}
}
}
✅ 5) nested 집계
- 중첩된 JSON 객체 배열에 대한 집계
{
"user": "mj",
"activities": [
{ "type": "login", "time": "..." },
{ "type": "download", "time": "..." }
]
}