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": "..." }
  ]
}
 

'DataBase > OpenSearch' 카테고리의 다른 글

Intro to OpenSearch  (0) 2025.05.20