elasticsearch聚合之bucket terms聚合


目录
  • composite aggregation
    如果我们想返回所有的聚合Term结果

    4.3 聚合数据不准

    我们通过terms聚合到的结果是一个大概的结果,不一定是完全正确的。
    为什么?.
    举个例子: 如果我们的集群有3个分片,此处我们想返回值最高的5个统计。即size=5,假设先不考虑shard_size参数,那么此时每个节点会返回值最高的5个统计,然后再次聚合,返回,返回最终值最高的5个。这个貌似没什么问题,但是因为我们的数据是分布es的各个节点上的,可能某个统计项(北京市的用户数),在A节点是是排名前5,但是在B节点上不是排名前5,那么最终的统计结果是否是就会漏统计了。

    如何解决:
    我们可以让es在每个节点上多返回几个结果,比如:我们的size=5,那么我们每个节点就返回 size * 1.5 + 10 个结果,那么误差相应的就会减少。 而这个size * 1.5 + 10就是shard_size的值,当然我们也可以手动指定,但一般需要比size的值大。

    聚合数据不准

    4.4 排序注意事项

    4.4.1 _count 排序

    默认情况下,使用的是 _count 倒序的,但是我们可以指定成升序,但是这是不推荐的,会导致错误结果。如果我们想要升序,可以使用 rare_terms聚合。
    _count排序注意事项

    4.4.2 字段值排序

    使用字段值排序,不管是正序还是倒序,结果是准确的。
    字段值排序

    4.4.3 子聚合排序

    子聚合排序

    4.5 多term聚合

    多term聚合

    5、源码地址

    https://gitee.com/huan1993/spring-cloud-parent/blob/master/es/es8-api/src/main/java/com/huan/es8/aggregations/bucket/TermsAggs.java

    6. 参考链接

    1. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html
    2. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-multi-terms-aggregation.html