成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python 實現(xiàn)elasticsearch group by

kelvinlee / 441人閱讀

摘要:實現(xiàn)聚合通過實現(xiàn)聚合,詳情可見文檔有時候查詢數(shù)據(jù)的時候可能需要實現(xiàn)多字段的功能,例如要實現(xiàn)多個維度的聚合,需要嵌套的查詢語句設(shè)置一個大的分桶數(shù),防止一次統(tǒng)計不完整用函數(shù)構(gòu)建聚合語句的部分處理得到的數(shù)據(jù),將其組織成

es實現(xiàn)聚合

es通過agg實現(xiàn)聚合,詳情可見 es文檔


有時候查詢es數(shù)據(jù)的時候可能需要實現(xiàn)多字段group by的功能,例如:

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

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

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

用函數(shù)構(gòu)建聚合語句的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

處理得到的數(shù)據(jù),將其組織成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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/45168.html

相關(guān)文章

  • Elasticsearch實戰(zhàn)Java High Level REST Client實現(xiàn)員工管理案例

    摘要:開發(fā)環(huán)境這里講的是實戰(zhàn)對于如何安裝,配置環(huán)境變量,配置不做講解詳細(xì)請查看學(xué)習(xí)筆記四在上安裝和啟動增量同步數(shù)據(jù)到方式實現(xiàn)從零到一超級詳里面有做詳細(xì)講解,對于搭建集群目前還沒有寫相關(guān)文章,讀者可以自行在項目的文件中添加的依賴實現(xiàn)員工信息 開發(fā)環(huán)境: elasticsearch:7.0.0kibana:7.0.0JDK: 1.8.0_201maven: 3.6.1 這里講的是實戰(zhàn)對于如何安裝...

    Barry_Ng 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<