Post

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 Aggregationaggregation 결과 후처리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와 비교

구분QueryAggregation
목적문서 검색데이터 분석
역할어떤 문서를 가져올지가져온 문서를 어떻게 계산할지
결과문서(Hits)통계 데이터
주요 기능match, term, filter, boolterms, 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
nestednested 객체 그룹화nested 타입 내부 문서 집계리뷰 평점 분석JOIN 유사
missingNULL 그룹화값 없는 문서 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_bucketbucket 평균 계산bucket 결과 평균월 평균 매출AVG()
sum_bucketbucket 합계 계산bucket 결과 총합총 판매량SUM()
min_bucketbucket 최소값가장 작은 bucket 값최소 매출 월MIN()
max_bucketbucket 최대값가장 큰 bucket 값최고 매출 월MAX()
stats_bucketbucket 통계여러 bucket 통계 반환월별 매출 통계통계 함수
extended_stats_bucket확장 통계분산/표준편차 포함매출 변동성 분석통계 함수
percentiles_bucketbucket 백분위percentile 계산응답 시간 분포Percentile
derivative변화량 계산이전 bucket 대비 증감량일별 증가량LAG() 유사
moving_fn이동 평균rolling average 계산최근 7일 평균Window Function
bucket_script사용자 계산식script 기반 계산매출 증가율계산식
bucket_sortbucket 정렬집계 결과 정렬상위 매출 카테고리ORDER BY

4. Matrix Aggregation

종류목적설명사용 예시SQL
matrix_stats다중 필드 관계 분석평균, 분산, 공분산, 상관관계 계산가격과 할인율 관계 분석통계 함수
This post is licensed under CC BY 4.0 by the author.