SpringBoot + ElasticSearch 연동 및 간단 API 호출해보기

    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를 사용하여 검색을 수행하고, 검색 결과를 반환합니다.

    댓글

    Designed by JB FACTORY