使用JAVA API从Elastic Search中提取源数据 Suggest Search响应。

问题描述 投票:0回答:1

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

请看下面的代码,我是用它来获取建议的文本的。

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。

java elasticsearch search
1个回答
1
投票

你总是可以利用源过滤来过滤搜索结果中要返回的字段。在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));

0
投票

你可以使用 获取源码 JHLRC(java高级休息客户端),是Elasticsearch的官方java客户端。

根据链接

这个API有助于只获取文档的_source字段。

你可以从你之前的响应中获取id,然后使用它来获取这些文档的来源。

GetSourceRequest getSourceRequest = new GetSourceRequest(
    "posts", 
    "1"); 

上面的示例来自Elastic和,其中 posts 是索引名称和 1 是doc id。

© www.soinside.com 2019 - 2024. All rights reserved.