Error deserializing co.elastic.clients.elasticsearch._types.analysis.Analyzer Property 'type' not found

2024, Apr 06    

Error

Caused by: org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'sectionElasticRepository' defined in elastic.repository.SectionElasticRepository defined in @EnableElasticsearchRepositories declared on ElasticConfig: 
Invocation of init method failed; 
nested exception is org.springframework.beans.BeanInstantiationException: 
Failed to instantiate [org.springframework.data.elasticsearch.repository.support.SimpleElasticsearchRepository]: Constructor threw exception; nested exception is co.elastic.clients.json.JsonpMappingException: 
Error deserializing co.elastic.clients.elasticsearch._types.analysis.Analyzer: 
Property 'type' not found (JSON path: index.analysis.analyzer.autocomplete_search) (line no=1, column no=150, offset=-1)

Problem

  • Elasticsearch 7.15 버전 부터 HLRC (High Level Rest Client)가 deprecated 되어서, Java API Client 로 마이그레이션이 작업을 하던 중에 발생했다.
  • spring boot application을 start할 수 없었다.

Cause

  • 에러로그를 자세히 봤어야했는데… 빈 등록 오류라고 판단하고 엉뚱한 작업을 진행했었다.
  • 결론은 analyzer의 type을 맵핑할 수 없다는 것
  • https://www.skyer9.pe.kr/wordpress/?p=7311 참고
  • 즉, type을 명시해줘야한다.

    ../img/elasticsearch_analyzer_error.png

      "autocomplete_search": {
          "type": "custom", --> 이게 누락된 
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "word_delimiter"
          ]
        }
    
  • 결국에 type정의가 되어있지 않고, 그로 인해 autocomplete analyzer가 생성안되어서 빈까지 등록안된 것.

Solved

  • autocomplete analyzer에 type 추가