본문 바로가기

Elasticsearch

[Elasticsearch] mapping field 수정 추가 삭제

반응형

 

Elasticsearch에 index를 처음 만들 때 , 필드는 어떤 것을 넣을 건지 보여주는 mappings와 analyzer, tokenizer, filter 등을 이용 및 custom 할 수 있는 settings를 함께 설정해 준다. 

 

이 때, mapping또는 settings를 다시 세팅하고 싶은 경우가 있는데 불가능하고 다시 새로운 인덱스를 만들어 reindex해야 한다.

가능한 것은 _mappings에 새로운 field를 추가할 수 있다. 하지만 이미 만들어진 필드를 삭제하거나 타입/설정값을 수정하는 것은 불가능하다. 

 

만약 운영 중인 es 클러스터라면 다운타임없이 진행하기위해 alias설정 후 reindex를 하면 된다. 

 alias 설정해서 Reindex 하기 

 

[Elasticsearch] index alias란? alias 설정, 추가, 수정, 삭제하기

Alias란 ? What is Alias in Elasticsearch ? Alias란 data stream 또는 indices에 대한 두번째 이름(별칭)이다. 대부분의 ES APIs는 data stream 또는 index 이름 대신에 alias를 받는다. Alias를 사용하는 주된 목적은 어플리

blckchainetc.tistory.com

 

 

mappings  > field를 추가하기 

test_index의 구조는 아래와 같다. 

{
  "test_index" : {
    "aliases" : {
      "mydata" : { }
    },
    "mappings" : {
      "properties" : {
        "created_at" : {
          "type" : "date",
          "format" : "EEE MMM dd HH:mm:ss Z yyyy"
        },
        "flag" : {
          "type" : "boolean"
        },
        "host_name" : {
          "type" : "keyword"
        },
        "message" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "1",
        "provided_name" : "test_index",
        "creation_date" : "1667805017423",
        "number_of_replicas" : "1",
        "uuid" : "rTOzbLBgQUayWEA9IArOfg",
        "version" : {
          "created" : "7170299"
        }
      }
    }
  }
}

 

message, flag fields가 있는데 여기에 "extra_info"라는 필드를 추가해 보기 

PUT test_index/_mapping
{
  "properties": {
    "extra_info": {
      "type": "text"
    }
  }
}

결과 : 

{
  "acknowledged" : true
}

다시 fields 확인해보기 

{
  "test_index" : {
    "mappings" : {
      "properties" : {
        "created_at" : {
          "type" : "date",
          "format" : "EEE MMM dd HH:mm:ss Z yyyy"
        },
        "extra_info" : {
          "type" : "text"
        },
        "flag" : {
          "type" : "boolean"
        },
        "host_name" : {
          "type" : "keyword"
        },
        "message" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

새롭게 추가한 field "extra_info"가 잘 들어갔다. 

 

 

Reference : https://esbook.kimjmin.net/07-settings-and-mappings/7.2-mappings

 

7.2 매핑 - Mappings - Elastic 가이드북

인덱스의 매핑에서 필드들은 mappings 아래 properties 항목의 아래에 지정됩니다. 위 예제에서 보면 데이터 형식에 맞게 title, author, category 필드들은 text와 keyword타입으로, pages 필드는 long 타입으로, p

esbook.kimjmin.net

반응형