ElasticSearch Java High Level Rest Client: Предложить поиск - PullRequest
0 голосов
/ 18 декабря 2018

Как мне сделать запрос вроде этого:

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

с Java High Level Rest Client?Я не уверен, стоит ли мне использовать SuggestionBuilder или QueryBuilder.

То, что достигается за минуту в JS или Python, снова является приключением в Java ?

1 Ответ

0 голосов
/ 18 декабря 2018

Хорошо, вот мое собственное решение:

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());
}

Если вам не нравятся потоки, не стесняйтесь использовать это универсальное предложение чудовищности плюс цикл while, который никто не просил:

    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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...