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 | 이 범위 안에 속하는 문서 수. |