Elasticsearch 日期直方图聚合结果不匹配
Elasticsearch Date Histogram aggregations results mismatch
我已经从弹性搜索索引中获取了用户数。相同的查询,但不同的直方图间隔类型,如日、月、周、季度和年,计数未正确匹配
注意:我今年总共只有4个月的数据
这是针对月份间隔的 ES 搜索查询
{
"query": {
"range": {
"@timestamp": {
"gte": "2022-01-01",
"lte": "2022-04-14"
}
}},
"aggs": {
"dt": {
"date_histogram": {
"field": "@timestamp",
"interval": "month",
"format": "yyyy-MM-dd"
},
"aggs": {
"events": {
"nested": {
"path": "events"
},
"aggs": {
"unique_user_count": {
"cardinality": {
"field": "events.actor.id.keyword"
}
}
}
}}}}}
低于月度结果(回复)
{
"aggregations": {
"dt": {
"buckets": [
{
"key_as_string": "2022-01-01",
"key": 1640995200000,
"doc_count": 2930,
"events": {
"doc_count": 13988,
"unique_user_count": {
"value": 37
}
}
},
{
"key_as_string": "2022-02-01",
"key": 1643673600000,
"doc_count": 36910,
"events": {
"doc_count": 175151,
"unique_user_count": {
"value": 580
}
}
},
{
"key_as_string": "2022-03-01",
"key": 1646092800000,
"doc_count": 24861,
"events": {
"doc_count": 133383,
"unique_user_count": {
"value": 555
}
}
},
{
"key_as_string": "2022-04-01",
"key": 1648771200000,
"doc_count": 6005,
"events": {
"doc_count": 30730,
"unique_user_count": {
"value": 170
}
}
}
]
}
}
}
我再次 运行 相同的查询,但更改了时间间隔 = Year
{
"query": {
"range": {
"@timestamp": {
"gte": "2022-01-01",
"lte": "2022-04-14"
}
}},
"aggs": {
"dt": {
"date_histogram": {
"field": "@timestamp",
"interval": "year",
"format": "yyyy-MM-dd"
},
"aggs": {
"events": {
"nested": {
"path": "events"
},
"aggs": {
"unique_user_count": {
"cardinality": {
"field": "events.actor.id.keyword"
}
}
}
}}}}}
我收到以下年份回复
{
"aggregations": {
"dt": {
"buckets": [
{
"key_as_string": "2022-01-01",
"key": 1640995200000,
"doc_count": 70706,
"events": {
"doc_count": 353252,
"unique_user_count": {
"value": 1007
}
}
}
]
}
}
}
我的预期结果是这样的
年 = 37+580+555+170
year = 1342 ----> 但我得到“1007”错误值
如何匹配总和(月)值和年值?
在您的每月存储桶中,您是 运行 基数聚合以获得每月唯一用户数。
如果您 运行 一年内进行相同的聚合,则唯一用户数不能是每月用户数的总和,因为给定用户可能在几个月内进行过互动。
如果比较它们匹配的总事件数:13988 + 175151 + 133383 + 30730 = 353252
所以一切都很好,你只需要比较苹果和苹果
我已经从弹性搜索索引中获取了用户数。相同的查询,但不同的直方图间隔类型,如日、月、周、季度和年,计数未正确匹配
注意:我今年总共只有4个月的数据
这是针对月份间隔的 ES 搜索查询
{
"query": {
"range": {
"@timestamp": {
"gte": "2022-01-01",
"lte": "2022-04-14"
}
}},
"aggs": {
"dt": {
"date_histogram": {
"field": "@timestamp",
"interval": "month",
"format": "yyyy-MM-dd"
},
"aggs": {
"events": {
"nested": {
"path": "events"
},
"aggs": {
"unique_user_count": {
"cardinality": {
"field": "events.actor.id.keyword"
}
}
}
}}}}}
低于月度结果(回复)
{
"aggregations": {
"dt": {
"buckets": [
{
"key_as_string": "2022-01-01",
"key": 1640995200000,
"doc_count": 2930,
"events": {
"doc_count": 13988,
"unique_user_count": {
"value": 37
}
}
},
{
"key_as_string": "2022-02-01",
"key": 1643673600000,
"doc_count": 36910,
"events": {
"doc_count": 175151,
"unique_user_count": {
"value": 580
}
}
},
{
"key_as_string": "2022-03-01",
"key": 1646092800000,
"doc_count": 24861,
"events": {
"doc_count": 133383,
"unique_user_count": {
"value": 555
}
}
},
{
"key_as_string": "2022-04-01",
"key": 1648771200000,
"doc_count": 6005,
"events": {
"doc_count": 30730,
"unique_user_count": {
"value": 170
}
}
}
]
}
}
}
我再次 运行 相同的查询,但更改了时间间隔 = Year
{
"query": {
"range": {
"@timestamp": {
"gte": "2022-01-01",
"lte": "2022-04-14"
}
}},
"aggs": {
"dt": {
"date_histogram": {
"field": "@timestamp",
"interval": "year",
"format": "yyyy-MM-dd"
},
"aggs": {
"events": {
"nested": {
"path": "events"
},
"aggs": {
"unique_user_count": {
"cardinality": {
"field": "events.actor.id.keyword"
}
}
}
}}}}}
我收到以下年份回复
{
"aggregations": {
"dt": {
"buckets": [
{
"key_as_string": "2022-01-01",
"key": 1640995200000,
"doc_count": 70706,
"events": {
"doc_count": 353252,
"unique_user_count": {
"value": 1007
}
}
}
]
}
}
}
我的预期结果是这样的 年 = 37+580+555+170 year = 1342 ----> 但我得到“1007”错误值
如何匹配总和(月)值和年值?
在您的每月存储桶中,您是 运行 基数聚合以获得每月唯一用户数。
如果您 运行 一年内进行相同的聚合,则唯一用户数不能是每月用户数的总和,因为给定用户可能在几个月内进行过互动。
如果比较它们匹配的总事件数:13988 + 175151 + 133383 + 30730 = 353252
所以一切都很好,你只需要比较苹果和苹果