首页 > 解决方案 > 使用时间过滤搜索结果

问题描述

考虑代表事件不同阶段的索引“订单/订单”中的弹性搜索文档

{"order_id": 10001, "order_status": "New",       "time": 20180524101505}
{"order_id": 10002, "order_status": "New",       "time": 20180524101505}
{"order_id": 10001, "order_status": "Paid",      "time": 20180524102505}
{"order_id": 10002, "order_status": "Cancelled", "time": 20180524111505}
{"order_id": 10001, "order_status": "shipped",   "time": 20180525082505}
{"order_id": 10003, "order_status": "New",       "time": 20180525101505}
{"order_id": 10001, "order_status": "Delivered", "time": 20180526082505}
{"order_id": 10001, "order_status": "Closed",    "time": 20180526082605}

我怎样才能执行搜索,结果将是该事件的最新阶段。基本上我需要做的是根据“时间”进行排序并得到单独的结果

{"order_id": 10002, "order_status": "Cancelled", "time": 20180524111505}
{"order_id": 10001, "order_status": "Closed",    "time": 20180526082605}
{"order_id": 10003, "order_status": "New",       "time": 20180525101505}

标签: elasticsearchfilter

解决方案


max我建议不要使用聚合,而是使用聚合,top_hits因为您需要检索每个订单的最新文档:

{
  "aggs": {
    "byOrderId": {
      "terms": {
        "field": "order_id"
      },
      "aggs": {
        "latest": {
          "top_hits": {
            "sort": {"time": "desc"},
            "size": 1
          }
        }
      }
    }
  }
}

推荐阅读