ElasticSearch 집계 API

윤들윤들·2021년 2월 21일
0
post-thumbnail

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
          }
        }
      }
    }
  }
}

위의 쿼리는 장르별로 집계를낸다음 그 안에서 년도별로 다시한번 집계를 날리는 쿼리입니다.

집계 기능은 서로 조합해 사용가능하며 조합하면 매우 강력한 기능을 제공할 수 있습니다.

책을보고 간단하게 구현은 해봤으나 이번에 토이프로젝트를 진행하면서 사용해보고 다시한번 정리해서 올리도록 하겠습니다.

profile
Front&BaackEnd를 재미있게 공부하고싶은 개발자 YundleYundle

0개의 댓글