elasticsearch

elasticsearch aggregation(aggs) paging 하기

천천히올라가자 2020. 5. 7. 22:49
반응형

엘라스틱서치 어그리게이션 페이징인 6버젼에서 나온 api이다

 

https://www.elastic.co/guide/en/elasticsearch/reference/6.1/search-aggregations-pipeline-bucket-sort-aggregation.html

 

Bucket Sort Aggregation | Elasticsearch Reference [6.1] | Elastic

The bucket_sort aggregation, like all pipeline aggregations, is executed after all other non-pipeline aggregations. This means the sorting only applies to whatever buckets are already returned from the parent aggregation. For example, if the parent aggrega

www.elastic.co

 

우리는 5 -> 7버젼으로 이동중에 있고 거의 대부분이 이전되었다

elasticsearch 5버젼 쓰면서 aggs 페이징 못해서 얼마나 힘들었는지 이번에 버전을 업하면서 사용하게 되어서 굉장히 기분이좋았다 그래서 별거 아니지만 어떻게 사용했는지 공유하고 싶어서 글 쓴다

 

{
  "size": 0,
  "_source": false,
  "aggregations": {
    "data": {
      "terms": {
        "field": "test",
        "min_doc_count": 1,
        "order": [
          {
            "_key": "asc"
          }
        ]
      },
      "aggs": {
        "data": {
          "terms": {
            "field": "test"
          },
          "aggs": {
            "paging": {
              "bucket_sort": {
                "from": 0,
                "size": 20
              }
            }
          }
        }
      }
    }
  }
}

aggs만 사용하기 때문에 size는 0처리 하였고 _source도 가져올 필요가 없기때문에 false처리했다

그 하단 부분이 중요한데 aggregations이나 aggs나 같은 표현이니 무시하길 바란다 

 

field test라는놈으로 집합처리를 하고 최소 1개이상인 것을 오름 차순 정렬을 한다 _key는 test 컬럼의 값이 되며 그것을 오름차순 정렬하라

는 의미이다 그 하위 aggs는 상위 그룹핑 한 값을 말 그대로 paging 처리하는 것이다

구지 sql로 따지자면

 

mysql dual은 없지만 그냥 썻다

select a.test from (select test from dual group by test order by test) as a group by a.test limit 0, 20

 

 

 

반응형