욱'S 노트

Elasticsearch - Mapping 본문

Programming/Elasticsearch

Elasticsearch - Mapping

devsun 2015. 5. 28. 17:42

매핑은 검색 엔진에게 어떻게 도큐먼트들이 매핑될 수 있는지를 정의하는 단계이다. 필드가 검색 대상이 되는지 어떻게 토큰나이즈 되는지 등이 예이다. 엘라스틱 서치에서는 인덱스는 다른 매핑 타입의 도큐먼트들을 저장할 수 있다. 엘라스틱 서치는 각 매핑 타입을 위한 1:N 매핑을 적용할 수 있다.


명시적인 매핑은 index/type 레벨에서 정의된다. 기본적으로 명시적인 매핑을 정의할 필요는 없다. 새로운 타입이나 새로운 필드가 소개될때 퍼포먼스 저하 없이 자동으로 새성되고 등록되기 때문이다. 기본값이 오버라이드 될 필요가 있을때에만 매핑 정의는 제공되어야만 한다.


Mapping types


매핑 타입은 하나의 인덱스내에 도큐먼트들을 논리적인 그룹으로 분리하는 방법이다. 데이터베이스의 테이블로 생각하면 유사하다. 타입간은 분리는 완전한 분리를 의미하는 것은 아니다. (같은 Lucene 인덱스내에 모든 도큐먼트들이 저장되기 때문이다.)


같은 이름의 필드 명은 같은 타입과 같은 매핑 특성을 가지기 때문에 주로 추천되는 타입이다.  my_type.my_field와 같은 타입 접두사를 이용해 필드를 명시적으로 선택하지만 이것은 완벽하지 않다. 필드의 faceting과 같은 영역이 지정되었을때 절대 수행되지 않을 것이다.


Mapping API


매핑을 생성하기 위해 Put Mapping API를 사용할 필요가 있다. 또는 인덱스를 생성할때 다양한 매핑을 추가할 수 있다.


Global Settings


index.mapping.ignore_malformed 글로벌 세팅은 모든 매핑 타입에서 malformed 컨텐츠를 무시하기 위한 인덱스 레벨을 세팅할 수 있다. (malformed 컨텐츠의 예는 텍스트 문자열 값을 숫자 타입으로 인덱스 하는 것이다.)


index.mapping.coerce 글로벌 세팅은 모든 타입에 숫자 타입 컨텐츠로 지정하기 위한 인덱스 레벨이다. 기본 세팅은 true이고 숫자로 구성된 문자열은 숫자 타입으로 지정할려고 시도할 것 이다. 변환에 실패하면 값은 malformed로 지정되고, ignore_malformed 세팅을 따를 것이다.


Fields


각 매핑은 연관된 많은 필드를 가지고 있다. 도큐먼트 메타데이터를 인덱스하기 위해서 사용될 수 있다.


_uid


인덱스된 각 도큐먼트의 id와 type은 연관관계가 있다. 내부적인 _uid 필드는 index내에서 도큐먼트의 유일한 식별자이며, 이것은 타입과 id의 조합이다. 타입기반 필터링을 수행하기 위한 _type은 색인되지 않고 _id도 색인되지 않을때 _uid 필드가 자동적으로 사용된다.










Comments