我的任务是将代码从 ElasticSearch 7 升级到 ES 8。大部分工作都很顺利,直到我遇到 CompletionSuggestion 代码。索引中的每条记录都有此字段:\'suggest&
我的任务是将代码从 ElasticSearch 7 升级到 ES 8。大部分工作都很顺利,直到我遇到 CompletionSuggestion 代码。
索引中的每个记录都有此字段:\'suggest\' : {\'type\' : \'completion\',\'analyzer\' : \'simple\',\'preserve_separators\' : true,\'preserve_position_increments\' : true,\'max_input_length\' : 50}
当用户开始在搜索字段中输入内容时,我们会根据上述“建议”字段返回的结果,向他们提供可能使用的搜索词列表。
我们当前的代码:` List result = new ArrayList<>();CompletionSuggestionBuilder csb = new CompletionSuggestionBuilder(\'suggest\');csb.text(query).size(100); // query 是传入的搜索文本
SearchSourceBuilder ssb = new SearchSourceBuilder();
SearchRequest sr = new SearchRequest(index);
ssb.suggest(new SuggestBuilder()
.addSuggestion("Suggestion", csb));
sr.source(ssb);
SearchResponse resp = rhlClient.search(sr, RequestOptions.DEFAULT);
if (resp.getSuggest().size() == 0) {
return result;
}
Suggest.Suggestion<? extends Suggest.Suggestion.Entry<? extends Suggest.Suggestion.Entry.Option>> suggestionBldr = resp.getSuggest().getSuggestion("Suggestion");
Iterator<? extends Suggest.Suggestion.Entry.Option> iterator =
suggestionBldr.iterator().next().getOptions().iterator();
// We then just loop through the iterator and build the result
`
我曾尝试使用新的 CompletionSuggester 以及其他新选项,但我所见/尝试过的每个教程或操作方法都返回完整记录的列表,而不是像我们之前得到的搜索词列表。
如何让 ES8 返回建议术语列表,而不是完整记录?