ES dsl 按照id分组,并取每个id对应记录最新时间一条记录的某个字段的值
时间: 2023-07-16 20:14:52 浏览: 47
可以使用 Elasticsearch 的聚合功能实现,具体的聚合类型是 `terms` 和 `top_hits`。以下是一个示例的 DSL:
```
{
"size": 0,
"aggs": {
"group_by_id": {
"terms": {
"field": "id",
"size": 10
},
"aggs": {
"latest_record": {
"top_hits": {
"sort": [
{
"time": {
"order": "desc"
}
}
],
"_source": {
"includes": ["field1"]
},
"size": 1
}
}
}
}
}
}
```
上面的 DSL 中,首先指定了查询结果的大小为 0,表示只返回聚合结果,而不返回匹配的文档。然后在 `aggs` 中指定了按照 `id` 字段进行分组,取前 10 个分组结果。在每个分组中,使用 `top_hits` 聚合得到排序后的最新一条记录,并只包含 `field1` 字段。最后返回的聚合结果中,每个分组对应一个 `key` 值,表示该分组的 `id` 字段的值,而 `latest_record` 中的 `hits` 字段则包含了每个分组的最新记录。