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

如何在Elasticsearch的orders/orders索引中获取各订单的最新状态?

获取Elasticsearch中每个订单的最新阶段

要拿到每个订单的最新状态记录,咱们可以借助Elasticsearch的聚合功能,用terms聚合按order_id分组,再搭配top_hits聚合提取每组里时间最新的文档。具体的查询DSL如下:

POST /orders/_search
{
  "size": 0,
  "aggs": {
    "group_by_order": {
      "terms": {
        "field": "order_id",
        "size": 10000 // 根据你的实际订单数量调整这个值,确保覆盖所有订单
      },
      "aggs": {
        "latest_order_status": {
          "top_hits": {
            "size": 1,
            "sort": [
              {
                "time": {
                  "order": "desc"
                }
              }
            ],
            "_source": {
              "includes": ["order_id", "order_status", "time"]
            }
          }
        }
      }
    }
  }
}

代码细节解释:

  • size: 0:关闭默认的搜索结果返回,只输出聚合数据,避免冗余内容
  • terms聚合group_by_order:按order_id字段对所有文档做分组,把同一个订单的所有状态记录归到一组
  • top_hits聚合latest_order_status:每个分组仅保留1条结果,同时按time字段降序排序,这样就直接拿到了该订单时间最新的状态记录
  • _source.includes:指定只返回需要的字段,减少不必要的数据传输

结果提取:

返回的聚合结果中,aggregations.group_by_order.buckets下的每个bucket对应一个订单,latest_order_status.hits.hits[0]就是该订单的最新状态文档,你可以把这些结果提取出来整理成你期望的格式。

另外需要注意:如果你的time字段是字符串类型,要确保它的格式能支持正确的字典序排序(比如示例里的YYYYMMDDHHMMSS格式就完全没问题);如果是日期类型,直接按desc排序会更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:00:42