JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] Spring Boot에서 Elasticsearch 활용해 자동완성 API 만들기

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
Elasticsearch
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
slug
sync-mysql-and-elasticsearch
type
post
updatedAt
Dec 6, 2025 04:48 AM

✅ Spring Boot에서 Elasticsearch 활용해 자동완성 API 만들기

  1. Controller에 API 추가하기
    1. ProductController
      @RestController @RequestMapping("products") public class ProductController { ... @GetMapping("/suggestions") public ResponseEntity<List<String>> getSuggestions(@RequestParam String query) { List<String> suggestions = productService.getSuggestions(query); return ResponseEntity.ok(suggestions); } ... }
       
  1. Service에 의존성 추가하기
    1. ProductService
      @Service public class ProductService { private final ProductRepository productRepository; private final ProductDocumentRepository productDocumentRepository; private final ElasticsearchOperations elasticsearchOperations; public ProductService(ProductRepository productRepository, ProductDocumentRepository productDocumentRepository, ElasticsearchOperations elasticsearchOperations) { this.productRepository = productRepository; this.productDocumentRepository = productDocumentRepository; this.elasticsearchOperations = elasticsearchOperations; } ... }
       
  1. Service에 메서드 만들고 로직 추가하기
    1. ProductService
      @Service public class ProductService { ... public List<String> getSuggestions(String query) { Query multiMatchQuery = MultiMatchQuery.of(m -> m .query(query) .type(TextQueryType.BoolPrefix) .fields("name.auto_complete", "name.auto_complete._2gram", "name.auto_complete._3gram") )._toQuery(); NativeQuery nativeQuery = NativeQuery.builder() .withQuery(multiMatchQuery) .withPageable(PageRequest.of(0, 5)) .build(); SearchHits<ProductDocument> searchHits = this.elasticsearchOperations.search(nativeQuery, ProductDocument.class); return searchHits.getSearchHits().stream() .map(hit -> { ProductDocument productDocument = hit.getContent(); return productDocument.getName(); }) .toList(); } ... }
       
  1. Postman으로 테스트를 위한 더미 데이터 넣기
    1. { "name": "곱창 돌김생김", "description": "신선한 곱창김으로 만든 전통 방식의 돌김입니다.", "price": 3900, "rating": 4.5, "category": "식품" } { "name": "구운 돌김", "description": "불에 구워 바삭한 식감을 살린 프리미엄 돌김.", "price": 4500, "rating": 4.7, "category": "식품" } { "name": "완도 곱창 돌김 100매", "description": "완도산 곱창김 100매 구성, 김밥용으로 적합.", "price": 12900, "rating": 4.8, "category": "식품" }
      notion image
       
  1. Postman으로 테스트해보기
    1. notion image
      • 돌, 돌김, 곱, 곱창으로 요청을 보냈을 때 자동 완성 API의 응답값이 잘 날라오는 걸 확인할 수있다.
author
JSCODE 박재성
category
Elasticsearch
createdAt
Dec 6, 2025
series
실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
slug
type
series-footer
updatedAt
Dec 6, 2025 05:12 AM
📎
이 글은 실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편) 강의의 수업 자료 중 일부입니다.