Search

ES mapping

조회 방법

ES mapping은 사실상 RDB의 schema이다.
조회 방법은
GET $URI/$INDEX_NAME/_mapping
Shell
복사
을 사용하면 된다.
조회 결과 dynamic 이란 값과 dynamic_templates 란 결과가 나오는데 이 의미는 다음과 같다.

dynamic

정의되어 있지 않은 필드가 POST 될 경우 어떻게 할 것인가?
1.
true : 새로운 필드를 자동 감지해 매핑에 추가한다.
2.
false : 새로운 필드는 무시하고 색인하지 않는다.
3.
strict : 새로운 필드가 들어오면 에러를 발생시킨다.

dynamic_templates

만약 dynamic=true 로 되어 있어 자동 매핑이 일어날 경우, 어떤 필드를 어떤 타입으로 매핑할지 정할 수 있다.
패턴 기반으로 매핑 규칙 정의가 가능하다.
{ "dynamic_templates": [ { "meta_fields": { "path_match": "meta.*", "mapping": { "type": "text", "fields": { "keyword": { "type": "keyword" } } } } } ] }
JSON
복사
위 예시를 보면, 예를 들어 meta 로 시작하는 (meta.xxx 와 같이 nested 되어 있는 필드 포함) 필드는 text + keywrod 멀티 타입으로 매핑한다.

text 타입 vs keyword 타입

text 타입 : 자연어 검색 처리가 들어가는 유형
keyword 타입 : 흔히 생각하는 String, inverted file이 만들어지지 않는다.

멀티 필드란?

한 필드를 여러 type으로 색인하는 것. 색인이 이루어지는 type에 따라 사용가능한 query가 되기 때문에 멀티 필드를 써야 할 수 있다.
하지만, 문자열 + 숫자 조합은 불가. 사실상 text , kewyrod, tokenized keword 같이 문자열에 한해 멀티 필드를 설정할 수 있다.