假设每个人都有几个包含值的文档:
{
"name": "John",
"value": 1,
"timestamp": 2014-06-15
}
{
"name": "John",
"value": 2,
"timestamp": 2014-06-16
}
{
"name": "Sam",
"value": 2,
"timestamp": 2014-06-15
}
{
"name": "Sam",
"value": 3,
"timestamp": 2014-06-16
}
是否存在可以实现此结果的存储桶和指标的某种组合?我是否需要将自定义聚合器实现为插件的一部分,还是必须在内存中执行此类计算?
答案 0 :(得分:1)
第二个操作只是一个聚合,要获得value
字段的平均值,您可以尝试以下方法:
curl -XPOST "http://DOMAIN:9200/your/data/_search" -d'
{
"size": 0,
"aggregations": {
"the_name": {
"terms": {
"field": "name",
"order": {
"value_avg": "desc"
}
},
"aggregations": {
"value_avg": {
"avg": {
"field": "value"
}
}
}
}
}
}'
要为您的第一个问题找到解决方案,我建议您按日期订购响应,然后在项目中忽略一个术语,当您有另一个具有相同名称的术语时(意味着在ES的响应后过滤数据)< / p>
答案 1 :(得分:1)
对于那些只需要找到最新 persons
的人,请尝试以下方法:
"aggs": {
"personName": {
"terms": {
"field": "name",
"size": 5,
"order": {"timeCreated": "desc"}
},
"aggs": {
"timeCreated": {
"max": {"field": "timestamp"}
}
}
}
}