본문 바로가기
서버

[Elasticsearch] 한번 정해진 mapping 속성은 변경 불가

by 탁구치는 개발자 2017. 12. 5.

다음과 같이 mapping을 생성하였다.

index : get-together

type : new-events

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
curl -XPUT 'localhost:9200/get-together/_mapping/new-events?pretty' -d '{
    "new-events": {
       "properties": {
            "name": {
                "type": "string",
                "index": "analyzed"
            }, 
            "name2": {
                "type": "string",
                "index": "not_analyzed"
            },
            "name3": {
                "type": "string",
                "index": "no"
            }            
        }
    }
}'
cs


매핑이 생성되면 성공 메세지가 출력된다.

1
2
3
{
  "acknowledged" : true
}
cs


이와 같이 new-events type에 대한 매핑을 생성 후 새로운 속성을 추가해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
curl -XPUT 'localhost:9200/get-together/_mapping/new-events?pretty' -d '{
    "new-events": {
       "properties": {
            "name": {
                "type": "string",
                "index": "analyzed"
            }, 
            "name2": {
                "type": "string",
                "index": "not_analyzed"
            },
            "name3": {
                "type": "string",
                "index": "no"
            },
            "name4": {
                "type": "string",
                "index": "no"
            }           
        }
    }
}'
cs


새로운 속성이 정의된 매핑을 적용 후 매핑을 조회해 보자. 새롭게 추가된 name4 속성이 출력됨을 알 수 있다.

1
curl -XGET localhost:9200/get-together/_mapping/new-events?pretty
cs


허나 한번 정해진 속성은 변경이 불가능하다. 또한 필드 색인하는 방식도 변경할 수 없다.

name4 속성을 integer로 변경하여 매핑을 수정해 보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
curl -XPUT 'localhost:9200/get-together/_mapping/new-events?pretty' -d '{
    "new-events": {
       "properties": {
            "name": {
                "type": "string",
                "index": "analyzed"
            }, 
            "name2": {
                "type": "string",
                "index": "not_analyzed"
            },
            "name3": {
                "type": "string",
                "index": "no"
            },
            "name4": {
                "type": "integer",
                "index": "no"
            }           
        }
    }
}'
cs


다음과 같은 오류가 발생됨을 알 수 있다.

1
2
3
4
5
6
7
8
9
10
11
{
    "error": {
        "root_cause": [{
            "type": "mapper_parsing_exception",
            "reason": "wrong value for index [integer] for field [name4]"
        }],
        "type": "mapper_parsing_exception",
        "reason": "wrong value for index [integer] for field [name4]"
    },
    "status": 400
}
cs


한번 정해진 매핑의 속성은 변경이 불가능하니 초반에 설계를 잘하자.