OpenSearch 집계

OpenSearch 집계 (Aggregations)

OpenSearch는 검색만 하는 게 아니에요. **집계(aggregations)**를 쓰면 OpenSearch의 분석 엔진으로 데이터를 분석하고 통계를 뽑아낼 수 있어요. 실시간으로 데이터를 분석해 조치를 취하거나, OpenSearch Dashboards로 시각화 대시보드를 만드는 데도 쓰여요. 방대한 데이터셋도 밀리초 단위로 집계할 수 있지만, 쿼리보다 CPU와 메모리를 더 많이 써요.

출처: https://docs.opensearch.org/latest/aggregations/

기본 구조

집계 쿼리의 기본 구조는 다음과 같아요. 집계 결과만 필요하고 쿼리 결과는 필요 없다면 size0으로 설정하면 돼요.

GET _search
{
  "size": 0,
  "aggs": {
    "<aggregation_name>": {
      "<aggregation_type>": {}
    }
  }
}

aggs(원하면 aggregations도 가능) 프로퍼티에 원하는 만큼 집계를 정의할 수 있어요. 각 집계는 이름과 OpenSearch가 지원하는 집계 유형으로 구성돼요. 집계 이름은 응답에서 서로 다른 집계를 구분하는 역할을 해요.

예제: 평균 구하기

OpenSearch Dashboards의 샘플 e-commerce 데이터에서 taxful_total_price 필드의 평균을 구하는 예제예요.

GET opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "avg_taxful_total_price": {
      "avg": {
        "field": "taxful_total_price"
      }
    }
  }
}

응답의 aggregations 블록에 계산된 평균값이 들어 있어요.

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 4675,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "avg_taxful_total_price" : {
      "value" : 75.05542864304813
    }
  }
}

집계 유형

집계는 크게 세 가지 유형으로 나뉘어요.

  • 메트릭 집계(Metric aggregations): 숫자 필드에서 sum, min, max, avg 같은 지표를 계산해요.
  • 버킷 집계(Bucket aggregations): 어떤 기준으로 쿼리 결과를 그룹으로 나눠요.
  • 파이프라인 집계(Pipeline aggregations): 한 집계의 출력을 다른 집계의 입력으로 연결해요.

메트릭 집계

  • avg – 평균값 계산
  • cardinality – 고유 값 개수
  • extended_stats – 표준편차를 포함한 종합 통계
  • max – 최댓값
  • min – 최솟값
  • percentile – 백분위수 (예: 중앙값, 95번째 백분위수)
  • stats – 기본 통계 (count, sum, min, max, avg)
  • sum – 값의 합계
  • value_count – null이 아닌 값의 개수

버킷 집계

  • terms – 고유 필드값으로 그룹화
  • date_histogram – 시간 간격으로 그룹화
  • histogram – 숫자 간격으로 그룹화
  • range – 숫자 범위로 그룹화
  • filter – 필터 하나에 매칭되는 단일 버킷 생성
  • filters – 필터마다 버킷을 여러 개 생성
  • missing – 필드값이 없는 문서 그룹화
  • significant_terms – 데이터셋에서 특이하거나 흥미로운 용어 찾기

파이프라인 집계

  • avg_bucket – 버킷 전체의 평균 계산
  • cumulative_sum – 버킷 전체의 누적 합계 계산
  • bucket_sort – 반환되는 버킷 정렬 및 개수 제한

중첩 집계 (Nested aggregations)

집계 안의 집계를 중첩 집계(subaggregation)라고 불러요. 메트릭 집계는 단순한 결과를 만들어 내서 중첩 집계를 담을 수 없어요. 반면 버킷 집계는 문서 버킷을 만들어 내므로, 그 안에 메트릭·버킷 집계를 중첩해 복잡한 분석을 할 수 있어요. 내부 aggs 키워드가 새로운 중첩 집계를 시작해요.

더 알아보기