elasticsearch聚合之bucket terms聚合( 二 )


elasticsearch聚合之bucket terms聚合

文章插图
3.5.2 运行结果
elasticsearch聚合之bucket terms聚合

文章插图
3.6 filter-以省分组,并且只包含北的省,但是需要排除湖北省3.6.1 dslGET /index_person/_search{"size": 0,"aggs": {"agg_province": {"terms": {"field": "province","include": ".*北.*","exclude": ["湖北"]}}}}注意:当是字符串时,可以写正则表达式,当是数组时,需要写具体的值 。
3.6.2 运行结果
elasticsearch聚合之bucket terms聚合

文章插图
3.7 多term聚合-根据省和性别聚合 , 然后根据最大年龄倒序3.7.1 dslGET /index_person/_search{"size": 0,"aggs": {"genres_and_products": {"multi_terms": {"size": 10,"shard_size": 25,"order":{"max_age": "desc"},"terms": [{"field": "province","missing": "defaultProvince"},{"field": "sex"}]},"aggs": {"max_age": {"max": {"field": "age"}}}}}}注意: terms聚合默认不支持多字段聚合 , 需要借助别的方式 。此处使用multi terms来实现多字段聚合 。
3.7.2 运行结果
elasticsearch聚合之bucket terms聚合

文章插图
3.8 missing value 处理
elasticsearch聚合之bucket terms聚合

文章插图
3.9 多个聚合-同时返回根据省聚合和根据性别聚合3.9.1 dslGET /index_person/_search{"size": 0,"aggs": {"agg_province": {"terms": {"field": "province"}},"agg_sex":{"terms": {"field": "sex","size": 10}}}}3.9.2 运行结果
elasticsearch聚合之bucket terms聚合

文章插图
4. 总结4.1 可以聚合的字段一般情况下,只有如下几种字段类型可以进行聚合操作 keyword,numeric,ip,booleanbinary类型的字段 。text类型的字段默认情况下是不可以进行聚合的,如果需要聚合,需要开启fielddata
elasticsearch聚合之bucket terms聚合

文章插图
4.2 如果我们想返回所有的聚合Term结果如果我们只想返回1001000个唯一结果,可以增大size参数的值 。但是如果我们想返回所有的,那么推荐使用 composite aggregation
elasticsearch聚合之bucket terms聚合

文章插图
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的值大 。
elasticsearch聚合之bucket terms聚合

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

文章插图
4.4.2 字段值排序使用字段值排序,不管是正序还是倒序 , 结果是准确的 。
elasticsearch聚合之bucket terms聚合

文章插图
4.4.3 子聚合排序【elasticsearch聚合之bucket terms聚合】
elasticsearch聚合之bucket terms聚合

文章插图
4.5 多term聚合
elasticsearch聚合之bucket terms聚合

文章插图
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

    推荐阅读