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
        }
      ]
    }
  }
}

더 알아보기 (Learn more)