gpt4 book ai didi

elasticsearch - 使用 doc_count 作为累计计数

转载 作者:行者123 更新时间:2023-11-29 02:51:24 25 4
gpt4 key购买 nike

我目前正在尝试根据 Elastic Search 中收集的数据生成图表。每次生成用户时,我都会在 ES 中插入一条记录,其中包含以下(示例)数据:

{
"country": "US",
"id": "79ca9523dcd62420030de12b75e08bb7",
"createdAt": "1450912898"
}

ID 是用户 ID 的哈希值,因此出于隐私原因,无法从存储在 ES 中的 ID 确定用户 ID。

ES索引中的类型映射如下:

{
"user": {
"_timestamp": {
"enabled": true
},
"properties": {
"country": {
"type": "string"
},
"createdAt": {
"type": "date",
"format": "epoch_second"
},
"id": {
"type": "string",
"index": "not_analyzed"
}
}
}
}

现在,要获取每天的用户图表,我有以下查询:

{
"size": 0,
"query": {
"type": {
"value": "user"
}
},
"aggs": {
"users_per_day": {
"date_histogram": {
"field": "createdAt",
"interval": "day"
}
}
}
}

这给了我这样一个不错的结果(对于结果,我将间隔设置为分钟,让您稍微了解问题所在):

[{
"key_as_string": "1450909920",
"key": 1450909920000,
"doc_count": 8
},
{
"key_as_string": "1450909980",
"key": 1450909980000,
"doc_count": 2
},
{
"key_as_string": "1450910040",
"key": 1450910040000,
"doc_count": 5
},
{
"key_as_string": "1450910100",
"key": 1450910100000,
"doc_count": 8
},
{
"key_as_string": "1450910160",
"key": 1450910160000,
"doc_count": 4
},
{
"key_as_string": "1450910220",
"key": 1450910220000,
"doc_count": 3
},
{
"key_as_string": "1450910280",
"key": 1450910280000,
"doc_count": 6
}]

我想使用 doc_count 生成一个累积图,这样我就可以看到我的用户群的增长情况,而不是每天创建的帐户数量。尽管在互联网上搜索,但我找不到似乎与我的问题相关的单一答案。我找到的大多数答案都将我引导至 Cumulative Sum Aggregation页面,但此处给出的示例将为您提供单个存储桶中捕获的所有结果的累计总和。我想要所有桶总数的累计总和。

最佳答案

您在 cumulative sum aggregation 的正确道路上你绝对可以使用它。您只需要使用特殊的 _count bucket path这将完成您期望的工作。

{
"size": 0,
"query": {
"type": {
"value": "user"
}
},
"aggs": {
"users_per_day": {
"date_histogram": {
"field": "createdAt",
"interval": "day"
},
"aggs": {
"cumulative": {
"cumulative_sum": {
"buckets_path": "_count"
}
}
}
}
}
}

结果将如下所示:

[{
"key_as_string": "1450909920",
"key": 1450909920000,
"doc_count": 8,
"cumulative": {"value": 8}
},
{
"key_as_string": "1450909980",
"key": 1450909980000,
"doc_count": 2,
"cumulative": {"value": 10}
},
{
"key_as_string": "1450910040",
"key": 1450910040000,
"doc_count": 5,
"cumulative": {"value": 15}
},
{
"key_as_string": "1450910100",
"key": 1450910100000,
"doc_count": 8,
"cumulative": {"value": 23}
},
{
"key_as_string": "1450910160",
"key": 1450910160000,
"doc_count": 4,
"cumulative": {"value": 27}
},
{
"key_as_string": "1450910220",
"key": 1450910220000,
"doc_count": 3,
"cumulative": {"value": 30}
},
{
"key_as_string": "1450910280",
"key": 1450910280000,
"doc_count": 6,
"cumulative": {"value": 36}
}]

关于elasticsearch - 使用 doc_count 作为累计计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34445376/

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