-
[Elasticsearch] Mapping시 유의사항(dynamic mapping, _all field, text, keyword)Elasticsearch 2020. 8. 11. 20:52
한 번 설정된 mapping의 type은 변경할 수 없음!
(예를 들어, text→keyword 변경 불가)
다음의 내용을 충분히 고려해야함
- 문자열을 전문 검색에 이용할 것인가
- 날짜 필드를 가지는 필드는 무엇인가
- 매핑에 정의되지 않고 유입되는 필드는 어떻게 처리할 것인가
1. dynamic mapping 사용 자제
- ES는 기본적으로 schemaless이기 때문에, 매핑 정보가 없어도 알아서 적절한 매핑을 생성해줌
- 자동으로 생성된 매핑 이후, 다른 타입의 데이터가 들어온다면 색인되지 않음
- dynamic mapping 기능을 명시적으로 해제해 주어야 함
PUT /account_log
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"_doc":{
"_all": {"enabled": false},
"dynamic" : "strict", // Dynamic Mapping 기능 해제
"properties": {
"timestamp": {"type" : "date",
"format" : "yyyy-MM-dd HH:mm:ss"
},
"level": {"type" : "keyword"},
"message": {"type" : "text"},
"service": {"type" : "keyword"},
"hostname": {"type" : "keyword"},
"remote_ip": {"type" : "keyword"},
"rule_id" : {"type" : "long"}
}
}
}
}
2. 전문 검색(Full Search) 대상이 아닌 문자열 필드는 keyword type 명시적으로 지정
- text type으로 지정할 경우, 전문 검색이 가능한 필드로 지정되어 형태소 단위로 분석(Analyze)해 역색인(Inverted Index) 구조로 저장하기 때문에 검색과 저장에 소모되는 비용이 커짐
- dynamic mapping 사용 시, 문자열 필드의 경우 text type, keyword type의 2가지 타입을 동시에 가지는 멀티 타입 필드로 생성됨.
3. _all field 사용 자제
- 필드 이름을 지정하지 않고 검색할 때 사용되는 필드
- 도큐먼트의 모든 필드의 value를 하나로 합쳐서 가지고 있는 필드
- _all field는 text type으로 간주되어 색인 시 analyze 대상이 되므로 색인 속도가 느려짐
- 세그먼트에 저장되지는 않지만 힙 영역에 올라가는 데이터
- 6.0부터 deprecated (가급적 안쓰는게 좋음)
- _all field를 5버전 이하에서 사용한다면 disable 권고
PUT /account_log
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"_doc":{
"_all": {"enabled": false}, // all field 사용 해제
"dynamic" : "strict",
"properties": {
"timestamp": {"type" : "date",
"format" : "yyyy-MM-dd HH:mm:ss"
},
"level": {"type" : "keyword"},
"message": {"type" : "text"},
"service": {"type" : "keyword"},
"hostname": {"type" : "keyword"},
"remote_ip": {"type" : "keyword"},
"rule_id" : {"type" : "long"}
}
}
}
}
'Elasticsearch' 카테고리의 다른 글
[Elasticsearch] query, aggregation size 변경 (0) 2020.08.11 [Elasticsearch] indexAsync 사용 시 2번째 파라미터 찾을 수 없는 문제 (0) 2020.08.11 [Elasticsearch] Java Rest Client 사용 시 버전 충돌 문제 (0) 2020.08.11 [Elasticsearch] 색인 속도 향상 방법(asyncIndex, bulk index api, refresh interval) (0) 2020.08.11