[ElasticSearch] 집계 연산

Woong·2022년 10월 11일
0

ElasticSearch

목록 보기
13/21

메트릭 집계

  • 필드에 대해 통계, 계산하는 집계
  • 메트릭 집계 종류
    • avg : 필드 평균값
    • min : 필드 최소값
    • max : 필드 최대값
    • sum : 필드 총합
    • count : document 수
    • percentiles : 필브 백분위값 계산
    • stats : min, max, sum, avg, count 를 모두 계산
    • cardinality : 필드의 유니크한 값 개수
    • geo-centroid : 위치 정보의 중심점 계산

버킷 집계

  • document 를 그룹핑하여 집계
  • 많이 사용하는 버킷 집계들
    • histogram : 숫자 필드를 일정 간격으로 분류
    • date_histogram : 날짜/시간 필드를 일정 간격으로 분류
    • range : 숫자 필드를 사용자 범위 간격 분류
    • date_range : 날짜/시간 필드를 사용자 지정 범위 간격 분류
    • terms : 필드 값의 빈도 수에 따라 분류
  • ex) 9월 traffic 인덱스에서 9월 트래픽을 분 단위로 sum 하여 집계
    • group_id 가 9 또는 10인 조건, 9월 시간 범위
      • should 조건은 다중에서 or 연산
    • group_id 필드를 기준으로 버킷 집계 수행
      • bucket_aggs 정의한 부분
      • bucket_aggs"size":999 부분은 버킷의 갯수 (기본값 10)
    • "size":0 은 집계에 사용된 document 를 조회하지 않는다는 의미
      • document 를 조회하지 않기 때문에 _source 가 없어도 동일한 결과를 가져옴
      • _source : 검색 결과로 조회할 필드 지정
GET traffic/_search 
{
  "query": {
    "bool": {
      "should": [
       {"match" : { "group_id" : 9} },
       {"match" : { "group_id" : 10} }
     ],
     "must": [
       {
         "range": {
            "time": {
              "from": "2022-09-01 00:00:00",
              "to": "2022-09-31 23:59:59"
            }
         }
       }
       ]
   }
  },
  "size":0,
  "aggs": {
    "bucket_aggs": {
      "terms": {
        "field" : "group_id",
        "size": 999
      },
      "aggs": {
        "sum_traffic_aggs": {
          "date_histogram": {
            "field": "time",
            "calendar_interval": "minute"
          },
          "aggs": {
            "summary_aggs": {
              "sum": {
              "field": "traffic_value"
              }
            }
          }
        }
      }
    }
  }
}

0개의 댓글