亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python 實現elasticsearch group by

系統 1519 0

es實現聚合

es通過 agg 實現聚合,詳情可見 es文檔


有時候查詢es數據的時候可能需要實現多字段group by的功能,例如:

          
            SELECT sum(item_count) from A group by field1, field2, field3
          
        

要實現多個維度的聚合,需要嵌套的 agg 查詢語句:

          
            {
    "query": {
    },
    "aggs": {
        "field1": {
            "terms": {
                "field": "field1",
                "size": 2147483647 #設置一個大的分桶數,防止一次統計不完整
            },
            "aggs": {
                "field2": {
                    "terms": {
                        "field": "field2",
                        "size": 2147483647
                    },
                    "aggs": {
                        "field3": {
                            "terms": {
                                "field": "field3",
                                "size": 2147483647
                            },
                            "aggs": {
                                "sum_field": {
                                    "sum": {
                                        "field": "sum_field"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "size": 0
}
          
        

用函數構建聚合語句的 agg 部分:

          
            def build_query_aggs(fields, sum_field):
    agg_data = {}
    curr_field = agg_data
    for item in fields:
        curr_field[item] = {
            "terms": {
                "field": item,
                "size": 2147483647
            },
            "aggs": {}
        }
        curr_field = curr_field[item]["aggs"]
    curr_field[sum_field] = {
        "sum": {
                "field": sum_field
            }
    }
    return agg_data
          
        

處理得到的數據,將其組織成list:

          
            def build_es_aggs_data(data, fields, sum_field):
    curr_field = None
    res_data = []
    if len(fields) > 0:
        curr_field = fields[0]
    else:
        return
    curr_buckets = data[curr_field]['buckets']
    for item in curr_buckets:
        if len(fields) == 1:
            curr_data= {}
            curr_data[curr_field] = item['key']
            curr_data[sum_field] = item[sum_field]["value"]
            res_data.append(curr_data)
        else:
            pre_data = deepcopy(build_es_aggs_data(item, fields[1:], sum_field))
            for pre_item in pre_data:
                pre_item[curr_field] = item['key']
                res_data.append(pre_item)
    return res_data
          
        

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美综合国产精品日韩一 | 国产精品国产三级国产an | 精品一久久香蕉国产线看观看下 | 99久久综合狠狠综合久久一区 | 99在线精品国产不卡在线观看 | 国产一区二区三区在线观看视频 | 99精品久久久久久久婷婷 | 国产一区二区三区高清视频 | xxxxyoujizz护士| 毛片免费毛片一级jjj毛片 | 欧美激情综合 | 精品视频一二三区 | 爱插综合网 | 中文字幕日韩国产 | 日本高清专区一区二无线 | 免费人成激情视频在线观看冫 | 99热婷婷| 久久天堂夜夜一本婷婷麻豆 | 欧美性视频在线 | 色综合中文字幕 | 99r精品| 毛片大片免费看 | 国产高清国内精品福利99久久 | 欧美成人极品怡红院tv | 天天摸夜夜添久久精品麻豆 | 九九热这里都是精品 | 天天操天天摸天天碰 | 精品国产日韩一区三区 | 精品综合久久久久久88小说 | 精品精品国产理论在线观看 | 国产精品亚洲一区二区在线观看 | 奇米第四狠狠777高清秒播 | 国产伦久视频免费观看视频 | 午夜大片免费男女爽爽影院久久 | 久久午夜神器 | 天天干天天舔天天操 | 手机看片久久高清国产日韩 | 香蕉成人啪国产精品视频综合网 | 亚洲国产成人久久精品hezyo | 成人在线黄色 | 国产精品九九久久精品女同 |