- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像这样的 elasticsearch 聚合查询。
{
"aggs": {
"customer": {
"aggs": {
"Total_Sale": {
"sum": {
"field": "amount"
}
}
},
"terms": {
"field": "org",
"size": 50000
}
}
}
}
它会导致像下面这样的桶聚合
{
"aggregations": {
"customer": {
"buckets": [
{
"Total_Sale": { "value": 9999 },
"doc_count": 8,
"key": "cats"
},
{
"Total_Sale": { "value": 8888 },
"doc_count": 6,
"key": "tigers"
},
{
"Total_Sale": { "value": 444},
"doc_count": 5,
"key": "lions"
},
{
"Total_Sale": { "value": 555 },
"doc_count": 2,
"key": "wolves"
}
]
}
}
}
我想要另一个基于 doc_count 的范围桶聚合。所以,最终需要的结果是
{
"buckets": [
{
"Sum_of_Total_Sale": 555, // If I can form bucket, I can get this using sum_bucket. So, getting bucket is important.
"Sum_of_doc_count": 2,
"doc_count": 1,
"key": "*-3",
"to": 3.0
},
{
"Sum_of_Total_Sale": 9332,
"Sum_of_doc_count": 11,
"doc_count": 2,
"from": 4.0,
"key": "4-6",
"to": 6.0
},
{
"Sum_of_Total_Sale": 9999,
"Sum_of_doc_count": 8,
"doc_count": 1,
"from": 7.0,
"key": "7-*"
}
]
}
最佳答案
据我所知,没有一种聚合可以让您一次完成此操作。然而,我不时使用一种技术来克服这个限制。这个想法是重复相同的 terms/sum
聚合,然后对您感兴趣的每个范围使用 bucket_selector
管道聚合。
POST index/_search
{
"size": 0,
"aggs": {
"*-3": {
"terms": {
"field": "org",
"size": 1000
},
"aggs": {
"Total_Sale": {
"sum": {
"field": "amount"
}
},
"*-3": {
"bucket_selector": {
"buckets_path": {
"docCount": "_count"
},
"script": "params.docCount <= 3"
}
}
}
},
"*-3_Total_Sales": {
"sum_bucket": {
"buckets_path": "*-3>Total_Sale"
}
},
"*-3_Total_Docs": {
"sum_bucket": {
"buckets_path": "*-3>_count"
}
},
"4-6": {
"terms": {
"field": "org",
"size": 1000
},
"aggs": {
"Total_Sale": {
"sum": {
"field": "amount"
}
},
"4-6": {
"bucket_selector": {
"buckets_path": {
"docCount": "_count"
},
"script": "params.docCount >= 4 && params.docCount <= 6"
}
}
}
},
"4-6_Total_Sales": {
"sum_bucket": {
"buckets_path": "4-6>Total_Sale"
}
},
"4-6_Total_Docs": {
"sum_bucket": {
"buckets_path": "4-6>_count"
}
},
"7-*": {
"terms": {
"field": "org",
"size": 1000
},
"aggs": {
"Total_Sale": {
"sum": {
"field": "amount"
}
},
"7-*": {
"bucket_selector": {
"buckets_path": {
"docCount": "_count"
},
"script": "params.docCount >= 7"
}
}
}
},
"7-*_Total_Sales": {
"sum_bucket": {
"buckets_path": "7-*>Total_Sale"
}
},
"7_*_Total_Docs": {
"sum_bucket": {
"buckets_path": "7-*>_count"
}
}
}
}
您会得到一个看起来像这样的答案,其中包含您在 xyz_Total_Sales
和 xyz_Total_Docs
结果中寻找的确切数字:
"aggregations": {
"*-3": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "wolves",
"doc_count": 2,
"Total_Sale": {
"value": 555
}
}
]
},
"7-*": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "cats",
"doc_count": 8,
"Total_Sale": {
"value": 9999
}
}
]
},
"4-6": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "tigers",
"doc_count": 6,
"Total_Sale": {
"value": 8888
}
},
{
"key": "lions",
"doc_count": 5,
"Total_Sale": {
"value": 444
}
}
]
},
"*-3_Total_Sales": {
"value": 555
},
"*-3_Total_Docs": {
"value": 2
},
"4-6_Total_Sales": {
"value": 9332
},
"4-6_Total_Docs": {
"value": 11
},
"7-*_Total_Sales": {
"value": 9999
},
"7_*_Total_Docs": {
"value": 8
}
}
关于Elasticsearch基于doc_count的范围桶聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38628972/
对于此索引和样本数据: PUT job_offers { "mappings": { "properties": { "location": { "proper
我正在使用 Elasticsearch 桶聚合。我有一组文档,每个文档都有一个类别字段,它是一个数组。我需要获取每个类别的计数以及搜索结果。但目前,我得到了错误的 doc_count。 这是我的聚合查
我目前正在尝试根据 Elastic Search 中收集的数据生成图表。每次生成用户时,我都会在 ES 中插入一条记录,其中包含以下(示例)数据: { "country": "US", "id
{ "size": 0, "aggs": { "categories_agg": { "terms": { "f
我正在深入研究 ElasticSearch 1.0 中的新聚合函数。我正在尝试获取有关一堆文档(日志行)的一些统计数据。 每个文档都算作一次点击,我想获取给定时间段内每小时的平均点击数。每个文档都有一
我目前正在Kibana开发Vega可视化。下图显示了索引的doc_count,它实际上是Kibana在Amazon ELK中提供的默认脚本。尽管在https://vega.github.io/edit
我写了一些聚合查询来获取总数(总和)和唯一计数。但结果有点困惑。 唯一值大于 doc_count。 是否可以? 我知道 cardinality aggs 是实验性的,可以获得不同值的近似计数。 htt
我在 Elasticsearch 中有如下术语查询。 GET http://localhost:9200/adapters/request/_search { "query": {
我的 ES 集群中有一堆用户生成的事件。每个事件都包含用户的 UUID。 我正在尝试编写一个查询,根据每个用户生成的事件数量将用户分为低、中和高事件。 我正在使用此查询来获取每个用户生成的事件数: {
我是一名优秀的程序员,十分优秀!