별도의 매핑을 지정하지 않았을 경우, 처음 인덱스를 생성하고 데이터를 입력하면 elasticsearch 가 자동으로 동적 매핑을 진행 → 동적 매핑의 경우 원하는대로 검색이 동작하지 않을 수도 있기 때문에 mapping 을 따로 지정해주는 것을 권장한다. (Explicit mapping)
동적 매핑 시 text 타입은 text 와 keyword 두 가지의 멀티 필드를 생성한다.멀티 필드를 지정할 경우, 필드 개수만큼 용량이 더 소모되므로 keyword 로만 관리할 필드는 keyword 필드, text 로만 관리할 필드는 text 필드로 하는 게 좋다.
인덱스 생성 시 커스터마이징 해서 지정해주는 매핑
데이터가 들어있을 경우 매핑 변경은 불가능하기 때문에 인덱스를 지우고 새로 mapping 을 해야한다.
PUT http://localhost:1111/haulla-account
// body
{
"mappings": {
"properties": {
"accountManagerId": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
...
"role": {
"type": "keyword", // 타입을 text -> keyword 로 변경
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
...
"vertical": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
새로 만든 role 타입이 keyword 로 mapping 된 것을 확인할 수 있다.