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"을 정수 필드에 저장할 수 없으므로 거부됩니다.