합계 집계

합계 집계 (Sum aggregation)

sum 집계는 일치하는 모든 문서에 걸쳐 필드에서 추출된 숫자 값들의 총합을 계산하는 단일 값(single-value) 메트릭 집계예요. 이 집계는 수익, 수량, 기간 같은 지표의 합계를 계산하는 데 흔히 사용돼요.

출처: 문서

본문

파라미터

sum 집계는 다음과 같은 파라미터를 받아요.

파라미터 데이터 타입 설명
field String 집계할 필드예요. 숫자 필드여야 해요.
script Object 집계할 사용자 지정 값을 계산하는 데 사용하는 스크립트예요. field 대신 또는 field와 함께 사용할 수 있어요.
missing Number 대상 필드가 없는 문서에 사용할 기본값이에요.

예제

다음 예제는 물류 인덱스에 기록된 배송물의 총 무게를 계산하는 방법을 보여줘요.

인덱스를 생성해요:

PUT /deliveries
{
  "mappings": {
    "properties": {
      "shipment_id": { "type": "keyword" },
      "weight_kg": { "type": "double" }
    }
  }
}

샘플 문서를 추가해요:

POST /deliveries/_bulk?refresh=true
{"index": {}}
{"shipment_id": "S001", "weight_kg": 12.5}
{"index": {}}
{"shipment_id": "S002", "weight_kg": 7.8}
{"index": {}}
{"shipment_id": "S003", "weight_kg": 15.0}
{"index": {}}
{"shipment_id": "S004", "weight_kg": 10.3}

다음 요청은 deliveries 인덱스의 모든 문서에 걸친 총 무게를 계산하고, size를 0으로 설정해 문서 히트를 생략하며, weight_kg의 총합을 반환해요:

GET /deliveries/_search
{
  "size": 0,
  "aggs": {
    "total_weight": {
      "sum": {
        "field": "weight_kg"
      }
    }
  }
}

응답에는 12.5 + 7.8 + 15.0 + 10.3의 합에 해당하는 값 45.6이 포함돼요:

{
  ...
  "hits": {
    "total": {
      "value": 4,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "total_weight": {
      "value": 45.6
    }
  }
}

스크립트를 사용해 값 계산하기 (Using a script to compute values)

필드를 직접 지정하는 대신 집계 값을 계산할 스크립트를 제공할 수 있어요. 값이 파생되거나 조정되어야 할 때 유용해요.

다음 예제에서는 스크립트를 사용해 합산하기 전에 각 무게를 킬로그램에서 그램으로 변환해요:

GET /deliveries/_search
{
  "size": 0,
  "aggs": {
    "total_weight_grams": {
      "sum": {
        "script": {
          "source": "doc['weight_kg'].value * 1000"
        }
      }
    }
  }
}

응답에는 45600이라는 total_weight_grams 값이 포함돼요:

{
  ...
  "hits": {
    "total": {
      "value": 4,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "total_weight_grams": {
      "value": 45600
    }
  }
}

필드를 값 스크립트와 결합하기 (Combining a field with a value script)

필드와 스크립트를 함께 지정하고, 특별한 변수 _value를 사용해 필드의 값을 참조할 수도 있어요. 기존 필드 값에 변환을 적용할 때 유용해요.

다음 예제는 합산하기 전에 모든 무게를 10% 증가시켜요:

GET /deliveries/_search
{
  "size": 0,
  "aggs": {
    "adjusted_weight": {
      "sum": {
        "field": "weight_kg",
        "script": {
          "source": "Math.round(_value * 110) / 100.0"
        }
      }
    }
  }
}

응답은 원래 총 무게에 10% 증가가 적용된 값을 반영해요:

{
  ...
  "hits": {
    "total": {
      "value": 4,
      "relation": "eq"
    },
    "max_score": null,
    "hits": []
  },
  "aggregations": {
    "adjusted_weight": {
      "value": 50.16
    }
  }
}

누락 값 처리 (Missing values)

대상 필드가 없는 문서는 기본적으로 무시돼요. 기본값을 사용해 해당 문서를 포함하려면 missing 파라미터를 사용해요.

다음 예제는 누락된 weight_kg 필드에 기본값 0을 할당해요. 이렇게 하면 이 필드가 없는 문서도 weight_kg가 0으로 설정된 것으로 간주되어 집계에 포함돼요.

GET /deliveries/_search
{
  "size": 0,
  "aggs": {
    "total_weight_with_missing": {
      "sum": {
        "field": "weight_kg",
        "missing": 0
      }
    }
  }
}

더 알아보기 (Learn more)