[Elasticsearch] Exception in thread "main" java.lang.NoSuchMethodError: org.elasticsearch.action.support.IndicesOptions.ignoreThrottled()Z
# 오류
java 프로젝트에서 엘라스틱서치에 연동하기 위해 elasticsearch-rest-high-level-client 라이브러리를 사용했다.
기존에 transport:6.0.0 버전을 사용했고 엘라스틱서치 설치 버전을 올리면서 클라이언트도 버전을 올리게 되었다.
연동하려는 elasticsearch의 노드가 총 7개이고 설치된 버전이 6.8 또는 7.9 이다.
연동 가이드 문서를 따라서 구현을 했는데 소스코드를 실행하면 클라이언트 객체 초기화하는 부분에서 다음과 같은 에러가 난다.
Exception in thread "main" java.lang.NoSuchMethodError: org.elasticsearch.action.support.IndicesOptions.ignoreThrottled()Z
at org.elasticsearch.client.RequestConverters$Params.withIndicesOptions(RequestConverters.java:966)
at org.elasticsearch.client.RequestConverters.addSearchRequestParams(RequestConverters.java:417)
at org.elasticsearch.client.RequestConverters.search(RequestConverters.java:404)
at org.elasticsearch.client.RestHighLevelClient.lambda$search$2(RestHighLevelClient.java:932)
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1450)
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1424)
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1394)
at org.elasticsearch.client.RestHighLevelClient.search(RestHighLevelClient.java:930)
2번째 줄의 RequestConverter.java: 966 부분에 가면 ignoreThrottled() 부분이 붉은색으로 되어있다.
# 원인
라이브러리 버전 별로 뭐가 다른가본데 잘 모르겠다.
elasticsearch-rest-high-level-client 라이브러리의 Git 저장소에서 commit 기록을 보니 ignoreThrottled()가 추가된게 May, 2019 이길래 다시 메이븐 저장소 가서 2019년 5월 이전에 배포된 버전을 찾아보니 6.8.0 버전 뿐이었다.
6.8.1 버전이 Jun, 2019 였던 것 같다.
https://github.com/elastic/elasticsearch/pull/42393
https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client
# 해결
Git 커밋키록을 확인하기 전에는 elasticsearch-rest-high-level-client의 버전을 6.8.13, 6.8.12, 6.8.8 순서로 점점 낮춰서 확인했는데 모두 안 되었다.
그리고 나서 커밋키록 확인하고 6.8.0으로 변경했는데 되었다. ㅋ
/** elasticsearch high-level Java REST (new) */
compile('org.elasticsearch.client:elasticsearch-rest-high-level-client:6.8.0')