Elasticsearch 스프링 부트 프로젝트를 1.5.7에서 2.2.1로 업그레이드하려고합니다. 내 프로젝트에있는 의존성 (탄력적 검색과 관련된)은 spring-data-Elasticsearch뿐입니다. 그러나 SuggestRequestBuilder
와 같은 class 중 일부가 누락 / 지원 중단되어 빌드가 실패합니다. Google에서도 확인한 적절한 대안을 찾을 수 없었습니다. 누구든지이 suggestRequestBuilder
, suggestionResponse
를 사용하는 대체 방법을 찾도록 도와 줄 수 있습니까?
-
SuggestRequestBuilder.java / org.elasticsearch.action.suggest가 누락되었습니다.카테고리 없음 2020. 8. 12. 09:29
질문
답변1
spring-boot 2.3.1 및 spring-boot-starter-data-elasticsearch에서는
org.elasticsearch.search.suggest. *
패키지의Suggest *
class를 사용하고 있습니다.예 :
ES 인덱스에 추가 된 일부 제품이 있습니다.
{ "_index": "products", "_id": "WtYOV3MBurwvUvNLpjxM", "_source": { "productName": "Hammer", "available": true } }, { "_index": "products", "_id": "XtYdV3MBurwvUvNLXjzO", "_source": { "productName": "Hammer with handle", "available": true } }
이제는
productName
필드를 기반으로 'hamer'라는 단어를 제안하고 싶지 않습니다. 다음은 올바른 제안을 찾기위한 완전한 코드입니다.import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.suggest.Suggest; import org.elasticsearch.search.suggest.SuggestBuilder; import org.elasticsearch.search.suggest.SuggestBuilders; import org.elasticsearch.search.suggest.SuggestionBuilder; import org.elasticsearch.search.suggest.term.TermSuggestion; import org.springframework.data.elasticsearch.client.ClientConfiguration; import org.springframework.data.elasticsearch.client.RestClients; import org.springframework.stereotype.Component; import ...; @Component public class ProductService { private static final Logger logger = getLogger(ProductService.class); public void suggestProducts() { ClientConfiguration clientConfiguration = ClientConfiguration.builder().connectedTo("localhost:9200").build(); RestHighLevelClient client = RestClients.create(clientConfiguration).rest(); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); SuggestionBuilder termSuggestionBuilder = SuggestBuilders.termSuggestion("productName").text("Hamer"); SuggestBuilder suggestBuilder = new SuggestBuilder(); suggestBuilder.addSuggestion("suggest_product", termSuggestionBuilder); searchSourceBuilder.suggest(suggestBuilder); SearchRequest searchRequest = new SearchRequest(); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse; try { searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); Suggest suggest = searchResponse.getSuggest(); TermSuggestion termSuggestion = suggest.getSuggestion("suggest_product"); for (TermSuggestion.Entry entry : termSuggestion.getEntries()) { for (TermSuggestion.Entry.Option option : entry) { String suggestText = option.getText().string(); logger.info(suggestText); } } } catch (IOException e) { logger.error(e.getMessage()); } } }
그리고 이것은 올바른 결과를 출력합니다 : "hammer". 물론 사용 가능한 다른 유형의 제안 (
termSuggestion
,completionSuggestion
,phraseSuggestion
)이 있으며 쿼리 매개 변수를 유연하게 조정할 수 있습니다.