이번에 생긴 문제는.. ES에 aggrgation 를 사용하여 아래 쿼리처럼 날렸을 때, 분명히 A필드에 a라는 값이 존재함에도 불구하고 count 가 0 으로 나오는 것이였다.
{
"result_A": {
"nested": {
"path": "A"
},
"aggs": {
"result_A_name": {
"terms": {
"field": "A.name"
},
"aggs": {
"result_A_value": {
"terms": {
"field": "A.value"
}
}
}
}
}
}
}
agg 쿼리는 내가 짠 게 아니라서 공식문서를 한참 읽었는데, 처음에는 뭔소리인가 하다가 여러번 읽으니 이해가 됐다. 정확한 원인은은 아래 공식 사이트 문서에서 참고 했다.
해당 문서에 따르면, 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"
}
}
}
}
}
}
}