ElasticSearch 5.0 Java获取特定字段
在ElasticSearch 2.X中,当我想从Java API中的特定类型查询特定字段时,我可以执行如下操作: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
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”是什么?我从哪里获取它?