-
[spring boot] 스프링부트 에서 elasticsearch 시작하기Spring/spring boot 및 기타 2021. 2. 24. 18:46
스프링 부트 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