java - 使用JAVA API从Elastic Search建议搜索响应中提取源数据

标签 java elasticsearch search

我正在使用Java的自动完成应用程序的Completition提示器,因此能够使用JAVA api从Search响应中提取建议文本。在检查原始响应时,我看到建议响应包含_source数据(完整的文档,而不仅仅是“建议”字符串)。如何从“建议搜索”响应中提取源数据?

请在下面我用来获取建议文本的代码中找到-

SearchRequest searchRequest = new SearchRequest("my_entitiy");
CompletionSuggestionBuilder suggestionBuilder = new CompletionSuggestionBuilder("nameSuggest");
suggestionBuilder.size(10).prefix(input).skipDuplicates(true);

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.suggest(
        new SuggestBuilder().addSuggestion(SUGGESTION_NAME, suggestionBuilder));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = elasticClient.search(searchRequest, RequestOptions.DEFAULT);

Suggest suggest = searchResponse.getSuggest();
Suggest.Suggestion<Suggest.Suggestion.Entry<Suggest.Suggestion.Entry.Option>> suggesition =
        suggest.getSuggestion(SUGGESTION_NAME);
List<String> suggestionList =  new ArrayList<>();
for (Suggest.Suggestion.Entry<Suggest.Suggestion.Entry.Option> entry : suggesition.getEntries()) {
  for(Suggest.Suggestion.Entry.Option option:entry.getOptions()){
    suggestionList.add(option.getText().toString());
  }
}

在选项中,很少有方法可以提取分数,文本和突出显示。是否可以从该选项获取_source数据?我看到 toXContent 函数是否可以使用它来获取源数据?

上面的代码片段是将“建议”字符串保存到列表中,我想知道是否有可能获得完整的Doc JSON。

最佳答案

您始终可以使用源过滤来过滤要在搜索结果中返回的字段。在Elastic中,您可以在includes上下文中添加excludes_source或两者都添加。例如您只想获取field1field2,则可以如下设置_source以及查询:

{
  "query":{
    // your query goes here
  },
  "_source":{
    "includes":["field1", "field2"]
  }
}

使用高级休息客户端可以达到以下目的:
String[] includes = {"field1", "field2"};
searchSourceBuilder.fetchSource(new FetchSourceContext(true, includes, null));

关于java - 使用JAVA API从Elastic Search建议搜索响应中提取源数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62192624/

相关文章:

java : Elasticsearch listing redundant values

java - 单链表最大键搜索

search - 如何延迟 AngularJS 即时搜索?

java - 在 Maven 存储库中找不到 SpringSecurityUser 类

java - 导入 edu.stanford.nlp.ling.CoreAnnotations.OriginalTextAnnotation 无法解析

java - Eclipse 没有响应,停留在初始化 Java 工具 30%

elasticsearch - 在ES通配符v/s query_string中,用于查询多个字段的哪个更快,为什么?

mongodb - 使用Logstash JDBC插件同步MongoDB和Elasticsearch时避免重复

"fuzzy matching"字符串的算法

java - 从依赖于 jar 文件的命令行运行 Java 程序?