Range 집계

Range 집계

range 집계는 사용자가 정의한 값 범위를 기반으로 문서를 버킷으로 그룹화해요. 각 버킷은 지정된 from(포함)과 to(제외) 경계 안에 필드 값이 속하는 문서를 포착해요. 균일한 간격을 자동으로 생성하는 histogram 집계와 달리, range는 임의의 비균일 경계를 정의할 수 있게 해줘요.

출처: 문서

본문

파라미터 (Parameters)

range 집계는 다음 파라미터를 받아요.

파라미터 필수/선택 데이터 타입 설명
field 선택 String 집계할 숫자 필드. field 또는 script 중 하나는 필수예요.
script 선택 Object 집계할 값을 생성하는 스크립트. field 또는 script 중 하나는 필수예요. field와 함께 사용하면 스크립트는 값 스크립트로 동작하며 필드 값을 _value로 받아요.
ranges 필수 Array 범위 경계 목록. 각 항목은 from, to, 그리고 선택적으로 key를 포함할 수 있어요.
keyed 선택 Boolean true면 버킷을 배열 대신 범위 이름으로 키가 지정된 객체로 반환해요. 기본값은 false예요.
missing 선택 Number 대상 필드가 없는 문서에 사용할 값. 기본적으로 누락된 문서는 무시돼요.

예제: 하위 집계가 있는 커스텀 이름 가격 등급 (Custom-named price tiers with subaggregation)

다음 예제는 전자상거래 주문을 세 가지 가격 등급으로 세분화하고 각 등급 내 평균 주문 금액을 계산해요:

GET /opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "price_tiers": {
      "range": {
        "field": "taxful_total_price",
        "keyed": true,
        "ranges": [
          { "key": "budget", "to": 50 },
          { "key": "mid_range", "from": 50, "to": 100 },
          { "key": "premium", "from": 100 }
        ]
      },
      "aggs": {
        "avg_price": {
          "avg": { "field": "taxful_total_price" }
        }
      }
    }
  }
}

응답은 주문을 평균 가격과 함께 레이블이 지정된 등급으로 그룹화해요:

{
  ...
  "aggregations": {
    "price_tiers": {
      "buckets": {
        "budget": {
          "to": 50.0,
          "doc_count": 1633,
          "avg_price": {
            "value": 38.363175998928355
          }
        },
        "mid_range": {
          "from": 50.0,
          "to": 100.0,
          "doc_count": 2036,
          "avg_price": {
            "value": 72.34457883104126
          }
        },
        "premium": {
          "from": 100.0,
          "doc_count": 1006,
          "avg_price": {
            "value": 140.10288270377734
          }
        }
      }
    }
  }
}

예제: 스크립트 사용 (Using a script)

field 대신 스크립트를 사용해 즉시(on the fly) 값을 계산할 수 있어요. 다음 예제는 버킷팅 전에 가격에 10% 마크업을 적용해요:

GET /opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "marked_up_tiers": {
      "range": {
        "script": {
          "source": "doc['taxful_total_price'].value * 1.1"
        },
        "ranges": [
          { "to": 55 },
          { "from": 55, "to": 110 },
          { "from": 110 }
        ]
      }
    }
  }
}

예제: 값 스크립트로 필드 값 변환 (Transforming field values with a value script)

field와 script를 모두 지정하면 스크립트는 각 필드 값을 _value 변수로 받아요. 다음 예제는 어떤 범위에 속하는지 평가하기 전에 USD 가격을 유로(환율 0.92)로 변환해요:

GET /opensearch_dashboards_sample_data_ecommerce/_search
{
  "size": 0,
  "aggs": {
    "price_in_euros": {
      "range": {
        "field": "taxful_total_price",
        "script": {
          "source": "_value * 0.92"
        },
        "ranges": [
          { "to": 46 },
          { "from": 46, "to": 92 },
          { "from": 92 }
        ]
      }
    }
  }
}

응답 본문 필드 (Response body fields)

필드 데이터 타입 설명
buckets Array 또는 Object range 버킷. 기본적으로 배열로, keyed가 true면 객체로 반환돼요.
buckets.key String 자동 생성된 범위 레이블(예: *-50.0 또는 50.0-100.0), 또는 지정된 커스텀 키.
buckets.from Double 범위의 하한(포함). 하한이 없는 열린 범위에서는 생략돼요.
buckets.to Double 범위의 상한(제외). 상한이 없는 열린 범위에서는 생략돼요.
buckets.doc_count Integer 이 범위 안에 속하는 문서 수.

더 알아보기 (Learn more)