본문 바로가기

Computer/Study

엘라스틱서치 실무가이드(5-1)

5]데이터 집계

: 데이터를 그룹화하여 각종 통계지표를 제공하는 집계기능을 공식적으로 제공

 

5.1]집계

: 데이터를 그룹화하고 통계를 구하는 기능으로 5.0버전이후 기능이 대폭 강화

 

5.1.1]엘라스틱서치와 데이터 분석

: 엘라스틱은 SQL보다 더욱 강력한 집계기능을 제공하며 인덱스를 활용해 분산 처리가 가능하기 때문에 더 많은 데이터를 빠르게 집계가 가능

 

5.1.2]엘라스틱서치가 집계에 사용하는 기술

▶캐시

: 마스터 노드가 여러 노드에 있는 데이터를 집계해 질의에 답한다.

: 데이터의 양이 클수록 집계에 많은 양의 CPU와 메모리 자원이 소모되며 응답에 걸리는 시간이 길어진다 > 캐시를 이용하여 해결(질의 결과를 캐시에 저장하여 같은 질의에대한 응답을 보관된 결과를 반환)

: 일반적으로 힙메모리의 1%을 할당하며 conf/elasticsearch.yml을 통해 설정(indices.requests.cache.size:2%)

  • Node query Cache : 노드의 모든 샤드가 공유하는 LRU 캐시
  • Shard request Cache : 샤드는 데이터를 분산 저장하기 위한 단위로 독립인덱스라고 하며 해당 샤드에 수행된 쿼리의 결과를 캐싱(업데이트가 빈번하면 오히려 성능저하)
  • Field data Cache : 집계 연산을 수행할 대는 모든 필드 값을 메모리에 로드 > 계산되는 동안의 필드 값을 메모리에 보관

 

5.1.4]Aggregation API 이해하기

: 기존 쿼리에 집계 구문을 추가하는 방식으로 수행 > 집계후 버킷목록에 속한 문서의 집합이 출력

 

▶집계구문의 구조

"aggregations" : {
	"<aggregation_name>" : {
    	"<aggregation_type>" : {
        	<aggregation_body>
        }
        [,"meta" : {<meta_data_body>}]?
        [,"aggregations" : {[<sub_aggregation>]+}]?
    }
    [,"<aggregation_name_2>" : {...}]*
}    

▶집계영역

: 쿼리영역 생략시 match_all로 판단

{
	"query":{ ----------- 쿼리영역
    	"constant_score":{
        	"filter":{
            	"match":
            }
        }
    },
    "aggs:{	  ------------- 집계영역
    	"<집계이름>":{
            "<집계타입>"{
            	"field":<필드명>"
            }
        }
    },
    "<집계이름>":
    	"global" :{}
        "aggs":{
            "<집계이름>":{
                "<집계타입>"{
                    "field":<필드명>"
                }
            }
        }
    }
}

: 쿼리 결과에서의 집계가 아닌 전체에서의 집계를 수행하고자 할시 클로벌 버킷을 사용.

 

5.2] 메트릭 집계

: 특정 필드에 대한 합이나 평균을 계산하거나 다른 집계와 중첩해서 결과에 대해 특정 필드의 _score값에 따라 정렬을 수행하거나 지리 정보를 통해 범위 계산을 하는 등의 다양한 집계를 수행할 수있다. 

 

5.2.1]합산집계

: 집계 타입 - sum을 사용

 

5.2.2]평균집계

: 집계 타입 - avg를 사용

 

5.2.3]최솟값 집계

: 집계 타입 - min을 사용

 

5.2.4] 최대값 집계

: 집계 타입 - max를 타입

 

5.2.5] 개수집계

: 집계 타입 - value_count를 사용

 

5.2.6]통계 집계

: 집계 타입 - stats를 사용하는 다중 집계로 위의 합, 평균, 최소값, 최대값 그리고 개수를 한번에 구할 수 있다.

 

5.2.7]확장 통계 집계

: 집계 타입 - extended_stats을 사용하는 다중 집계로 위 결과에 표준편차와 같은 통곗값이 추가된다.

 

5.2.8]카디널리티 집계

: 집계 타입 - terms을 사용하며 중복을 제외한 고유한 값에 대한 집계를 수행하는데 모든 문서에 대해 중복된 값을 집계하는 것은 성능에 영향을 주므로 근사치를 통해 집계 수행

 

5.2.9]백분위 수 집계

: 집계 타입 - percentiles를 통해 백분위 구간별 개수를 집계하며, 지정된 백분위 외 직접 백분위를 입력할수 있다.

 

5.2.10]백분위 수 랭크 집계

: 집계 타입 - percentile_rank를 사용하며 해당 수치의 백분위 수를 얻을 수 있음.

 

5.2.11]지형 경계 집계

: 지형 경계 집계를 사용하기 위해서는 필드의 타입이 geo_point여야한다.