매핑이란?
- RDBMS의 스키마와 비슷한 역할
- json 형태의 데이터를 루씬이 이해할 수 있도록 바꿔주는 작업
- 다이나믹 매핑
- json 도큐먼트의 데이터 타입에 맞춰 자동으로 인덱스 매핑을 해주는것
- 명시적 매핑
- 인덱스를 생성할 때 인덱스 매핑을 직접 정의하거나 mapping API를 통해 매핑을 지정
매핑 타입
데이터 타입 | 설명 |
text* | 전문 검색이 필요한 데이터로 텍스트 분석기가 텍스트를 작은 단위로 분리 |
keyword* | 텍스트 분석을 하지 않고 원문을 통째로 인덱싱 |
date | 날짜 / 시간 |
Bye, short, integer, long | 정수형 타입 |
scaled_float, half_float, double, float | 실수형 타입 scaled_float : float 데이터에 특정 값을 곱해 정수형으로 바꾼 데이터 half_float : 16비트 부동소수점 실수 데이터 |
boolean | 참/거짓 |
ip | Ipv4, ipv6타입의 ip 주소 |
geo-point, geo-shape | geo-point : 위도, 경도 값 geo-shape: 임의의 지형 |
integer_range, long_range, float_range, double_range, ip_range, date_range | 범위를 설정할 수 있는 데이터, 최솟값과 최댓값을 통해 범위를 입력 |
object | 계층 구조를 갖는 형태로 필드 안에 다른 필드들이 들어갈 수 있다. |
nested | 배열형 객체를 저장, 객체를 따로 인덱싱하여 객체가 하나로 합쳐지는 것을 막고 배열 내부의 객체에 쿼리로 접근 가능 |
join | 부모/자식 과계를 표현할 수 있다. |
검색을 위한 문자열 타입 두 종류 비교
1. text 타입
- 일반적으로 문장을 저장하는 타입
- 여러 단어가 나열된 문자열을 텍스트 타입으로 지정
- 분석기에 의해 토큰으로 분리
- 분리된 토큰들은 역인덱싱처리 ( 역인덱스에 저장된 토큰들을 용어, term이라 불린다.)
2. keyword 타입
- 카테고리, 사람 이름, 브랜드 등 유의미한 값들의 집합과 같은 범주형 데이터에 사용
- 분석기를 거치지 않고 문자열 전체가 하나의 용어로 인덱싱
- 완전 일치 검색을 하며 집계나 정렬에 사용
매핑 필드 종류
1. 단일 필드
- 하나의 필드 안에 하나의 데이터 타입이 정의 되어있는 필드
{
"name": {
"type" "text"
}
}
2. 멀티 필드
- 단일 필드 입력에 대한 여러 하위 필드를 정의하는 기능
- fields라는 매핑 파라미터가 사용
- 전문 검색(text)가 필요하면서 정렬(keyword)가 필요한 경우
{
"name": {
"type" "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
- 인덱스 템플릿
- 설정이 동일한 복수의 인덱스를 만들 때 사용
- 인덱스 매핑과 세팅을 효율적으로 설정
참고 도서 : 엘라스틱 스택 개발부터 운영까지 (저자 : 김준영,정상운)
'Elastic Seaerch' 카테고리의 다른 글
ElasticSearch 사용자 사전, 동의어, 불용어 적용 (1) | 2023.06.09 |
---|---|
ElasticSearch Mapping 구조 추가 및 Reindex (0) | 2022.06.16 |
ElasticSearch란? (0) | 2022.05.20 |