对于刚刚学习es的童鞋来说,很容易不清楚怎么获取客户端对es文档的聚合结果,下面就演示一下模仿DSL写聚合,然后获取到聚合的结果。

一, 对于下面这个简单的聚合,目的是对于文档全文匹配,聚合颜色字段。把满足匹配的文档放入自定义名称的colors桶中,参照《elasticsearch权威指南》的范围限定聚合

 {
"size" : 0,
"query" : {
"match_all" : {}
},
"aggs" : {
"colors" : {
"terms" : {
"field" : "color"
}
}
}
}

二, 对照着这个DSL写我们的java rest client api的调用方法,供业务层调用

     /**
* ES中查询所有color
*
* @param indices
* @return
*/
public SearchResponse getAllColor(String... indices) {
SearchRequest searchRequest = new SearchRequest(indices);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().size(0);
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
TermsAggregationBuilder builder = AggregationBuilders.terms("colors").field("color");
searchSourceBuilder.aggregation(builder);
searchRequest.source(searchSourceBuilder); try {
return client.getHighLevelClient().search(searchRequest);
} catch (IOException e) {
throw new BizException("聚合失败:{}", e.getCause());
}
}

三, 在我们的业务层调用上文中的getAllColor方法获取response,对response解析,获取聚合的结果

      * 颜色信息
*
* @return
*/
public List<String> getAllColorInfo() {
SearchResponse response = highRestHelper.getAllColor(getIndices());
Aggregations aggregations = response.getAggregations();
ParsedStringTerms colorTerms = aggregations.get("app_group");
List<String> colors = new ArrayList<>();
List<? extends Terms.Bucket> buckets = colorTerms.getBuckets();
for (Terms.Bucket bucket : buckets) {
String appName = bucket.getKey().toString();
colors.add(appName);
}
return colors;
}

至此即可获取所有的聚合结果,只要能够参照DSL,转换成相应的api调用,那么解析过程完全可以复用。

最新文章

  1. Linux 如何使用压缩与解压缩的方式将Windows下的zip压缩包上传到Linux系统
  2. requirejs按需加载angularjs文件
  3. &lt;转载&gt;NPOI Excel 单元格背景颜色对照表
  4. 12.PHP内核探索:PHP的FastCGI
  5. memcached全面剖析–3. memcached的删除机制和发展方向
  6. Ubuntu 14.04 设置静态IP
  7. oracle工具 sqlplus 用户管理
  8. 深入解析FileInputStream和FileOutputStream
  9. Python Xcode搭建Python环境以及使用PyCharm CE
  10. pandas 对数据帧DataFrame中数据的增删、补全及转换操作
  11. Unable to find utility "instruments", not a developer tool or in PATH
  12. pictureBox绑定Base64字符串
  13. Unity3D中Layers和LayerMask解析
  14. 将Pytorch模型从CPU转换成GPU
  15. 树莓派挂载和卸载U盘或移动硬盘
  16. [BZOJ4557][JLOI2016]侦察守卫(树形DP)
  17. H264裸流分析中,能获取哪些信息?
  18. Java enum枚举类型
  19. elasticsearch实现网站搜索
  20. MYSQl修改临时文件目录

热门文章

  1. Golang 实现设计模式 —— 装饰模式
  2. CSDN VIP如何添加自定义栏目
  3. Github桌面端安装慢问题
  4. [NOIp2009] luogu P1071 潜伏者
  5. [JZOJ5863] 【NOIP2018模拟9.11】移动光标
  6. 【OUC2019写作】论文写作第九小组英语常用表达整理
  7. WPF使用border画框
  8. pycharm中常见错误提示
  9. 小白学 Python(8):基础流程控制(下)
  10. LoadRunner脚本优化—迭代的组合用法