일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 제로베이스
- 일본어형태소분석기
- 학습일지
- pm
- kuromoji
- python
- json
- 제로베이스pm스쿨
- 셸
- 파이썬
- NumPy
- pm스쿨28기
- UNIX
- 매핑
- ElasticSearch
- 제로베이스부트캠프
- kibana
- bulk
- 반복문
- elif문
- if문
- for문
- mapping
- Sort
- else문
- 조건문
- 블록구조
- shell
- Size
- while문
- Today
- Total
code name blue
elasticsearch : mapping 본문
elasticsearch 6.4.3 version
mapping이란?
elasticsearch의 index에 들어가는 데이터의 타입을 정의하는 것이다. 미리 index를 생성하고 mapping을 지정하는 것이 좋지만, 사용자가 mapping을 정의하지 않더라도 elasticsearch에서 자동으로 데이터 타입을 mapping 해준다.
index 생성하기
1
2
3
4
5
6
|
PUT /test/movie/1
{
"title": "Eternal Sunshine",
"director": "Michel Gondry",
"genre": "Romance"
}
|
'test'라는 인덱스에 'movie'라는 타입으로 위와 같은 데이터를 생성하였다.
mapping 조회하기
1
|
GET /test/movie/_mapping
|
'test' 인덱스의 'movie' 타입의 데이터 매핑을 확인한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
{
"test": {
"mappings": {
"movie": {
"properties": {
"director": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"genre": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
|
각각 "title", "director", "genre"의 value가 모두 문자열이므로 자동으로 'text' 타입으로 매핑되었다. 또한 추가적으로 "keyword"라는 필드를 만들어 'keyword' 타입으로 매핑 되어 있다.
mapping 정의하기
새로 인덱스를 추가 할 때 마다 mapping을 정의하지 않아도 되는 것은 간편하지만, elasticsearch 에서는 한 번 정의된 mapping을 변경할 수 없기 때문에(새로 추가하는 field와 type에 대해서는 mapping 설정이 가능하다.) 처음 index를 생성할 때 원하는 타입을 지정하여 mapping을 하는 작업이 중요하다.
따라서 mapping 정의 후 index를 생성하고, 이렇게 초기에 설정한 내용들을 따로 json 문서로 저장해 놓으면 추후에 사용하기 편리하다.
mapping 타입은 아래와 같다.
-
string
-
text
-
keyword
-
-
number
-
float
-
double
-
integer
-
long
-
shor
-
byte
-
-
date
-
boolean
-
binary
새로 index를 생성하기 위해 기존의 index를 삭제하고 아래와 같이 mapping을 정의한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
PUT test/
{
"mappings": {
"movie": {
"properties": {
"director": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"genre": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"rate": {
"type": "float"
}
}
}
}
}
}
|
문자열 데이터의 경우 keyword로 mapping하면 형태소 분석 등, 원문의 텍스트가 아닌 일부만으로 검색이 어려우므로 'text'로 지정하고 추가적으로 'keyword'라는 field를 생성하여 'keyword'를 mapping해준다. 기존의 데이터에서 별점 등의 데이터를 넣기 위해 "rate" field를 새로 추가하였다.
1
2
3
4
5
6
7
|
PUT /test/movie/1
{
"title": "Eternal Sunshine",
"director": "Michel Gondry",
"genre": "Romance",
"rate": "5.0"
}
|
이후 생성된 index에 다시 데이터를 집어넣는다.
'Programming > Elasticsearch' 카테고리의 다른 글
elasticsearch : 검색 결과별 쿼리 (1) - from/size, sort (0) | 2019.10.21 |
---|---|
elasticsearch : 다량의 데이터 넣기(bulk json insert) (0) | 2019.10.08 |
elasticsearch : elasticsearch 설치 & 환경설정 (0) | 2019.10.04 |
elasticsearch : kibana 설치 & 환경설정 (0) | 2019.10.02 |
elasticsearch : 한글 형태소 분석기 nori 설치 (0) | 2019.10.02 |