스프링 부트 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 예제소스]
'Spring > spring boot 및 기타' 카테고리의 다른 글
[spring] 스프링 elasticsearch ElasticsearchRepository underscore 오류 해결방법 (0) | 2021.03.16 |
---|---|
[spring] 스프링에서 사용하는 RestTemplate - http 라이브러리 (0) | 2021.02.26 |
Jasypt 암호화 - spring 설정파일 암호화하기 (0) | 2021.01.28 |
spring boot 1.X 와 2.X 차이점 (0) | 2021.01.08 |
[SPRING] kafka Error registering AppInfo mbean - 스프링부트 카프카 (0) | 2020.11.03 |