Kim-Baek 개발자 이야기

[Elasticsearch] Mapping API 본문

개발/Elasticsearch

[Elasticsearch] Mapping API

킴백 개발자 2020. 8. 11. 03:00

Mapping

 

  • Mapping은 Document가 어떤 field들을 포함하고 저장할지를 정의하는 것이다.
  • index를 생성하면 자동으로 기본 mapping이 생긴다(Dynamic Mapping).
  • 각각의 index는 하나 이상의 mapping type들을 가지고 있다.
  • Mapping type은 Meta-fieldField or property 을 가지고 있다.

 

Field Datatype

 

  • 각각의 field들은 데이터 타입을 가지고 있다.
  • 간단한 데이터 타입(text, keyword, date, long, double..) 부터 복잡한 데이터 타입(array, object..) 등 document의 field들을 위한 타입이 존재한다.
  • Field를 사용하는 목적과 방법에 따라 Datatype을 사용하는 것은 유용하다.

 

String 필드는 크게 text와 keyword 타입이 존재한다.

 

text type은 full-text search에 사용된다. analyzed되어서 문자열을 각각의 단어의 리스트로 쪼개진다.

 

keyword는 sorting이나 aggregation에 주로 사용된다.

 

jea-hyun을 text type으로 설정하면 [jea,hyun]이 되고 keyword type으로 설정하면 [jea-hyun]이 된다.

 

Dynamic Mapping

 

인덱스를 생성하면 자동적으로 mapping이 생성된다.

 

   # index 생성 & 데이터 넣기
   curl -XPUT 'localhost:9200/study/mytype -d' '{
     "name" : "jeahyun",
     "date" : "2020-08-09"
   }'

   # mapping 확인
   curl -XGET 'localhost:9200/study/_mapping/mytype?pretty'

 

Dynamic mapping에 의해서 기본으로 datatype이 설정된다.

 

     "study" : {
      "mappings" : {
        "myType" : {
          "properties" : {
            "date" : {
              "type" : "date"
            },
            "name" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        }
      }
    }

 

Mapping 하기

 

PUT Mapping API를 이용해 기존에 index의 type에 사용자가 mappping을 해줄 수 있다.

단, 이미 Field에 Data type이 정의되어 있다면 Mapping을 PUT 하면 오류가 발생한다.(Documnet를 Insert하여 Dynamic Mapping이 동작)

이러한 오류가 발생하면 Mapping이 불가능해서 Type에 데이터를 모두 삭제해주고, Create 할 때 Mapping 해주어야 한다.

 

   # Index를 Create 할 때 Mapping 해주기
   curl -X PUT 'localhost/study' -d '
  {
    "mappings": {
      "member": {
        "properties": {
          "name" : {
            "type": "keyword"
          },
          "gender" : {
            "type": "keyword"
          },
          "hobby" : {
            "type": "keyword"
          }
        }
      }
    }
  }'

 

Reference

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html

반응형

'개발 > Elasticsearch' 카테고리의 다른 글

[Elasticsearch] Aggregation  (0) 2020.08.12
[Elasticsearch] Index API  (0) 2020.08.10
[Elasticsearch] 기본 개념, Concept, 용어  (0) 2020.08.09
Comments