버전 호환 확인 필요
버전간의 제공되는 클래스, 삭제된 기능 등 레퍼런스간의 차이가 유독 심해서 기능 구현에서 참고 자료를 활용하지 못하는 경우가 많았다.
많은 예제에서 사용하고 있는 RestHighLevelClient의 사용 불가 문제
spring-data-elasticsearch:5.1.3 버전에서 RestHighLevelClient을 사용 할 수 없었습니다. RestHighLevelClient는 Elasticsearch를 RESTful API를 통해 효과적으로 사용할 수 있도록 하는 Elasticsearch Java 클라이언트 라이브러리 중 하나입니다. 이 라이브러리는 Elasticsearch의 REST API와 상호 작용하여 데이터를 쿼리하고 색인화하며, 기타 Elasticsearch 작업을 수행하는 데 사용됩니다. 이를 통해 객체 지향적이고 사용하기 편리한 인터페이스를 제공합니다.
하지만 5.0버전 이후로는 해당 클래스를 사용 할 수 없게되었습니다. 5.X버전 이후의 유사 클래스를 찾고자 했으나
다양한 예제를 참고하여 아래와 같은 4.2.2 버전을 주입하여 RestHighLevelClient를 사용 할 수 있었습니다.
build.gradle에서 의존성주입 시
implementation 'org.springframework.data:spring-data-elasticsearch로 하는 경우
자동으로 관련 라이브러리 버전에 따라 설치하게 되는데 버전의 문제가 있었다. 버전을 아래처럼 직접 기입하여 원하는 버전을 주입 할 수 있도록 했다.
implementation 'org.springframework.data:spring-data-elasticsearch:4.2.2'
Java
복사
다른것보다, 특정 기능을 구현하는데 있어 의존성 버전별로 기능이 삭제되는 경우가 있어 새로운, 또는 과거의 구현 방법을 어느 정도 찾아 볼 수 있어야 하는 것을 느꼈습니다. 우선 이 프로젝트에서는 RestHighLevelClient 를 사용한 구현법을 익혀보는데 집중해보고자 합니다.
RestHighLevelClient의 빈 생성 오류
ElasticSearchConfig.java를 직접 생성하여 구현하고자 했으며, elasticsearchTemplate의 명칭을 사용하면 자동으로 등록된 빈과 충돌이 발생하기 때문에 customElasticsearchTemplate과 같이 명칭을 변경해주어야 올바르게 빈을 생성 할 수 있었습니다.
@EnableElasticsearchRepositories(basePackageClasses = {ElasticBookSearchRepository.class})
@Configuration
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {
@Bean
public ElasticsearchOperations customElasticsearchTemplate(@Qualifier("elasticsearchClient") RestHighLevelClient client) {
return new ElasticsearchRestTemplate(client);
}
@Override
public RestHighLevelClient elasticsearchClient() {
ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo("localhost:9200")
.build();
return RestClients.create(clientConfiguration).rest();
}
}
Java
복사
Spring Data Elasticsearch 프로젝트를 설정하면 ElasticsearchRestTemplate은 자동으로 빈으로 등록되어 Spring ApplicationContext에 포함됩니다. 그 명칭이 elasticsearchTemplate 으로 생성되도록 설정되어 있었습니다.
현재 프로젝트의 적용 버전
엘라스틱서치 7.12.1
스프링 데이터 Elasticsearch 4.2.2