일반적으로 인덱스를 생성할 때 맵핑 정보를 지정하고 사용하다 보면, 불편한 점이 있다.
이런 식으로 인덱스가 생성되었다고 할 때,
저기에 입력된 4개의 맵핑 정보를 제외하고 실수로 다른 정보를 입력하면
위에 보이는 user_addr처럼 저런 형식의 맵핑 정보가 생성된다.
저렇게 되면 search가 6.x.x 버전에선 안되던 걸로 기억하는데 7.x.x 버전에선 검색이 되긴 했다.
하지만 저런 식으로 지정되지 않은 맵핑 정보가 추가되면 해당 필드로는 어그리게이션이 안된다.
그래서 뒤늦게 맵핑 정보를 추가하려고 해도 이미 저렇게 생성이 되어버리면 인덱스를 다시 만들어야 한다. (이게 가장 큰 문제)
index_template이라도 있으면 인덱스 템플릿을 수정하고 리인덱스를 하면 되지만,
없다면 인덱스를 지우고 새로 만들어야 하는 불편함이 있다.
그래서 지정된 맵핑 정보를 제외하고 정보가 입력되는 걸 방지하고자
"dynamic":"strict" 옵션을 줄 수도 있다.
그래서 사용 용도에 따라 편리할 수도 있는 dynamic_templates가 있다.
index_template이나 인덱스를 만들 때 mappings 안에 properties는 일반적인 맵핑 정보 부분이고 dynamic_templates를 보면 된다.
field_count, field_boolean, field_dt는 매핑시킬 패턴 지정과 거기에 맞는 필드 타입을 지정해 줬다.
그리고 _string은 위 3개에 일치하지 않는 string 형식의 데이터가 들어오면 keyword 타입으로 생성하게 해줬다.
저걸이용해서
이렇게 데이터를 등록하고 맵핑 정보를 확인해보면
dynamic_templates에 설정된 값을 토대로 맵핑 정보가 생성된 걸 확인할 수 있다.
편리할 수도 있지만 또 잘못하면 무분별 한 맵핑 정보가 들어갈 수도 있다.
상황에 맞춰 dynamic : strict를 사용하거나 dynamic_template을 사용하거나 선택을 해야 한다.
'ElasticSearch' 카테고리의 다른 글
[ElasticSearch] dynamic strict 옵션 (0) | 2022.05.15 |
---|---|
[ElasticSearch] _bulk 중 action_request_validation_exception 에러 (0) | 2021.10.07 |
[ElasticSearch] search_after 사용하기 (0) | 2021.03.30 |
[ElasticSearch] ip type과, ip_range type 필드 (0) | 2021.01.28 |
[ElasticSearch] exists로 필드 존재 여부 판단하기 (0) | 2021.01.28 |