본문 바로가기
OpenSearch (ElasticSearch)

[9] 집계 - 버킷 집계

by parkjp 2022. 3. 13.

 

버킷 집계

 

버킷 집계는 문서 세트를 버킷으로 분류합니다.

버킷 집계 유형은 주어진 문서가 버킷에 속하는지 여부를 결정합니다.

 

 

 

:: terms

 

terms 집계는 각 고유한 terms필드에 대한 버킷을 동적으로 생성합니다.

// 아래 예시는 웹 로그 데이터의 응답 코드 별 문서의 수를 찾아서 집계합니다.
GET opensearch_dashboards_sample_data_logs/_search
{
  "size": 0,
  "aggs": {
    "response_codes": {
      "terms": {
        "field": "response.keyword",
        "size": 10
      }
    }
  }
}
 
 
 
 
// 응답 예시
...
"aggregations" : {
  "response_codes" : {
    "doc_count_error_upper_bound" : 0,
    "sum_other_doc_count" : 0,
    "buckets" : [
      {
        "key" : "200",
        "doc_count" : 12832
      },
      {
        "key" : "404",
        "doc_count" : 801
      },
      {
        "key" : "503",
        "doc_count" : 441
      }
    ]
  }
 }
}
// 예시 값은 각 버킷별로 문서의 수가 key.doc_count키와 함께 반환되었다. 기본적으로 버킷들은 doc_count 값으로 내림차순 정렬된다.

terms 집계는 top unique terms를 반환한다.  만약 데이터가 많은 unique terms를 가지고 있다면, 몇몇의 unique terms는 결과로 반환되지 않을 수 있다.

sum_other_doc_count 필드는 응답에서 제외된 문서의 합계이다. 위 예제의 경우에는 sum_other_doc_count필드의 값이 0이고 이 의미는 모든 unique 값이 response로 반환되었다는 뜻이다. 

 

doc_count_error_upper_bound 필드는 최종 결과에서 제외된 unique 값의 가능한 최대 수를 나타낸다. 에러 개수를 추정하기 위해서 사용한다.

이 수는 정확하지 않을 수 있다. 집계를 하는 coordinating 노드는 각각의 샤드의 상위 unique terms에 대한 프롬프트를 나타냅니다.

size가 3인 시나리오를 예로 든다면,  terms 집계는 각 샤드에 상위 3개의 unique terms를 요청하고, coordinating 노드는 각각의 결과를 가지고 집계하고 최종 결과를 위해 계산한다.

만약 하나의 샤드에서 상위 3개가 아닌 다른 object를 가지고 있다면, 이것은 보여지지 않을 것이다. 특히 size값이 낮게 설정된다면 이런 상황이 나올 수 있다.

만약 높은 정확도를 원하지 않고, 성능을 우선시 한다면 size를 낮추는 게 맞을 수도 있다.

 

 

:: sampler, diversified_sampler

이후 https://opensearch.org/docs/latest/opensearch/bucket-agg/ 참조.

반응형

'OpenSearch (ElasticSearch)' 카테고리의 다른 글

[11] 쿼리 DSL (Domain-Specific Language)  (0) 2022.03.18
[10] 데이터 재인덱싱  (0) 2022.03.18
[8] 집계 - 메트릭 집계  (0) 2022.03.10
[7] 인덱스 템플릿  (0) 2022.03.02
[6] 데이터 스트림  (0) 2022.02.25