假设我有很多商店,我想展示一月到二月间访问量增长最多的商店。
到目前为止,我使用date_histogram通过此查询获取每月和每个商店的数字:
query: {
range: {
visited_at: {
gte: "2016-01-01T00:00:00Z",
lt: "2016-03-01T00:00:00Z"
}
}
},
size: 0,
aggs: {
months: {
date_histogram: {
field: 'visited_at',
interval: "month"
},
aggs: {
stores: {
terms: {
size: 0,
field: 'store_id'
}
}
}
}
}
它返回的内容如下:
"aggregations": {
"months": {
"buckets": [
{
"key_as_string": "2016-01-01T00:00:00.000+00:00",
"key": 1451574000000,
"doc_count": 300,
"stores": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 1,
"doc_count": 100
},
{
"key": 2,
"doc_count": 200
}
]
}
},
{
"key_as_string": "2016-02-01T00:00:00.000+00:00",
"key": 1454252400000,
"doc_count": 550,
"stores": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 1,
"doc_count": 150
},
{
"key": 2,
"doc_count": 400
}
]
}
}
]
}
}
有了这个,我正在获取所有商店的数据,然后比较我的代码中的增长,但我希望有一个查询可以让Elasticsearch计算增长并返回我只有前n个。
我尝试了一些Pipeline聚合,但我无法得到我想要的东西。
我想另一种改进方法是让批量计算每个月末的月度增长,然后存储它。 Elasticsearch能否自动执行此操作?
仅供参考我在使用Elasticseach 2.2并且我正在使用它进行增长:(feb_result - jan_result) / jan_result