ES aggregation시 모든 카운트 세팅해주지 않음

개발새발·2023년 2월 12일
0

elasticsearch

목록 보기
44/54

이번에 생긴 문제는.. ES에 aggrgation 를 사용하여 아래 쿼리처럼 날렸을 때, 분명히 A필드에 a라는 값이 존재함에도 불구하고 count 가 0 으로 나오는 것이였다.

문제의 agg 쿼리

{
  "result_A": {
    "nested": {
      "path": "A"
    },
    "aggs": {
      "result_A_name": {
        "terms": {
          "field": "A.name"
        },
        "aggs": {
          "result_A_value": {
            "terms": {
              "field": "A.value"
            }
          }
        }
      }
    }
  }
}

원인

agg 쿼리는 내가 짠 게 아니라서 공식문서를 한참 읽었는데, 처음에는 뭔소리인가 하다가 여러번 읽으니 이해가 됐다. 정확한 원인은은 아래 공식 사이트 문서에서 참고 했다.

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#search-aggregations-bucket-terms-aggregation-size

해당 문서에 따르면, By default, the terms aggregation returns the top ten terms with the most documents. 라는 글이 있다. 즉, aggregation은 default 로 상위 10위(count가 많은 순)의 결과만 보여준다. A필드의 상위 10위안에 a라는 값이 없어서 해당 값에 대한 count가 없었던 것이였다.


해결

그렇다면 a라는 값을 보여주기 위해서는 어떻게 해야할까? 아래와 같이 size 를 증가시켜서 쿼리문을 수정해주면 된다.

  {
  "result_A": {
    "nested": {
      "path": "A"
    },
    "aggs": {
      "result_A_name": {
        "terms": {
          "size": 1000,
          "field": "A.name"
        },
        "aggs": {
          "result_A_value": {
            "terms": {
              "size": 1000,
              "field": "A.value"
            }
          }
        }
      }
    }
  }
}
profile
발새발개

0개의 댓글