Spring Boot와 ElasticSearch를 연동하여 간단한 API 호출하는 방법
1. Spring Boot 프로젝트 생성
우선 Spring Boot 프로젝트를 생성합니다.
2. ElasticSearch 의존성 추가
build.gradle 파일에 ElasticSearch 의존성을 추가합니다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
3. ElasticSearch 설정
application.properties 파일에 ElasticSearch 클러스터와의 연결을 설정합니다.
spring.data.elasticsearch.cluster-name=my-application
spring.data.elasticsearch.cluster-nodes=localhost:9300
4. 인덱스 생성 및 데이터 색인
데이터를 저장할 인덱스를 생성하고, 데이터를 색인합니다.
@Service
public class ElasticSearchService {
@Autowired
private ElasticsearchOperations elasticsearchOperations;
public void createIndex() {
elasticsearchOperations.indexOps(MyData.class).create();
}
public void insertData() {
MyData data1 = new MyData(1L, "John Doe");
MyData data2 = new MyData(2L, "Jane Doe");
MyData data3 = new MyData(3L, "Mike Smith");
elasticsearchOperations.save(data1);
elasticsearchOperations.save(data2);
elasticsearchOperations.save(data3);
}
public List<MyData> searchData(String keyword) {
NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
queryBuilder.withQuery(QueryBuilders.matchQuery("name", keyword));
SearchHits<MyData> searchHits = elasticsearchOperations.search(queryBuilder.build(), MyData.class);
List<MyData> results = new ArrayList<>();
searchHits.forEach(hit -> results.add(hit.getContent()));
return results;
}
}
5. API 호출
API 컨트롤러에서 ElasticSearchService를 사용하여 검색을 수행
@RestController
@RequestMapping("/search")
public class SearchController {
@Autowired
private ElasticSearchService elasticSearchService;
@GetMapping
public List<MyData> search(@RequestParam("q") String query) {
return elasticSearchService.searchData(query);
}
}
/search 엔드포인트로 GET 요청을 보내면, q 쿼리 파라미터를 사용하여 검색어를 전달할 수 있습니다. ElasticSearchService를 사용하여 검색을 수행하고, 검색 결과를 반환합니다.
'코딩 > ElasticSearch' 카테고리의 다른 글
엘라스틱서치 매핑 (0) | 2022.11.02 |
---|---|
엘라스틱서치 검색 방법 (URI, Request Body) (0) | 2022.05.14 |
[Elasticsearch]엘라스틱서치의 기본개념 및 장점/단점 (0) | 2022.05.14 |