我创建了索引,并将"建议"字段的映射类型设置为完成.我无法弄清楚如何在弹性搜索(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)
我错过了什么,做错了吗?谢谢!
不确定这是否是最好的做法。但这对我有用。希望能帮助到你。
@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)
归档时间: |
|
查看次数: |
5181 次 |
最近记录: |