엘라스틱 서치 - 집계 정리

25gStroy·2022년 5월 22일
0

ELK

목록 보기
3/6

집계

엘라스틱 서치에서 집계는 데이터를 그룹핑하고 통곗값을 얻는 기능으로 SQL의 GROUP BY와 통계함수를 포함하는 개념
집계를 잘 이해할수록 키바나 툴을 더 잘 사용할 수 있다.

집계의 요청 - 응답 형태

집계를 위한 특별한 API가 제공되는 것이 아니다. search API의 요청본문에 aggs 파라미터를 이용하면 쿼리결과에 대한 집계를 생성할 수 있다.

엘라스틱 서치는 크게 메트릭 집계와 버킷 집계라는 두가지 타입의 집계가 있다.

메트릭 집계

필드의 최소/최대/합계/평균/중간값 과같은 동계결과를 보여준다.

  • avg : 평균값 계산
  • min : 최솟값
  • max : 최댓값
  • sum : 필드의 총합
  • precentiles: 필드의 백분위값
  • stats: 필드의 min,max,sum,avg,cout를 한번에 볼 수 있다.
  • cardinality: 필드의 유니크한 값 개수를 보여준다
  • geo-centroid : 필드내부의 위치 정보의 중심점을 계산한다.

겁색결과 내에서 집계

검색 쿼리 내에서 집계를 함께 사용하는 방법

버킷 집계

메트릭 집계가 특정필드 기준으로 통겟값을 계산하려는 목적이라면 버킷집계는 특정 기준에 맞춰서 도큐먼트를 그룹핑하는 역할을 한다.

  • 버킷 집계 종류
    • histogram : 숫자 타입 필드를 일정 간격으로 분류한다.
    • date_histograam : 날짜 / 시간 타입필드를 일정 날짜/ 시간 간격으로분류한다.
    • range : 숫자 타입 필드를 사용자가 지정하는 범위 간격으로 분류한다.
    • date_range: 날짜/시간 타입필드를 사용자가 지정하는 날짜/시간 간격으로 분류한다.
    • trams : 필드에 많이 나타나는 용어값을 기준으로 분류한다.
    • significant_terms : 모든 값을 대상으로 하지 않고 인덱스 내 전체 문서 대비 현제 검색 조건에서 통계적으로 유의미한 값들을 기준으로 분류한다.
    • filters : 각 그룹에 포함 시킬 문서의 조건을 직접 지정한다.

용어집계가 정확하지 않은 이유

분산 시스템의 집계 과정에서 발생하는 잠재적인 요류 가능성 때문이다. 분산시스템에서는 데이터를 여러 노드에서 분산하고 취합하는 과정에서 오류가 발생할 수 있다.
가장 큰 이유는 집계가 모든 도큐먼트를 가져와 한번에 집계를 하는 것이 아니라 분산되어 있는 개별 노드단에서 먼저 집계를 하고 그 결과를 취합해서 다시 집계를 하기때문이다.
정확도를 높히기 위해서는 샤드의 크기를 조정해 줘야한다.

집계의 조합

group by 와 비슷하다.
집계의 가장 기본적인 형태는 버킷 집계로 도큐먼트를 그루핑한 후에 각 버킷 집계별 매트릭 집계를 사용하는 것이다.

  • 서브 버킷 집계 : 서브 버킷은 버킷 안에서 다시 버킷 집계를 요청하는 집계다. 트리구조라고 생각해도 무방하다.

파이프 라인 집계

이전 결과를 다음단계에서 이용하는 개념이 과정에서 부모집계와 형제 집계라는 두가지 유형이 있다. 두집계의 가장 큰 차이점은 집계가 작성되는 위치다. 부모집계는 집계내부에 형제 집계는 기존집계 외부에서 새로작성된다.

  • 형제 집계
    • min_bucket : 기존 집계중 최솟값을 구한다
    • max_bucket : 기존집계중 최댓값을 구한다.
    • avg_bucket : 기존 집계 평균값을 구한다.
    • sum_bucket : 기존 집계의 총합을 구한다.
    • stat_bucket : 기존 집게의 min,max,sum,count,avg를 구한다.
    • percentile_bucket: 기존집계의 백분위값
    • moving_avg : 기존 집계의 이동 평균을 구한다. 단 기존집계는 순차적인 데이터 구조여야 한다.
  • 부모 집계
    • derivative : 기본집계의 미분을 구한다.
    • cumulative_sum : 기존 집계의 누적합을 구한다.
profile
애기 개발자

0개의 댓글