我在时间戳字段中使用范围编写了弹性搜索查询。我需要找到每个组的最新时间戳。首先,我执行查询,然后按名称字段分组,然后尝试选择最新的时间戳。但它没有用。任何建议表示赞赏。下面是我的json,我用来搜索postman的帖子查询
{ “查询”:{ “range”:{“timestamp”:{“gte”:“2016-10-05T15:00:35”,“lte”:“2016-10-06T15:10:35”}} },
"aggs" : {
"groupbyname" : {
"terms" : {
"field" : "name"
},
"aggs" : {
"selectlatesttimestamp" : {
"max" : {
"field" : "timestamp"
}
}
}
}
}
}
答案 0 :(得分:0)
您可以使用top-hits聚合来执行此操作,根据您的示例,您可以执行以下操作:
{
"query": {
"range": {
"timestamp": {
"gte": "2016-10-05T15:00:35",
"lte": "2016-10-06T15:10:35"
}
}
},
"aggs": {
"groupbyname": {
"terms": {
"field": "name"
},
"aggs": {
"top_group_hits": {
"top_hits": {
"sort": [
{
"timestamp": {
"order": "desc"
}
}
],
"size": 1
}
}
}
}
}
}
如果您未使用源自查询的实际结果,但仅使用聚合,您还可以将"size":0
添加到顶级对象("query"
上方)。< / p>
如果您只需要某些字段,则可以在热门点击聚合中添加_source
部分,例如,如果您只需要获取最新的时间戳,则可以执行以下操作:
{
"size": 0,
"query": {
"range": {
"timestamp": {
"gte": "2016-10-05T15:00:35",
"lte": "2016-10-06T15:10:35"
}
}
},
"aggs": {
"groupbyname": {
"terms": {
"field": "name"
},
"aggs": {
"top_group_hits": {
"top_hits": {
"sort": [
{
"timestamp": {
"order": "desc"
}
}
],
"_source": [
"timestamp"
],
"size": 1
}
}
}
}
}
}