[ES] Aggregation

Corini·2022년 5월 4일
0

ES

목록 보기
4/8

https://velog.velcdn.com/images/geesuee/post/b0aabd7e-48ee-48c5-861a-f241160f30e1/%EC%8D%B8%EB%84%A4%EC%9D%BC_elasticsearch.png

search API 사용 결과를 통계 처리하는 Aggregation출처:김종민 님이 집필하신 Elastic 가이드북 (추천 ⭐⭐⭐⭐⭐)감성코더 둥기, [ElasticSearch] 카디날리티 집계(Cardinality Aggregation)

1. Aggregation

1) 기초 통계 일괄 집계 : stats

  • 특정 field 값의 기초 통계 값 일괄 집계
  • countminmaxavgsum 값 일괄 집계

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2F36d7ef54-196b-4793-b50c-77ad68d7caea%2Fimage.png

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2Fa224671f-561e-47d9-a9ac-ed5fc42e6d29%2Fimage.png


2) 기초 통계 단일 집계 : count / min / max / avg / sum

  • 특정 field 값의 countminmaxavgsum 값 단일 집계
  • 아래 이미지의 "sum" 자리에 구하고 싶은 값 명시하면 해당 값 집계

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2Fec251b27-dd3b-49e8-bc3b-ab9a4cb190bc%2Fimage.png

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2F0d227d56-a17c-4afa-ba8d-bdab118e4d5f%2Fimage.png


3) 필드 내 고유한 값의 대략적인 개수 집계 : cardinality

  • Elasticsearch의 cardinality는 HLL 알고리즘 기반
  • HLL 알고리즘 특징정확도(percision) 설정 가능정확도가 높을수록 메모리 사용량 증가cardinality가 낮을수록 정확도 높음
  • text 타입 field에서 사용할 경우, 뒤에 .keyword 붙여 keyword 타입으로 변환해주어야 함

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2Fc957c472-e38a-49a2-9321-133b0d777f2b%2Fimage.png

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2Fc7d3a07c-58f5-45fe-ad0d-cda9ef838f43%2Fimage.png


4) 백분위 구간 집계 : percentiles

  • 백분위 구간 값 집계
  • default는 1%5%25%50%75%95%99% 구간에 위치 해 있는 값 집계
  • "percents"로 백분위 구간 지정 가능

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2F751633b2-25ec-4277-b3a1-8cbd0f8e1409%2Fimage.png

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2Ff6ebb425-27f2-4235-ada7-2ed587a3f5ed%2Fimage.png


5) 특정 값의 백분위 수 집계 : percentile_ranks

  • 값을 입력하여 해당 값의 백분위 수 집계

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2F40f04c5c-79a1-4b06-8856-c42493eeef21%2Fimage.png

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2F78b8861f-baa3-4ee7-838b-684bd0f18141%2Fimage.png


2. Bucket Aggregation

1) 범위 지정하여 버킷 나누기 : range

  • fromto 로 범위를 지정하여 버킷 나누기
  • 해당 버킷별로 몇 개의 document가 포함되어있는지 결과 출력

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2F9509fe74-b9ea-466f-a982-542c04a519dd%2Fimage.png

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2F076b6670-1f17-4afb-b790-d7fed10a1793%2Fimage.png


2) 인터벌 지정하여 버킷 나누기 : histogram

  • interval 로 버킷 크기(구간 크기) 지정하여 버킷 나누기
  • 해당 버킷별로 몇 개의 document가 포함되어있는지 결과 출력

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2F957583cb-1671-44f3-bcf4-51efba42ec44%2Fimage.png

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2F9e23e6a5-802b-4d5d-9c39-c49841911e87%2Fimage.png


3) 날짜 필드 버킷 나누기 : date_range / date_histogram

  • 날짜 기준 버킷 나누기
  • 해당 버킷별로 몇 개의 document가 포함되어있는지 결과 출력
  • 버킷 키 부분 format 지정 가능(예: format: "yyyy-MM-dd" 뒤에 시간 부분 빼고 날짜까지만 키로 지정)

date_range

  • fromto 로 날짜 범위 지정하여 버킷 나누기

date_histogram

  • interval에 daymonthyear 명시하여 버킷 나누기

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2Fecb51af8-ba1f-4850-9c74-c529650fc2e4%2Fimage.png

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2Ffbf05651-c8e5-4a0e-aecc-39f660cc06b4%2Fimage.png

+) 나는 구버전 옵션으로 실습했지만..☆ 이렇다고 합니다..!

interval ❌

calendar_interval ⭕ (year, quarter, month, week, day, ...)

fixed_interval ⭕ (1y, 30d, ...)

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2F1e6d6884-2e9e-4ce5-a2f4-09f627cea8e6%2Fimage.png


3) 키워드별 버킷 나누기 : terms

  • 해당 field의 cardinality 기준 버킷 나누기
  • text 타입 field에서 사용할 경우, 뒤에 .keyword 붙여 keyword 타입으로 변환해주어야 함

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2F71eb6f46-b569-46ed-ae8a-ae55ce8ffefc%2Fimage.png

https://velog.velcdn.com/images%2Fgeesuee%2Fpost%2Fd8335b5d-6ca8-47b7-b6ad-608d6e1a3ecb%2Fimage.png

profile
Coding is playing!

0개의 댓글