【问题标题】:ElasticSearch Java high Level Rest Client: Suggest-searchElasticSearch Java 高级 Rest 客户端:建议搜索
【发布时间】:2018-12-19 00:04:32
【问题描述】:

如何进行这样的查询:

{
  "suggest": {
    "my_index_suggest": {
      "prefix": value,
      "completion": {
        "field": "suggest_field",
        "fuzzy": {
          "fuzziness" : 1
        },
        "size": 5
      }
    }
  }
}

使用 Java 高级 Rest 客户端?我不确定我应该使用 SuggestionBuilder 还是 QueryBuilder。

用 JS 或 Python 在一分钟内完成的事情又是一次在 Java 中的冒险????

【问题讨论】:

    标签: java elasticsearch


    【解决方案1】:

    好的,这是我自己的解决方案:

    public List<String> getSuggestion(String input) throws IOException {
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        SuggestionBuilder termSuggestionBuilder = SuggestBuilders.completionSuggestion("my_index_suggest").text(input);
    
        SuggestBuilder suggestBuilder = new SuggestBuilder();
        suggestBuilder.addSuggestion("suggest_field", termSuggestionBuilder);
        searchSourceBuilder.suggest(suggestBuilder);
    
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.source(searchSourceBuilder);
    
        SearchResponse searchResponse = suggestionIndexClient.search(searchRequest, RequestOptions.DEFAULT);
        return StreamSupport.stream(Spliterators.spliteratorUnknownSize(searchResponse.getSuggest().iterator(), Spliterator.ORDERED), false)
                .flatMap(suggestion -> suggestion.getEntries().get(0).getOptions().stream())
                .map((Suggest.Suggestion.Entry.Option option) -> option.getText().toString())
                .collect(Collectors.toList());
    }
    

    如果您不喜欢 Streams,请随意使用这个 Suggestion generic monstrosity 以及没人要求的 while-loop:

        Iterator<Suggest.Suggestion<? extends Suggest.Suggestion.Entry<? extends Suggest.Suggestion.Entry.Option>>> iterator = searchResponse.getSuggest().iterator();
        Suggest.Suggestion<? extends Suggest.Suggestion.Entry<? extends Suggest.Suggestion.Entry.Option>> suggestion;
    
        List<String> resultList = null;
        while (iterator.hasNext()) {
            suggestion = iterator.next();
            resultList = fn.getEntries().get(0).getOptions().stream()
                .map((Suggest.Suggestion.Entry.Option option) -> option.getText().toString())
                .collect(Collectors.toList());
        }
    
        return resultList;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多