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 이 키 조합과 일치하는 문서 수.

더 알아보기 (Learn more)