我有以下情况,其中我每60秒内每30秒收到最多50k用户的日志。我正在使用Elasticsearch以以下格式存储数据。
[
{
"viewlogId": "9abb5a3a-3678-4459-a425-ccb6f957e317",
"creationTime": 1575187230000,
"userId": "USERID_0",
"viewingSessionId": "2991fa12_viewingSessionId_0_1"
},
{
"viewlogId": "9abb5a3a-3678-4459-a425-ccb6f957e318",
"creationTime": 1575187230000,
"userId": "USERID_0",
"viewingSessionId": "2991fa12_viewingSessionId_0_1"
},
{
"viewlogId": "9abb5a3a-3678-4459-a425-ccb6f957e319",
"creationTime": 1575187230000,
"userId": "USERID_0",
"viewingSessionId": "2991fa12_viewingSessionId_0_1"
},
{
"viewlogId": "9abb5a3a-3678-4459-a425-ccb6f957e320",
"creationTime": 1575187290000,
"userId": "USERID_0",
"viewingSessionId": "2991fa12_viewingSessionId_0_1"
},
{
"viewlogId": "9abb5a3a-3678-4459-a425-ccb6f957e321",
"creationTime": 1575187290000,
"userId": "USERID_0",
"viewingSessionId": "2991fa12_viewingSessionId_0_1"
}
]
此示例包含与viewingSessionId 2991fa12_viewingSessionId_0_1
进行一次会话的单个用户的数据。 viewingSessionId 对于每个用户而言都是唯一的。
现在,我有兴趣显示具有唯一的viewsessionIds的每分钟直方图。为此,我正在使用以下查询。
GET <<index_name>>/_search
{
"size": 0,
"query": {
"bool": {
"adjust_pure_negative": true,
"boost": 1
}
},
"aggregations": {
"total_views": {
"cardinality": {
"field": "viewingSessionId"
}
},
"date_histogram_1": {
"date_histogram": {
"field": "creationTime",
"fixed_interval": "1m"
},
"aggregations": {
"user_counts": {
"cardinality": {
"field": "viewingSessionId"
}
}
}
}
}
}
但是根据弹性文档here,我在测试过程中也观察到基数计数是近似的,阈值为40k。由于我每分钟有5万个用户和1-2个查看日志,所以在一个存储桶中,我最多可以有15万条记录,而计数将是近似值。
其他任何通过更改索引结构或通过查询来解决问题的方法
谢谢
ElasticSearch版本:7.4.1