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

如何通过一次查询获取所有匹配test-*索引的最新文档?

如何批量获取匹配test-*模式的每个索引的最新文档

你可以通过以下两种方式实现需求,确保每个匹配的索引返回1条最新文档,最终得到6条结果:

方法一:使用聚合查询(推荐,适合索引数量较多的场景)

通过按索引名称聚合,结合top_hits获取每个分组的最新文档,一次请求即可完成:

GET test-*/_search
{
  "size": 0,  // 不返回普通搜索结果,只保留聚合数据
  "aggs": {
    "group_by_index": {
      "terms": {
        "field": "_index",
        "size": 1000  // 设置足够大的值,确保覆盖所有匹配的test-*索引
      },
      "aggs": {
        "latest_document": {
          "top_hits": {
            "size": 1,
            "sort": [
              {
                "@timestamp": {  // 替换为你实际用来判断文档新旧的字段,比如create_time
                  "order": "desc"
                }
              }
            ]
          }
        }
      }
    }
  }
}

说明:

  • test-*会匹配所有以test-开头的索引;
  • terms聚合按_index字段将结果分组,每个组对应一个索引;
  • top_hits聚合在每个分组内按指定字段降序排序,只取第一条(最新的)文档;
  • 如果你的文档没有@timestamp字段,可以替换为自增的_id(需确保_id能代表创建顺序)或业务自定义的时间字段。

方法二:使用批量查询(适合索引数量较少的场景)

通过_msearch接口批量提交单个索引的查询请求,每个请求返回对应索引的最新文档:

POST _msearch
{"index": "test-node1"}
{"size": 1, "sort": [{"@timestamp": {"order": "desc"}}]}
{"index": "test-node2"}
{"size": 1, "sort": [{"@timestamp": {"order": "desc"}}]}
{"index": "test-node3"}
{"size": 1, "sort": [{"@timestamp": {"order": "desc"}}]}
{"index": "test-node4"}
{"size": 1, "sort": [{"@timestamp": {"order": "desc"}}]}
{"index": "test-node5"}
{"size": 1, "sort": [{"@timestamp": {"order": "desc"}}]}
{"index": "test-node6"}
{"size": 1, "sort": [{"@timestamp": {"order": "desc"}}]}

说明:

  • 每两行对应一个索引的查询:第一行指定索引,第二行定义查询规则(只取1条,按指定字段降序);
  • 这种方式写法直观,但如果后续新增test-*索引,需要手动添加对应的查询行,不如聚合方法灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:43:24