我有一个将时间序列数据写入Elasticsearch的应用程序。 (简化)数据如下所示:
{
"timestamp": 1425369600000,
"shares": 12271
},
{
"timestamp": 1425370200000,
"shares": 12575
},
{
"timestamp": 1425370800000,
"shares": 12725
},
...
我现在想用聚合来计算shares
字段的变化率" buckets",例如
最近10分钟内的股票价值变化率"桶"可以恕我直言计算
# of shares t1
--------------
# of shares t0
我尝试了日期直方图聚合,但我想这不是我需要计算的变化率,因为这只会给我doc_count
,而且它不清楚我如何计算这些变化率:
{
"aggs" : {
"shares_over_time" : {
"date_histogram" : {
"field" : "timestamp",
"interval" : "10m"
}
}
}
}
有没有办法在Elasticsearch中实现聚合目标?我搜索文档,但没有找到匹配的方法。
非常感谢您的帮助!
答案 0 :(得分:1)
我认为使用开箱即用的聚合功能很难实现。但是,您可以查看percentile_ranks_aggregation并将自己的修改添加到脚本中以创建时间点。
另外,对于off-top感到抱歉,但我想知道:弹性搜索最适合那种东西吗?据我所知,在任何给定的时间点,您只需要先前的样本数据来计算当前样本的正确率。这听起来像是更适合某些sliding window algorithm实时实现(甚至在像Postgres这样的一些关系数据库上),你可以在桶中保留固定数量的时间桶和计数器。一旦新样本“到达”,您将更新(滑动)窗口并计算最近时间桶的更新速率。