[ELASTICSEARCH] Dynamic templates

2025. 9. 10. 11:43Big Data

Dynamic templates란 es의 field mapping을 동적으로 mapping하는 걸 말한다. es에서 자동으로 field를 mapping 해 주는 동적 mapping과는 차이가 있다. 

아래의 예시를 보면 이해가 될 것이다. 아래는 index 생성 시 dynamic templates를 적용한 예시이다.

 

{
    "mappings" : {
        "dynamic_templates" : [{
            "my_field" : {
                "matching_mapping_type" : "string",
                "mapping" : { "type" : "keyword" }
            }
        }]
    }
}

 

위의 templates는 해당 index의 field 중 string type인 field 들에 대해 keyword로 mapping하도록 설정한 mapping table이다.

es에서 자동으로 type을 설정해 주는 것과는 성격이 약간 다르다.

 

그렇다면 내가 직적 field별 type을 정하지 않고, 이렇게 dynamic templates를 적용해야 하는 이유는 멀까?

내가 모든 데이터를 잘 알고 있다면 상관이 없지만, 만약 모든 데이터에 대해 잘 알지 못한다면, 그래서 어떤 데이터 유형이 유입될 지 알 수 없다면 위와 같이 dynamic templates를 사용함으로써 특정 type에 대해 mapping 값을 지정해 줄 수가 있다.

 

dynamic templates를 사용하기 위해서는 option 값이 중요한데 아래는 option 값의 종류를 설명하고 있다.

 

match_mapping_type 데이터 type이 일치한 경우 mapping field에 지정한 type으로 변경한다.
match field 명이 pattern과 일치할 경우 mapping field에 지정한 type으로 변경한다.
unmatch field 명이 pattern과 일치할 경우 mapping field에서 제외시킨다.
match_pattern match option에 정규식 등을 사용할 때 지정한다.
ex) match_pattern : regax
      match : "^profilt_\d+$"
path_match match와 비슷하지만 nested나 object field에 대해서 적용한다.
path_unmatch unmatch와 비슷하지만 nested나 object field에 대해서 적용한다.

 

출처 : https://shoppinghow.kakao.com/search/%EC%97%98%EB%9D%BC%EC%8A%A4%ED%8B%B1%20%EC%84%9C%EC%B9%98%20%EA%B0%9C%EB%B0%9C%EB%B6%80%ED%84%B0%20%EC%9A%B4%EC%98%81%EA%B9%8C%EC%A7%80/docid:V26588304018&srchhow:Cexpo&