[엘라스틱서치] include_type_name is set to true

    엘라스틱서치(Elasticsearch)를 하는 도중, 인덱스를 생성하기 위해서 mappings 값을 입력하여 넣었는데 에러가 발생하였다. 오타가 난건지 싶어서 여러번 확인을 한 결과 에러는 발견하지 못해서 결국 구글링을 하게 되었다.

     

    에러가 발생한 메세지

    {
      "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
    }

     

    스택오버플로우에서 비슷한 케이스

    Mapping types are no longer supported in versions 7.x. Elasticsearch 7.x Specifying types in requests is deprecated. For instance, indexing a document no longer requires a document type. The new index APIs are PUT {index}/_doc/{id} in case of explicit ids and POST {index}/_doc for auto-generated ids. Note that in 7.0, _doc is a permanent part of the path, and represents the endpoint name rather than the document type. The include_type_name parameter in the index creation, index template, and mapping APIs will default to false. Setting the parameter at all will result in a deprecation warning. The default mapping type is removed. My suggestion is to remove _doc type from your mappings. { "mappings": { "properties": { "category" : { "type": "nested", "properties" : {

    7.x부터 인덱스에 여러개의 타입을 생성할 수 없기 때문에 위 요청에서 타입인 _doc을 넣는 것은 무의미하기 때문에 발생하는 에러이다. 그래서 _doc 부분을 제거한 후 스키마 매핑값을 요청한다면 정상적으로 작동하게 된다.

     

     

    참고자료

    https://stackoverflow.com/questions/58824489/where-to-put-include-type-name-in-config-exs
    반응형

    댓글

    Designed by JB FACTORY