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

如何在Elasticsearch中获取每个唯一name对应的最新文档?

如何在Elasticsearch中一次请求获取每个唯一name对应的最新日期文档的rank或完整文档?

你当前的聚合只能拿到每个name对应的最新日期,但没法关联到对应的rank值或完整文档。要实现这个需求,有两种常用方式:

方法一:使用top_hits聚合

这是聚合场景下最直接的解决方案,在按name分组的子聚合中,用top_hits取出每个组内日期最新的文档:

{
  "size": 0, // 无需返回原始搜索结果,仅关注聚合输出
  "aggs": {
    "group-by-name": {
      "terms": {
        "field": "name"
      },
      "aggs": {
        "latest-document": {
          "top_hits": {
            "size": 1, // 每个分组只取1条最新文档
            "sort": [
              {
                "date": {
                  "order": "desc" // 按日期倒序,确保最新的排在最前
                }
              }
            ],
            "_source": ["rank", "date", "name"] // 可选:指定要返回的字段,省略则返回完整文档
          }
        }
      }
    }
  }
}

执行后,每个name分组下的latest-document会包含该name对应的最新日期文档,你可以从中直接获取rank值或完整文档内容。

方法二:使用collapse折叠功能

如果不需要额外的聚合统计,只是想获取每个name的最新文档,也可以用collapse在搜索结果层面实现折叠:

{
  "query": {
    "match_all": {} // 可替换为你的实际查询条件
  },
  "collapse": {
    "field": "name", // 按name字段折叠
    "inner_hits": {
      "name": "latest",
      "size": 1,
      "sort": [{"date": {"order": "desc"}}] // 取每个折叠组内日期最新的文档
    }
  },
  "size": 0 // 无需返回根级别文档,仅查看inner_hits内容
}

这种方式更轻量化,适合仅需获取最新文档、不需要聚合其他指标的场景。

内容的提问来源于stack exchange,提问作者Aurelien

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:41:02