我在ElasticSearch中有这种对象:
"myobject": {
"type": "blah",
"events": [
{
"code": "code1"
"date": "2016-08-03 18:00:00"
},
{
"code": "code2"
"date": "2016-08-03 20:00:00"
}
]
}
我想计算代码为“code1”的事件和类型为“code2”的事件之间的平均花费时间。基本上,我需要从每个对象的“code1”日期中减去“code2”的日期,然后计算平均值。
谢谢你的帮助!
答案 0 :(得分:0)
B计划绝对好多了。你可以做任何你在索引时可以做的事情。如果您知道您需要该日期差异,那么您应该在索引时计算它并将其存储到另一个字段中。
你绝对应该不担心存储冗余数据,Elasticsearch并不关心。在每次查询期间,除了执行大量脚本之外,您的群集将比存储更多字段更好。您的用户也会感激,因为随着数据的增长,他们不必等待多年才能得到答案。
因此存储它(time_spent
是第二个和第一个事件之间的毫秒数):
"myobject": {
"type": "blah",
"time_spent": 7200000,
"events": [
{
"code": "code1"
"date": "2016-08-03 18:00:00"
},
{
"code": "code2"
"date": "2016-08-03 20:00:00"
}
]
}
然后您就可以运行如下的简单聚合查询:
{
"size": 0,
"aggs": {
"avg_duration": {
"avg": {
"field": "time_spent"
}
}
}
}