You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按processId分组并获取每组updatedAt最新的文档?

可以通过单条Elasticsearch查询实现需求

完全可以用单条查询搞定,核心思路是过滤目标processId + 按processId分组取最新文档,用Elasticsearch的terms聚合配合top_hits聚合就能实现。

完整查询示例

{
  "size": 0, // 不需要返回原始匹配的文档,只看聚合结果
  "query": {
    "terms": {
      "processId": ["cd88e9bc-2375-4c4a-80ef-7ec715e2c859", "Process_b77f8ac"] // 替换成你要匹配的processId数组,单个id也支持
    }
  },
  "aggs": {
    "group_by_processId": {
      "terms": {
        "field": "processId",
        "size": 1000 // 设为你需要匹配的processId数量上限
      },
      "aggs": {
        "latest_doc": {
          "top_hits": {
            "size": 1,
            "sort": [{"updatedAt": {"order": "desc"}}],
            "_source": true // 设为true返回完整文档,也可以指定具体字段列表
          }
        }
      }
    }
  }
}

关键逻辑说明

  • 过滤匹配:query中的terms条件精准筛选出你指定的processId对应的所有文档,单个processId直接写成单元素数组即可。
  • 分组聚合:group_by_processId按processId对文档分组,确保每个processId单独处理。
  • 提取最新文档:嵌套的latest_doc聚合通过top_hits实现,按updatedAt降序排序后只取第一条,保证每个分组返回的是最新更新的文档。
  • 结果获取:最终结果会在aggregations.group_by_processId.buckets中,每个bucket对应一个processId,其下的latest_doc.hits.hits[0]就是该processId的最新文档。

针对你提供的示例数据,执行该查询后会返回:

  • cd88e9bc-2375-4c4a-80ef-7ec715e2c859对应更新时间为2024-11-14T17:56:36.694873+03:00的文档
  • Process_b77f8ac对应的唯一文档

内容的提问来源于stack exchange,提问作者Вячеслав Чернышов

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:42:44