Aggregation Sorting

sooknow·2026년 2월 19일

order 객체 내부에 “무엇을 기준으로”:”어떻게 정렬할 것인지”를 작성한다.

무엇을 기준으로

  • 내장된 기준 (meta data)
    • _count : 각 버킷에 담긴 문서의 갯수
    • _key : 각 버킷의 이름(알파벳, 숫자 크기 순, 날짜순)
    • → 추가적인 연산이 없어서 성능이 매우 빠르다.
      GET web_traffic/_search
      {
        "size": 0,
        "aggs": {
          "no_status_code": {
            "terms": {
              "field": "http.response.status_code",
              "order": {
                "_key": "asc" // 상태코드 숫자 값을 기준으로 오름차순 정렬
              }
            }
          }
        }
      }
  • 하위 집계의 결과값(sub-aggregation)
    • 먼저 하위집계들의 값을 계산한뒤, 그 결과수치를 가지고 부모 버킷들의 순서를 정한다.

      "aggs": {
        "group_by_category": {
          "terms": {
            "field": "category.keyword",
            "order": { "avg_price": "desc" } // 하위 집계인 avg_price 결과로 정렬
          },
          "aggs": {
            "avg_price": { "avg": { "field": "price" } }
          }
        }
      }

📌주의할 점

  • 만약 percentiles, stats 처럼 결과값이 여러개인 집계를 정렬의 기준으로 사용하게 될 경우, 이름 뒤에 구체적인 지표를 적어줘야 함.
GET web_traffic/_search
{
  "size":  0,
  "aggs": {
    "group_by_res_code": {
      "terms": {
        "field": "http.response.status_code",
        "order": {
          "each_runtime.50": "asc"
        }
      },
      "aggs": {
          "each_runtime": {
            "percentiles": {
              "field": "runtime_ms",
              "percents": [
                50
              ]
            }
          }
        }
    }
  }
}
profile
keep on pushing

0개의 댓글