gpt4 book ai didi

用户定义组的 Elasticsearch 聚合

转载 作者:行者123 更新时间:2023-12-03 01:43:36 27 4
gpt4 key购买 nike

假设我在 ES 中有这些数据。

| KEY        | value       |
|:-----------|------------:|
| A | 1|
| A | 2|
| B | 2|
| C | 3|
| D | 4|
| E | 5|
| E | 5|
| F | 6|

我用这个
{
"from": 0,
"size": 0,
"query": {
"filtered" : {
"query" : {
"match_all" : {}
},
"filter" : {
"bool" : {
"must" : [
{"terms": {"key": ["A", "B", "C", "D", "E", "F"]}}
]
}
}
}
},
"aggs" : {
"sum_value" : {
"terms" : { "field" : "key" },
"aggs" : {
"sum_value" : { "sum" : { "field" : "value" } }
}
}
}
}

要获得相同 key 的总和,结果将如下所示:
"sum_uv": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "A",
"doc_count": 2,
"sum_value": {
"value": 3
}
}
....
]
}

但是现在,我想对同一组中的所有元素求和,例如,我有一个映射数据,它告诉我组信息:
group1 = [A, B, C]
group2 = [D, E, F]
.....

我认为我需要一个嵌套聚合,但我不知道这样做。

结果将如下所示:
sum_group1 = 8
sum_group2 = 20
......

提前致谢!

最佳答案

至少有两种方法可以做到这一点:

  • 如果组是固定的,您可以将组名称添加到每个文档,然后先聚合组,然后聚合值。
  • 如果您想要更动态的方法,可以使用 filter + regexp 对结果进行分组。请参阅此处的示例:https://www.elastic.co/blog/quick-tips-regex-filter-buckets

  • 使用过滤器的两个示例:

    1
    {
    "size": 0,
    "aggs": {
    "groups": {
    "filters": {
    "filters": {
    "group1": { "terms": { "key": [ "A","B","C" ] } },
    "group2": { "terms": { "key": [ "D","E","F" ] } }
    }
    },
    "aggs": {
    "groupsum": {
    "sum": {
    "field": "key"
    }
    }
    }
    }
    }
    }

    2
    {
    "size": 0,
    "query": {
    "match_all": { }
    },
    "aggs": {
    "group1": {
    "filter": {
    "terms": {
    "key": [ "A", "B", "C" ]
    }
    },
    "aggs": {
    "group1sum": {
    "sum": {
    "field": "value"
    }
    }
    }
    },
    "group2": {
    "filter": {
    "terms": {
    "key": [ "D", "E", "F" ]
    }
    },
    "aggs": {
    "group2sum": {
    "sum": {
    "field": "value"
    }
    }
    }
    }
    }
    }

    关于用户定义组的 Elasticsearch 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45690920/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com