null_value 매핑 파라미터
null_value 매핑 파라미터
null_value 매핑 파라미터는 인덱싱 중에 명시적인 null 값을 미리 정의된 대체 값으로 바꿔줘요. 기본적으로 필드가 null로 설정되면 해당 필드는 인덱스되지 않아 검색할 수 없어요. null_value를 정의하면 문서의 _source를 수정하지 않고도 지정한 대체 값이 대신 인덱스되어, 원래 null이었던 필드를 가진 문서를 쿼리하거나 집계할 수 있게 돼요.
null_value는 적용되는 필드와 동일한 타입이어야 해요. 예를 들어 date 필드는 true 같은 boolean 값을 null_value로 사용할 수 없고, 유효한 날짜 문자열이어야 해요.
출처: 문서
본문
필드에 null_value 설정하기
다음 요청은 products 인덱스를 생성해요. category 필드는 keyword 타입이며 인덱싱 중에 null 값을 "unknown"으로 대체해요:
PUT /products
{
"mappings": {
"properties": {
"category": {
"type": "keyword",
"null_value": "unknown"
}
}
}
}
null 값을 가진 문서 인덱싱하기
category 필드가 null로 설정된 문서를 인덱스하려면 다음 명령을 사용해요:
PUT /products/_doc/1
{
"category": null
}
null 대체 값 쿼리하기
이전에 null이었던 category 필드를 가진 문서를 검색하려면 다음 명령을 사용해요:
POST /products/_search
{
"query": {
"term": {
"category": "unknown"
}
}
}
응답에는 매칭된 문서가 포함돼요:
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "products",
"_id": "1",
"_score": 0.2876821,
"_source": {
"category": null
}
}
]
}
}
null 대체 값으로 집계하기
null 대체 값도 인덱스되기 때문에 집계에도 나타나요. category 필드에 대해 terms 집계를 수행하려면 다음 명령을 사용해요:
POST /products/_search
{
"size": 0,
"aggs": {
"category_count": {
"terms": {
"field": "category"
}
}
}
}
응답에는 집계된 결과가 담겨요:
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"category_count": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "unknown",
"doc_count": 1
}
]
}
}
}