【ElasticSearch】常用聚合统计技巧集锦

本文介绍了ElasticSearch的高效分页策略——桶分页,利用管道聚合进行二次统计,以及如何实现聚合前后的过滤。同时,文章还探讨了类似Spark的struct字段捆绑聚合——Top_Hits,用于在分组时保留其他字段信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、桶分页

相较于Scroll召回数量大且吃内存严重,和SearchAfter滚动排序参数的难以维护,桶分页提供了更优化的分页召回思路:即在内存中基于全量数据排序,基于一页数据召回,减少了网络传输并避免了维护排序参数的繁琐。

{
   
    "size":0,
    "aggregations":{
   
        # total_num:统计结果总数,precision_threshold:精确度默认为100,值越大精确度越大,但消耗内存也越大
        "total_num":{
   
            "cardinality":{
   
                "field":"product_name",
                "precision_threshold":100
            }
        },
        "product_name":{
   
            "terms":{
   
                "field":"product_name",
                # size:terms聚合中如果想根据全量数据排序,size需要设置为Integer的最大值
                "size":2147483647,
                "min_doc_count":1,
                "shard_min_doc_count":0,
                "show_term_doc_count_error":false,
                "execution_hint":"map",
                "order":[
                    {
   
                        "_count":"desc"
                    },
                    {
   
                        "_key":"asc"
                    }
                ],
                 # collect_mode:遍历方法设置为广度优先遍历,效率较深度优先遍历高
                "collect_mode":"breadth_first"
            },
            "aggregations":{
   
                "material_estimate_exposure":{
   
                    "sum":{
   
                        "field":"goods_material_estimate_exposure"
                    }
                },
                # bucket_sort:设置桶排序,同时对排序后的全量数据通过from、 size取分页数据
                "score_bucket_sort":{
   
                    "bucket_sort":{
   
                        "sort":[
                            {
   
                                # 按照聚合树中某一聚合项进行排序
                                "material_estimate_exposure":{
   
                                    "order":"desc"
                                }
                            }
                        ],
                        "from":0,
                        "size":50,
                        "gap_policy":"SKIP"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值