Multi-terms 집계
Multi-terms 집계
multi_terms 집계는 여러 필드의 값 조합을 기반으로 버킷을 만들어요. 각 버킷은 고유한 복합 키를 나타내며, 문서는 지정된 모든 term 값을 동시에 일치시켜 그룹화돼요. 문서 수 또는 메트릭 하위 집계로 정렬했을 때 최상위 조합을 찾아야 할 때 유용해요.
multi_terms 집계는 여러 필드에 걸쳐 복합 키를 구성하므로 단일 terms 집계보다 더 많은 메모리를 소비해요.
출처: 문서
본문
파라미터 (Parameters)
multi_terms 집계는 다음 파라미터를 받아요.
| 파라미터 | 필수/선택 | 데이터 타입 | 설명 |
|---|---|---|---|
| terms | 필수 | Array | term 정의 목록. 각 항목은 field를 요구하며(선택적으로 필드가 없는 문서를 처리하기 위한 missing 포함), 선택적으로 집계 이름을 지정할 수 있어요. |
| size | 선택 | Integer | 반환할 복합 버킷 수. 기본값은 10이에요. |
| shard_size | 선택 | Integer | 각 샤드에서 수집되는 후보 버킷 수. 값이 높을수록 정확도가 향상되지만 메모리를 더 소비해요. size보다 크거나 같아야 해요. 기본값은 정확도를 높이기 위해 size보다 큽니다. |
| min_doc_count | 선택 | Integer | 버킷이 응답에 나타나는 데 필요한 최소 문서 수. 기본값은 1이에요. |
| order | 선택 | Object | 버킷의 정렬 방식을 제어해요. _count, _key 또는 하위 집계 메트릭의 이름을 받아요. 기본값은 {"_count": "desc"}예요. |
| show_term_doc_count_error | 선택 | Boolean | true면 각 term의 문서 수에 대한 오차 추정치를 포함해요. 기본값은 false예요. |
예제: 여러 필드로 그룹화 (Grouping by multiple fields)
다음 예제는 customer_gender와 category를 동시에 그룹화해 각 성별의 가장 인기 있는 제품 카테고리를 식별해요. 이 쿼리는 주문이 가장 많은 성별-카테고리 쌍을 드러내요:
GET /opensearch_dashboards_sample_data_ecommerce/_search
{
"size": 0,
"aggs": {
"gender_category": {
"multi_terms": {
"terms": [
{ "field": "customer_gender" },
{ "field": "category.keyword" }
],
"size": 5
}
}
}
}
응답은 문서 수 내림차순으로 정렬된 복합 키 버킷을 포함해요:
{
...
"aggregations": {
"gender_category": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 756,
"buckets": [
{
"key": [
"MALE",
"Men's Clothing"
],
"key_as_string": "MALE|Men's Clothing",
"doc_count": 1963
},
{
"key": [
"FEMALE",
"Women's Clothing"
],
"key_as_string": "FEMALE|Women's Clothing",
"doc_count": 1903
},
{
"key": [
"FEMALE",
"Women's Shoes"
],
"key_as_string": "FEMALE|Women's Shoes",
"doc_count": 1136
},
{
"key": [
"MALE",
"Men's Shoes"
],
"key_as_string": "MALE|Men's Shoes",
"doc_count": 921
},
{
"key": [
"FEMALE",
"Women's Accessories"
],
"key_as_string": "FEMALE|Women's Accessories",
"doc_count": 730
}
]
}
}
}
예제: 하위 집계 메트릭으로 정렬 (Ordering by a subaggregation metric)
다음 예제는 평균 주문 금액이 가장 높은 성별-카테고리 조합을 찾아요:
GET /opensearch_dashboards_sample_data_ecommerce/_search
{
"size": 0,
"aggs": {
"gender_category": {
"multi_terms": {
"terms": [
{ "field": "customer_gender" },
{ "field": "category.keyword" }
],
"size": 3,
"order": { "avg_price": "desc" }
},
"aggs": {
"avg_price": {
"avg": { "field": "taxful_total_price" }
}
}
}
}
}
응답은 문서 수가 아닌 avg_price 하위 집계를 기준으로 버킷을 순위 매겨요:
{
...
"aggregations": {
"gender_category": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 5252,
"buckets": [
{
"key": [
"MALE",
"Women's Accessories"
],
"key_as_string": "MALE|Women's Accessories",
"doc_count": 100,
"avg_price": {
"value": 101.21328125
}
},
{
"key": [
"MALE",
"Men's Shoes"
],
"key_as_string": "MALE|Men's Shoes",
"doc_count": 921,
"avg_price": {
"value": 97.41267983170466
}
},
{
"key": [
"FEMALE",
"Women's Shoes"
],
"key_as_string": "FEMALE|Women's Shoes",
"doc_count": 1136,
"avg_price": {
"value": 92.8513836927817
}
}
]
}
}
}
응답 본문 필드 (Response body fields)
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| doc_count_error_upper_bound | Integer | 응답에 포함되지 않은 버킷의 문서 수에 대한 최대 잠재 오차. |
| sum_other_doc_count | Integer | 상위 size 결과에 들어가지 못한 모든 버킷의 총 문서 수. |
| buckets | Array | order에 따라 정렬된 복합 키 버킷. |
| buckets.key | Array | terms 목록과 같은 순서로 이 버킷의 복합 키를 나타내는 값의 배열. |
| buckets.key_as_string | String | 파이프로 구분된 문자열로 형식이 지정된 복합 키. |
| buckets.doc_count | Integer | 이 키 조합과 일치하는 문서 수. |