使用Java API查询Elasticsearch中的Completion建议者

bil*_*kid 5 elasticsearch

我创建了索引,并将"建议"字段的映射类型设置为完成.我无法弄清楚如何在弹性搜索(Java API)中配置完成建议的查询

我正在尝试使用此查询来实现我的实现.

"song-suggest" : {
    "text" : "n",
    "completion" : {
        "field" : "suggest"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的,

CompletionSuggestionBuilder compBuilder = new CompletionSuggestionBuilder("complete"); 
compBuilder.text("n");
compBuilder.field("suggest");

SearchResponse searchResponse = localClient.prepareSearch(INDEX_NAME)
    .setTypes("completion")
    .setQuery(QueryBuilders.matchAllQuery())
    .addSuggestion(compBuilder)
    .execute().actionGet();

 CompletionSuggestion compSuggestion = searchResponse.getSuggest().getSuggestion("complete");
Run Code Online (Sandbox Code Playgroud)

我错过了什么,做错了吗?谢谢!

Jet*_*die 2

不确定这是否是最好的做法。但这对我有用。希望能帮助到你。

@Override
public List<SuggestionResponse> findSuggestionsFor(String suggestRequest) {
    CompletionSuggestionBuilder suggestionsBuilder = new CompletionSuggestionBuilder("completeMe");
    suggestionsBuilder.text(suggestRequest);
    suggestionsBuilder.field("suggest");
    SuggestRequestBuilder suggestRequestBuilder =
            client.prepareSuggest(MUSIC_INDEX).addSuggestion(suggestionsBuilder);

    logger.debug(suggestRequestBuilder.toString());

    SuggestResponse suggestResponse = suggestRequestBuilder.execute().actionGet();

    Iterator<? extends Suggest.Suggestion.Entry.Option> iterator =
            suggestResponse.getSuggest().getSuggestion("completeMe").iterator().next().getOptions().iterator();

    List<SuggestionResponse> items = new ArrayList<>();
    while (iterator.hasNext()) {
        Suggest.Suggestion.Entry.Option next = iterator.next();
        items.add(new SuggestionResponse(next.getText().string()));
    }
    return items;
}
Run Code Online (Sandbox Code Playgroud)