개요

기본적으로 ES를 사용할때 상용(production) 환경을 고려한다면 맵핑(mapping)을 동적 맵핑 보다 명시하는 것이 직관적이고 정확하다고 생각한다.

그러나 요건에 의해 일부 필드의 경우 명시한 맵핑 이외에 동적으로 생성해 넣어야 할일이 생겼다.

이때 동적 맵핑을 부득이하게 사용해야 하는데 색인 저장여부, 필드 데이터 사용 여부 등의 맵핑 옵션을 최적화 하지 않는것이 영 찜찜하여 동적 맵핑을 일괄적으로 옵션을 명시할 수 있는 방법을 찾아보았다.

검색결과 dynamic templates를 이용하면 맵핑을 매칭하여 일괄 옵션을 일괄 적용할 수 있다.

사용법

아래의 예제는 integer타입으로 동적 맵핑을 ES가 인식한 경우 아래의 맵핑 옵션을 사용하게끔 정의 한다.

integer의 경우

PUT 인덱스명
{
  "mappings": {
    "타입명": {
      "dynamic_templates": [
        {
          "integers": {
            "match_mapping_type": "integer",
            "mapping": {
              "type" : "integer", "store" : "no", "index" : true, "fielddata": false, "doc_values": false, "norms": false
            }
          }
        }
      ]
    }
  }
}

참고자료

https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-templates.html