elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

ElasticSearch 5.0 Java获取特定字段

ElasticSearch 5.0 Java获取特定字段,java,elasticsearch,Java,elasticsearch,在ElasticSearch 2.X中,当我想从Java API中的特定类型查询特定字段时,我可以执行如下操作: public List<String> getNames(String index, String type) { List<String> names = new ArrayList<>(); SearchResponse scrollResp = client.prepareSearch() .setIndi

在ElasticSearch 2.X中,当我想从Java API中的特定类型查询特定字段时,我可以执行如下操作:

  public List<String> getNames(String index, String type) {
    List<String> names = new ArrayList<>();
    SearchResponse scrollResp = client.prepareSearch()
        .setIndices(index)
        .setTypes(type)
        .addFields("my_name")
        .setQuery(QueryBuilders.matchAllQuery())
        .setSize(10).execute().actionGet();
    for (SearchHit hit : scrollResp.getHits().getHits()) {
      Map<String, SearchHitField> fields = hit.getFields();
      String name = fields.get("my_name").value();
      names.add(name);
    }
    return names;
  }
public List getNames(字符串索引,字符串类型){
列表名称=新的ArrayList();
SearchResponse scrollResp=client.prepareSearch()
.SETINDEX(索引)
.setTypes(类型)
.addFields(“我的名字”)
.setQuery(QueryBuilders.matchAllQuery())
.setSize(10).execute().actionGet();
for(SearchHit:scrollResp.getHits().getHits()){
Map fields=hit.getFields();
String name=fields.get(“我的名字”).value();
名称。添加(名称);
}
返回姓名;
}
然而,在ES 5.0中,“addFields”方法已不复存在。有一种叫做“addStoredField”的东西。但是,如果没有将映射中的字段显式标记为存储字段,则这似乎不起作用。而上面代码的“hit.getFields()”只是返回一组空字段(fields.size()==0)

如何获得与2.X相同的5.X功能?也就是说,从结果中获取特定字段,而不显式存储它们


我在这里使用PreBuiltTransportClient作为客户端。

如果使用
.setFetchSource
方法来定义所使用的字段,该怎么办:

SearchResponse scrollResp = client.prepareSearch()
        .setIndices(index)
        .setTypes(type)
        .setSearchType(SearchType.QUERY_AND_FETCH)
        .setFetchSource(new String[]{"my_name"}, null) <--- your specific field
        .setQuery(QueryBuilders.matchAllQuery())
        .setSize(10).execute().actionGet();
SearchResponse scrollResp=client.prepareSearch()
.SETINDEX(索引)
.setTypes(类型)
.setSearchType(SearchType.QUERY_和_FETCH)

.setFetchSource(新字符串[]{“我的名字”},null)“client.prepareSearch”是什么?我从哪里获取它?