Lucene 使用elasticsearch对组中最新文档进行聚合
假设每个人都有几个包含值的文档:Lucene 使用elasticsearch对组中最新文档进行聚合,lucene,elasticsearch,aggregate,Lucene,elasticsearch,Aggregate,假设每个人都有几个包含值的文档: { "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
{
"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
}
是否有一些桶和指标的组合可以实现这一结果?我需要实现一个自定义聚合器作为插件的一部分,还是必须在内存中执行这种计算?第二个操作只是一个聚合,要获得
值
字段的平均值,您可以尝试以下操作:
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响应后过滤数据)如果您只需要查找最新的
人员
尝试以下方法:
“aggs”:{
“人名”:{
“条款”:{
“字段”:“名称”,
“尺寸”:5,
“顺序”:{“timeCreated”:“desc”}
},
“aggs”:{
“创建时间”:{
“max”:{“field”:“timestamp”}
}
}
}
}
您就不能按时间戳字段排序吗?这似乎是一个相关的案例,而不是聚合和排序将在5年前完成,我有完全相同的问题。肖恩,你解决了吗?好的。我希望避免在客户端或通过插件手动筛选文档(以避免网络开销),但在这种情况下,这似乎是不可能的。您可以制作一个小型python脚本(python或任何其他语言),并通过脚本进行查询。类似于:receive\u query\u string->make the query->get the response->Filter the response->return required results
为什么要将大小设为5@NeluMalancea@emarel,因为我只需要显示最新的5。