我目前正在尝试根据弹性搜索中收集的数据生成图表.每次生成用户时,我都会在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
生成累积图表,这样我就可以看到用户群的增长,而不是每天的帐户数量.尽管在互联网上搜索,我找不到一个似乎与我的问题有关的答案.我找到的大多数答案都指示我进入累积和聚合页面,但是那里给出的示例将为您提供在单个存储桶中捕获的所有结果的累积总和.我想要所有桶总数的累积总和.
你正在使用累积和汇总的正确路径,你绝对可以使用它.您只需要使用特殊的_count
存储桶路径,这将完成您期望的工作.
{ "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} }]