请教 ES 怎么实现如下聚合查询: 按某关键字分组,每个分组找到最近的一条记录,筛选这条”最近记录”中状态字段为”特定状态”

34次阅读

共计 452 个字符,预计需要花费 2 分钟才能阅读完成。

原始数据类似

[
  {
  "doc_key": 'a',
  "startsAt": '2024 年 1 月 29 日',
  "status": 'a'
  },
  {
  "doc_key": 'a',
  "startsAt": '2024 年 1 月 30 日',
  "status": 'b'
  }
]

对上面样例 需要返回 doc_key=a, status=b的记录。

通过翻文档目前我实现的

{
  "aggs": {
    "unique_doc": {
      "terms": {"field": "doc_key", // 每个 doc_key 有多条记录}
    },
    "aggs": {
        "latest": {
          "top_hits": {
            "size": 1,
            "sort": [
              {
                "@timestamp": {"order": "desc"}
              }
            ]
          }
        },
        "pagination": {
          "bucket_sort": {
            "size": 10,
            "from": 0
          }
        } 
      }
  }
}

问题: 没有实现最后一步状态过滤。
理想是在 top_hits 中能有个 filter 过滤 status 字段,然后结合bucket selector 过滤 hit count != 0 的桶。
请教各位大佬该怎么做?

正文完
 0