Elasticsearch是Elastic Stack核心的分布式搜索和分析引擎。
1.背景
因为业务调整采用了ES作为数据库,所以需要了解ES对于这一块的设计如何实现类似Mysql中Group By的查询的效果。
2.实现方式
ES实现Group By有两种方式:TermsAgg、CompositeAgg,它们也具有不同程度的优缺点。
TermsAgg的使用方式非常粗暴,直接进行桶嵌套即可,如下:
TermsAgg请求DSL语句
1 | { |
TermsAgg执行结果
1 | { |
CompositeAgg的使用方式略微有一些不同,下面:
CompositeAgg请求DSL语句
1 | { |
CompositeAgg执行结果
1 | { |
3.优缺点
TermsAgg
优点:使用简单、没有数据量限制。
缺点:数据结构层次深、不支持分页。
CompositeAgg
优点:使用简单、数据结构清晰可读,支持分页。
缺点:有数据量限制。
最后
至于ES这两种分组方式的性能方面还没有研究,后续学习笔记会更新性能上面的差异。