on
SpringBoot + ElasticSearch 연동 및 간단 API 호출해보기
SpringBoot + ElasticSearch 연동 및 간단 API 호출해보기
ElasticSearch 설치
Docker + Elasticsearch 설정하는 이전 포스팅을 참고하자.
devfunny.tistory.com/365
설정파일 생성
1) build.gradle Import
/* elasticsearch */ compile 'org.springframework.boot:spring-boot-starter-data-elasticsearch' compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.9.1' compile 'org.elasticsearch.client:elasticsearch-rest-client:7.9.3' compile 'org.elasticsearch:elasticsearch:7.9.3'
2) application.yml 파일에 elasticsearch 설정 추가하기
elasticsearch: host: 127.0.0.1 port: 9200
3) ElkConfig.java 파일 생성하기
import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.client.ClientConfiguration; import org.springframework.data.elasticsearch.client.RestClients; import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; @Configuration @Slf4j public class ElkConfig extends AbstractElasticsearchConfiguration { @Value("${elasticsearch.host}") private String host; @Value("${elasticsearch.port}") private int port; @Override @Bean public RestHighLevelClient elasticsearchClient() { final ClientConfiguration clientConfiguration = ClientConfiguration.builder() .connectedTo(host + ":" + port) .build(); return RestClients.create(clientConfiguration).rest(); } @Bean public ElasticsearchOperations elasticsearchOperations() { return new ElasticsearchRestTemplate(elasticsearchClient()); } }
4) ReservationIndex.java 생성하기
import lombok.Builder; import lombok.Data; import org.elasticsearch.common.geo.GeoPoint; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.*; @Data @Document(indexName = "reservation") @Setting(settingPath = "elastic-setting.json") public class ReservationIndex { /* id */ @Id @Field(type = FieldType.Long) private int reservationId; /* 서비스구분 */ @Field(type = FieldType.Keyword) private String type; /* 서비스ID */ @Field(type = FieldType.Keyword) private String serviceId; /* 장소 X 좌표, Y 좌 */ @GeoPointField private GeoPoint location; // X, Y /* 서비스개시시작일시 */ @Field(type = FieldType.Date) private String startDate; }
이 파일에서 @Setting(settingPath = "elastic-setting.json") 이 부분은 프로젝트 resource/** 경로의 파일을 찾는다. 해당 파일에 사용할 분석기, 필터 등을 설정하면 인덱스 생성시에 적용된다.
Elasticsearch API 호출
아래 메서드들을 호출할 파일에 클래스를 주입한다.
@RequiredArgsConstructor public class ElkService { private final ElasticsearchOperations elasticsearchOperations; private final ElasticSearchClient elasticSearchClient; ... }
1) 인덱스 생성
/** * create Index (reservation) * @return */ public String createIndex() { IndexCoordinates indexCoordinates = elasticsearchOperations.getIndexCoordinatesFor(ReservationIndex.class); IndexQuery indexQuery = new IndexQueryBuilder() .withId(UUID.randomUUID().toString()) .withObject(new ReservationIndex()) .build(); return elasticsearchOperations.index(indexQuery, indexCoordinates); }
2) Document insert
/** * insert 문서 * @param reservationIndexList * @return */ public List insertDocument(List reservationIndexList) { return (List) elasticsearchOperations.save(reservationIndexList); }
from http://devfunny.tistory.com/419 by ccl(A) rewrite - 2021-02-09 20:27:16