implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.17.13'
ElasticSearch Config 작성
@Configuration
@EnableElasticsearchRepositories(basePackages = "레포지토리위치") // Elasticsearch repository 패키지 설정
public class ElasticSearchConfig {
@Bean(destroyMethod = "close")
public RestHighLevelClient restHighLevelClient() {
return new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http") // Elasticsearch 호스트 및 포트 설정
)
);
}
}
@Data
@Document(indexName = "music")
@NoArgsConstructor
public class MusicInfo{
@Id
private String id;
private String artist;
private String musicFileName;
private String musicFileUrl;
}
repository 구성
@Repository
public interface MusicInfoRepository extends ElasticsearchRepository<MusicInfo, Long> {
List<MusicInfo> findByMusicFileName(@Param("MusicName") String musicName);
List<MusicInfo> findByArtist(@Param("Artist") String Artist);
}
Service 구성
//ElasticsearchOperations (elasticsearchTemplate)
@Override
public List<MusicInfo> findByArtist(String artist) {
NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(QueryBuilders.boolQuery()
.should(QueryBuilders.matchPhrasePrefixQuery("artist", artist))
.should(QueryBuilders.wildcardQuery("artist", "*" + artist + "*"))
)
.build();
SearchHits<MusicInfo> searchHits = elasticsearchTemplate.search(searchQuery, MusicInfo.class);
return searchHits.getSearchHits().stream()
.map(SearchHit::getContent)
.collect(Collectors.toList());
}
// elasticRepository
@Override
public List<MusicInfo> saveAll(List<MusicInfo> musicInfos) {
return (List<MusicInfo>) musicInfoRepository.saveAll(musicInfos);
}
해당 코드들은 실제로 사용되는 코드는 아니고 elasticsearch에 대한 이해를 위해 간단하게 구성된 코드입니다.
https://docs.spring.io/spring-data/elasticsearch/docs/current-SNAPSHOT/reference/html/#reference
공부 후 위의 의문에 대해 차차 답해볼 예정입니다.