Coerce 매핑 파라미터

Coerce 매핑 파라미터

coerce 매핑 파라미터는 인덱싱 중 OpenSearch가 값을 정규화해 필드의 데이터 타입과 일치하도록 변환할지 여부를 제어해요. 예를 들어 문자열 "10"을 숫자 10으로, 부동 소수점 10.0을 정수 10으로 변환할 수 있어요.

출처: 문서

본문

coerce 매핑 파라미터는 인덱싱 중 OpenSearch가 값을 정규화하고 변환해 필드의 데이터 타입과 일치하도록 할지 여부를 제어합니다.

데이터가 항상 일관적인 것은 아닙니다. 데이터가 어떻게 생성되는지에 따라 숫자가 실제 JSON 숫자(예: 10)로 렌더링될 수도 있지만, 문자열(예: "10")로 렌더링될 수도 있습니다. 마찬가지로 정수여야 하는 숫자가 부동 소수점(예: 10.0)이나 심지어 문자열(예: "10.0")로 렌더링될 수도 있습니다.

Coercion(강제 변환)은 이러한 불일치를 변환해 필드의 데이터 타입에 맞추려고 시도합니다.

  • 문자열은 숫자로 강제 변환됩니다. "10"은 10이 됩니다.
  • 부동 소수점 숫자는 잘라내기를 통해 정수로 강제 변환됩니다. 10.0은 10이 됩니다.

coerce 파라미터는 Update Mapping API를 사용해 기존 필드에서 갱신할 수 있습니다.

예제

다음 예제들은 coerce 매핑 파라미터를 사용하는 방법을 보여 줍니다.

필드 수준 강제 변환

비교를 위해 서로 다른 coerce 설정으로 인덱스를 만듭니다. Coercion은 기본적으로 활성화되어 있습니다.

PUT /data_quality_demo
{
  "mappings": {
    "properties": {
      "price_with_coercion": {
        "type": "integer"
      },
      "price_without_coercion": {
        "type": "integer",
        "coerce": false
      }
    }
  }
}

Coercion이 활성화된 문서를 인덱싱합니다.

PUT /data_quality_demo/_doc/1
{
  "price_with_coercion": "10"
}

정수 필드 타입과 일치시키기 위해 문자열 "10"이 정수 10으로 성공적으로 변환됩니다.

Coercion이 비활성화된 문서를 인덱싱하려고 시도합니다.

PUT /data_quality_demo/_doc/2
{
  "price_without_coercion": "10"
}

이 문서는 coercion이 비활성화되어 있고 문자열 "10"이 기대되는 정수 타입과 일치하지 않으므로 거부됩니다.

인덱스 수준 coerce 설정

전체 인덱스에 대한 기본 coercion 정책을 다음과 같이 설정할 수 있습니다.

PUT /strict_data_index
{
  "settings": {
    "index.mapping.coerce": false
  },
  "mappings": {
    "properties": {
      "flexible_field": {
        "type": "integer",
        "coerce": true
      },
      "strict_field": {
        "type": "integer"
      }
    }
  }
}

flexible_field를 포함하는 문서를 인덱싱합니다.

PUT /strict_data_index/_doc/1
{
  "flexible_field": "10"
}

flexible_field는 인덱스 수준 설정을 재정의하고 coercion을 활성화하므로 문자열 "10"이 정수 10으로 성공적으로 변환됩니다.

strict_field를 포함하는 다른 문서를 인덱싱합니다.

PUT /strict_data_index/_doc/2
{
  "strict_field": "10"
}

이 문서는 strict_field가 인덱스 수준 coerce 설정(false)을 상속하고, coercion 없이는 문자열 "10"을 정수 필드에 저장할 수 없으므로 거부됩니다.

더 알아보기 (Learn more)