[21.09.08] 엘라스틱서치 매핑(다이나믹 매핑과 명시적 매핑) - 1
http://www.yes24.com/Product/Goods/103030516
엘라스틱 스택 개발부터 운영까지 - YES24
데이터를 처리하는 데 서로 잘 맞지도 않는 오픈소스 기술들을 굳이 동원해야 할까? 제각각인 오픈소스들을 통합하고 운영하느라 지친 개발자와 운영자들을 위한 솔루션! 이제 엘라스틱 스택
www.yes24.com
해당 서적을 참조하여 글을 작성하였습니다.
mysql과 같은 관계형 데이터베이스는 테이블을 만들 때 반드시 스키마 설계를 해야한다. 왜냐하면 구조를 명확히 하지 않다면 테이블이 생성되지 않고, 추후에 인덱싱 칼럼이나 조인 칼럼에 대해서도 문제가 발생하기 때문이다.
엘라스틱서치에서도 관계형 데이터베이스의 스키마와 비슷한 역할을 하는 것이 있는데 바로 매핑(mapping)이다. 쉽게 말하면 JSON 형태의 데이터를 루씬이 이해할 수 있도록 바꿔주는 작업이다. 엘라스틱서치가 검색 엔진으로 전문 검색과 대용량 데이터를 빠르게 검색할 수 있는 이유는 매핑이 있기 때문이다.
매핑을 엘라스틱서치가 자동으로 한다면 다이나믹 매핑, 사용자가 직접 설정하면 명시적 매핑이라고 한다. 또한 엘라스틱서치에서는 문자열을 텍스트와 키워드로 타입으로 나눌 수 있다.
다이나믹 매핑
엘라스틱서치의 모든 인덱스는 매핑 정보를 가지고 있지만 인덱스 생성 시 매핑 정의를 강제하고 있지는 않다. 데이터의 타입이나 스키마를 고민하지 않아도 JSON 도큐먼트의 데이터 타입에 맞춰 엘라스틱서치가 자동으로 인덱스를 매핑 해주는 것이다.
원본 소스 데이터 타입 | 다이나믹 매핑으로 변환된 데이터 타입 |
null | 필드를 추가하지 않는다 |
boolean | boolean |
float | float |
integer | long |
object | object |
string | string의 형태에 따라 date, text/keyword 필드로 변환 |
ex) JSON 도큐먼트에 "age" : 20 이라는 필드와 값이 있다면 엘라스틱서치는 20을 숫자로 인식한다. 원본 소스가 integer 타입이기 때문에 엘라스틱서치는 인덱스 생성 시 age 필드를 integer인 타입을 long으로 매핑한다. 스키마 설계를 고민 할 필요 없이 데이터의 형태만 고려하게 되므로 참 편리하다. 하지만 숫자 타입이 무조건 범위가 넓은 long 타입으로 매핑되어 불필요한 메모리를 차지할 수 있으며, 문자열의 경우에 검색과 정렬 등을 고려한 매핑이 제대로 되지 않는다.
앞부분에 만들었던 index2 인덱스의 매핑을 확인할 수 있다.

GET index2/_mapping
명시적(explicit) 매핑
인덱스 매핑을 직접 정의하는 것을 명시적 매핑(explicit mapping) 이라고 한다. 인덱스 매핑을 설정하는 방법은 두가지가 있다.
1. 인덱스를 생성할 때 mappings 정의를 설정한다.
2. mapping API를 이용하여 매핑을 지정한다.
PUT 인덱스명 { "mappings": { "필드명" : "필드 타입" } }
인덱스를 생성할 때 mappings, properties 아래에 필드명과 필드 타입을 지정해주면 된다.

위의 이미지와 같이 mapping 필드의 properties 필드의 age, name gender 필드를 넣고 필드에 대한 값에 type : 인덱스에 대한 타입을 넣는다면 명시적 매핑을 설정할 수 있다.
PUT index4
{
"mappings" : {
"properties": {
"age": {"type": "short"},
"name": {"type": "text"},
"gender": {"type": "keyword"}
}
}
}

GET index4/_mapping 으로 index4 각각의 필드 매핑을 확인하면 다음과 같이 명시적으로 매핑한 것을 볼 수 있다.
'보안' 카테고리의 다른 글
[21.9.25] UDP 포트 스캔 (0) | 2021.09.25 |
---|---|
[21.9.23] 네트워크 포트 스캐닝 - TCP Scan (0) | 2021.09.24 |
[21.9.3] 엘라스틱서치 벌크 데이터 (0) | 2021.09.03 |
[21.9.2] 엘라스틱 서치 도큐먼트 간단한 CRUD 작업 (0) | 2021.09.02 |
[21.9.1]엘라스틱서치 기본 구조 (0) | 2021.09.01 |
댓글
이 글 공유하기
다른 글
-
[21.9.25] UDP 포트 스캔
[21.9.25] UDP 포트 스캔
2021.09.25 -
[21.9.23] 네트워크 포트 스캐닝 - TCP Scan
[21.9.23] 네트워크 포트 스캐닝 - TCP Scan
2021.09.24 -
[21.9.3] 엘라스틱서치 벌크 데이터
[21.9.3] 엘라스틱서치 벌크 데이터
2021.09.03 -
[21.9.2] 엘라스틱 서치 도큐먼트 간단한 CRUD 작업
[21.9.2] 엘라스틱 서치 도큐먼트 간단한 CRUD 작업
2021.09.02
댓글을 사용할 수 없습니다.