ES는 인덱스에 도큐먼트를 추가하면 자동으로 매핑이 생성됨.
집어넣은 데이터의 도큐먼트 모양에 따라 다양한 매핑들이 생성.
Mapping은 RDB의 스키마(속성)라고 생각.
GET [인덱스명] //setting, mapping정보 다 볼 수 있음.
GET [인덱스명]/_mapping // mapping 정보만 확인 가능.
매핑 정의
데이터가 입력되어 자동으로 매핑 생성되기 전에 미리 먼저 인덱스의 매핑을 정의해놓으면 정의 해놓은 매핑에 맞추어 데이터가 입력됨.
PUT <인덱스명>
{
"mappings": {
"properties": {
"<필드명>":{
"type": "<필드 타입>"
… <필드 설정>
}
…
}
}
}
이미 만들어진 매핑에 필드 추가는 가능
PUT <인덱스명>/_mapping
{
"properties": {
"<추가할 필드명>": {
"type": "<필드 타입>"
… <필드 설정>
}
}
}
단, 이미 만들어진 필드 삭제하거나 필드의 타입, 설정값 변경은 불가능.
필드의 변경이 필요한 경우 인덱스를 새로 정의하고 기존 인덱스의 값을 새 인덱스에 재색인 해야함.
book 인덱스를 확인해보면 title필드는 text로 이루어져있고 하위에 keyword라는 필드가 있음
text는 데이터를 역인덱스해서 저장하고 keyword는 입력된 문자열을 하나의 토큰으로 저장함.
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
따라서 title.keyword로 검색할 때는 통으로 된 문자열(Romeo and Juliet)이 아니면 검색이 안 됨. 대소문자 하나만 달라도 검색이 안 됨.
keyword필드는 aggregation같은 데에서 집계를 할 때 필요
그냥 title로 검색할 때는 Romeo든 Juliet이든 다 가능 !
GET books/_search
{
"query": {
"match": {
"title.keyword": "Juliet"
}
}
}
방금 위에 text 필드 말고 keyword 필드까지 넣어준 것은 멀티필드
아래처럼 사용가능.
PUT my_index
{
"mappings": {
"properties": {
"<필드명1>": {
"type": "text",
"fields": {
"<필드명2>": {
"type": "<타입>"
}
}
}
}
}
}
참조
모든 내용은 아래 가이드 북에서 참고해 정리했습니다.
큰 도움 받았습니다. . . .
https://esbook.kimjmin.net/07-settings-and-mappings/7.2-mappings
'공부' 카테고리의 다른 글
트랜잭션 (0) | 2023.12.13 |
---|---|
Page로 페이지 처리하기 (0) | 2023.12.10 |
Elasticsearch) 데이터 색인과 텍스트 분석 (1) | 2023.12.08 |
Elasticsearch) Bool 복합 쿼리 , Should, 정확값 쿼리, 범위 쿼리 (2) | 2023.12.08 |
Elasticsearch) Query DSL (1) | 2023.12.08 |