elasticsearch在Java中查询指定列的方法
背景
ES在查询时如果数量太多,而每行记录包含的字段很多,那就会导致超出ES的查询上线,默认是100MB,但是很多场景下我们只需要返回特定的字段即可,那么如何操作呢。
主要代码
@Autowired
private RestHighLevelClient client;
public List<Map<String,Object>> search(String index) {
List<Map<String,Object>> hitList = new ArrayList();
try {
//搜索请求
SearchRequest request = new SearchRequest(index);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//查询某字段不为空
boolQueryBuilder.must(QueryBuilders.boolQuery().must((QueryBuilders.existsQuery("字段"+ ".keyword"))));
//查询指定字段
String[] fields = {"字段1","字段2"};
sourceBuilder.fetchSource(fields,null);
//把查询添加放入请求中
sourceBuilder.query(boolQueryBuilder);
request.source(sourceBuilder);
//查询数量
sourceBuilder.size(10000);
sourceBuilder.trackTotalHits(true);
//建立SearchResponse
SearchResponse response;
response = client.search(request, RequestOptions.DEFAULT);
//封装查询的信息
for (SearchHit hit : response.getHits().getHits()) {
hitList.add(hit.getSourceAsMap());
log.debug("查询结果:{}", hit.getSourceAsString());
}
} catch (IOException e) {
e.printStackTrace();
}
return hitList;
}
String[] fields = {“字段1”,“字段2”};
sourceBuilder.fetchSource(fields,null);
注意:字段不是实体类中的字段,而是表中的名称,不是userStatus而是user_status
本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。
出处:http://www.cnblogs.com/lingyejun/
若本文如对您有帮助,不妨点击一下右下角的【推荐】。
如果您喜欢或希望看到更多我的文章,可扫描二维码关注我的微信公众号《翎野君》。
转载文章请务必保留出处和署名,否则保留追究法律责任的权利。

浙公网安备 33010602011771号