[Elasticsearch] 인덱스 생성시 illegal_argument_exception 오류
Search engine/Elasticsearch | 2022. 12. 18. 01:04
PUT /movie
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
},
"mappings": {
"_doc": {
"properties": {
"movieCd": {"type": "integer"},
"movieNm": {"type": "text"},
"movieNmEn": {"type": "text"},
"prdtYear": {"type": "integer"},
"openDt": {"type": "date"},
"typeNm": {"type": "keyword"},
"prdtStatNm": {"type": "keyword"},
"nationAlt": {"type": "keyword"},
"genreAlt": {"type": "keyword"},
"repNationNm": {"type": "keyword"},
"repGenreNm": {"type": "keyword"}
}
}
}
}
책 보면서 따라하던 중.. 위처럼 인덱스를 생성하려고 하니
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "The mapping definition cannot be nested under a type [_doc] unless include_type_name is set to true."
}
],
"type" : "illegal_argument_exception",
"reason" : "The mapping definition cannot be nested under a type [_doc] unless include_type_name is set to true."
},
"status" : 400
}
오류가 나옵니다.
오류를 자세히 읽어보면 매핑 정의들이 _doc 아래 중첩될 수 없다고 합니다.
이는 es 6.0 이하에서는 인덱스가 타입을 가질 수 있었는데 (예를 들어 영화 라고 하면 type에 액션, SF, 공포, ... 타입을 추가), 6.1부터는 인덱스당 하나의 타입만 사용할 수 있도록 바뀌었다고 합니다. 타입보단 각각 인덱스를 생성해 사용하라고 합니다.
아무튼 _doc은 의미없으니 지우면 됩니다
PUT /movie
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
},
"mappings": {
"properties": {
"movieCd": {"type": "integer"},
"movieNm": {"type": "text"},
"movieNmEn": {"type": "text"},
"prdtYear": {"type": "integer"},
"openDt": {"type": "date"},
"typeNm": {"type": "keyword"},
"prdtStatNm": {"type": "keyword"},
"nationAlt": {"type": "keyword"},
"genreAlt": {"type": "keyword"},
"repNationNm": {"type": "keyword"},
"repGenreNm": {"type": "keyword"}
}
}
}
프로퍼티 아래 바로 매핑정보를 작성해주면
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "movie"
}
인덱스가 잘 생성됩니다
반응형