ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SuggestRequestBuilder.java / org.elasticsearch.action.suggest가 누락되었습니다.
    카테고리 없음 2020. 8. 12. 09:29

    질문

    Elasticsearch 스프링 부트 프로젝트를 1.5.7에서 2.2.1로 업그레이드하려고합니다. 내 프로젝트에있는 의존성 (탄력적 검색과 관련된)은 spring-data-Elasticsearch뿐입니다. 그러나 SuggestRequestBuilder 와 같은 class 중 일부가 누락 / 지원 중단되어 빌드가 실패합니다. Google에서도 확인한 적절한 대안을 찾을 수 없었습니다. 누구든지이 suggestRequestBuilder , suggestionResponse 를 사용하는 대체 방법을 찾도록 도와 줄 수 있습니까?


    답변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 )이 있으며 쿼리 매개 변수를 유연하게 조정할 수 있습니다.



     

     

     

     

    출처 : https://stackoverflow.com/questions/62910631/suggestrequestbuilder-java-org-elasticsearch-action-suggest-is-missing

    댓글

Designed by Tistory.