在ElasticSearch中按ID获取最新记录

5q4ezhmt  于 2022-11-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(179)

我有一个索引,其中包含数千个以下类型的文档:

{
  "user_id" : 1234,
  "acc_id" : 4321,
  "type_of_event" : "event",
  "event_label" : "example activity",
  "time_stamp" : 1582720371,
  "event_info" : "example info",
  "time_stamp_string" : "2022-02-26 12:32:51"
}

我希望查询返回每个user_id的最后一条记录(按time_stamp_string)。我尝试的是:

GET my_index/_search
{
  "aggs": {
    "top_id": {
      "max": {
        "field": "user_id"
      }
    }
  }
}

它失败了,返回的条目比最新的条目旧。我不明白为什么它不起作用。

6yoyoihd

6yoyoihd1#

它并没有按照你的要求去做,因为你并没有考虑时间戳,你只是要求Elasticsearch显示user_id
最好的方法是将top hits aggterms agg沿着使用,类似于这样:

POST /my_index/_search
{
  "aggs": {
    "user_id": {
      "terms": {
        "field": "user_id"
      },
      "aggs": {
        "latest_time_stamp": {
          "top_hits": {
            "sort": [
              {
                "time_stamp": {
                  "order": "desc"
                }
              }
            ],
            "size": 1
          }
        }
      }
    }
  }
}

它的作用是识别每个唯一的user_id,然后为每个time_stamp找到最新的值

相关问题