ElasticSearch에서의 집계 API 란 데이터를 원하는 조건대로 집계를 할수 있도록 해주는 API입니다.
전에 집계를 위해 전에 사용하였던 영화데이터에 장르가 다르가 몇개더 추가하였습니다.
regGenreNm을 통해 장르별 Document갯수를 통계내보도록 하겠습니다.
POST /movie/_search?size=0
{
"aggs": {
"genre": {
"terms": {
"field": "regGenreNm",
"size": 10
}
}
}
}
// 실행 결과
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"genre" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "판타지",
"doc_count" : 2
},
{
"key" : "전쟁",
"doc_count" : 1
}
]
}
}
}
저같은 경우는 movie 인덱스에 총 3개의 데이터가 들어가있습니다. 판타지 장르의 영화 2편, 전쟁영화 1편이 있었습니다.
간단하게 집계쿼리를 작성할 수 있었습니다. 엘라스틱서치의 집계가 강력한 이유는 버킷안에 다른 버킷의 결과를 추가할 수 있다는 점입니다. 이말은 즉 여러개의 집계 쿼리를 조합하는것이 가능하다는 이야기 입니다.
POST /movie/_search?size=0
{
"aggs": {
"genre": {
"terms": {
"field": "regGenreNm",
"size": 10
},
"aggs": {
"nation": {
"terms": {
"field": "prdtYear",
"size": 10
}
}
}
}
}
}
위의 쿼리는 장르별로 집계를낸다음 그 안에서 년도별로 다시한번 집계를 날리는 쿼리입니다.
집계 기능은 서로 조합해 사용가능하며 조합하면 매우 강력한 기능을 제공할 수 있습니다.
책을보고 간단하게 구현은 해봤으나 이번에 토이프로젝트를 진행하면서 사용해보고 다시한번 정리해서 올리도록 하겠습니다.