반응형

스프링 부트 2.3 버젼부터 spring-data-elasticsearch 버젼도 4 버젼으로 올라가고, 여기서 부터 기존 설정 이 조금 달라졌다.

아래 내용은 버젼명시가 없다면 2.3 버젼부터 사용가능한 버젼이다.

 

소스코드 버젼

spring boot 2.4.3

spring-data-elasticsearch 4.1.3

 

pom.xml dependency 추가

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

 

 

config 설정소스

@Configuration
@EnableElasticsearchRepositories(basePackages = "com.baeldung.spring.data.es.repository")
@ComponentScan(basePackages = { "com.baeldung.spring.data.es.service" })
public class Config {

    @Bean
    public RestHighLevelClient client() {
        ClientConfiguration clientConfiguration 
            = ClientConfiguration.builder()
                .connectedTo("localhost:9200")
                .build();

        return RestClients.create(clientConfiguration).rest();
    }

    @Bean
    public ElasticsearchOperations elasticsearchTemplate() {
        return new ElasticsearchRestTemplate(client());
    }
}

spring-data-elasticsearch 4.0.0 이상부터는,
TransportClient 클래스가 Deprecated 되어 RestHighLevelClient 또는 ReactiveRestLevelClients 만 사용 가능하다.

 

예제 상에서는 대부분 

@EnableElasticsearchRepositories 어노테이션을 추가하지만 예제 소스를 직접 만들어본 결과 @EnableElasticsearchRepositories 를 따로 추가해 주지 않아도 됐다.

 

@ComponentScan 는 application 에 추가했다면 안해도 된다.

@EnableElasticsearchRepositories 도 추가 없이 동작확인했지만, 사용하려는 버젼에서 안된다면 추가하자.

 

Document 객체 설정하기

@Setter
@Document(indexName = "blog")
public class Blog {

    @Id
    private String id;
    private String title;
    private String content;

}

@Document 는 내가 넣을 index 테이블이다. @Entity 와 동일하다. 또한 몽고디비의 @Document 와 동일하다.

컬럼의 경우 @Field 를 사용한다.

@Field(type = FieldType.Date)
private Date log_date;

@Field(type = FieldType.Text)
private String log_text;

@Field(type = FieldType.Long)
private Long price;

필드별로 타입을 지정할 수 있다.

당연한 거지만 숫지데이터가 없을 때 null 을 넣어주고 싶은경우 Reference Type 을 넣어주면 된다. Long, Integer 등등

 

원래는 @Document 어노테이션에 매핑 Type 지정이 가능했지만, ES 7.0.0 부터는 Type 이 deprecated 되어 indexName만 설정가능하다.

어차피 6. 버젼에서도 하나의 index 에 하나의 type 만 가능했어서 상관없는 부분이다.

https://www.elastic.co/guide/en/elasticsearch/reference/7.x/removal-of-types.html [타입삭제 레퍼런스]

 

@ElasticsearchReposity 사용

JpaRepository 와 사용이 유사하다.

https://docs.spring.io/spring-data/elasticsearch/docs/4.0.0.M4/reference/html/#repositories [repository 문서]

@Repository
public interface BlogEsRepository extends ElasticsearchRepository<Blog, String> {
}

 

사용 예시

@Resource
BlogEsRepository blogEsRepository;

@Test
void test(){
    Blog blog = new Blog();
    blog.setId("1");
    blog.setContent("내용입니다.");
    blog.setTitle("제목입니다.");
    blogEsRepository.save(blog);
}

 

키바나 결과화면

 

엘라스틱 조회 결과

 

 

엘라스틱 구축 하는 방법은 

juntcom.tistory.com/121    [도커로 엘라스틱 구축]

를 참고하자.

 

 

참고문헌

https://docs.spring.io/spring-data/elasticsearch/docs/4.0.0.M4/reference/html/#preface [스프링 공식문서]
https://www.baeldung.com/spring-data-elasticsearch-tutorial [elastic 예제소스]

 

 

반응형

+ Recent posts