弹性如何按另一列排序的不同列取行?

w8ntj3qf  于 2022-10-06  发布在  ElasticSearch
关注(0)|答案(1)|浏览(140)

在我的弹性索引中,我有3个字段userIdstatusupdatedAt和其他字段。现在,我正在尝试获取userIdstatus不同的所有行。我可以使用term aggregression完成此操作。

但是,当多个行具有相同的userIdstatus时,我还有另一个要求,我希望返回具有最小/最早updatedAt字段的行。也就是说,在找到不同的行时,应该按updatedAt升序。

我怎么能这样做呢?这是我的尝试

GET user_history/_search
{
  "aggs": {
    "user": {
      "terms": {
        "field": "userId"
      },
      "aggs": {
        "status": {
          "terms": {
            "field": "info.status"
          }
        }
      }
    }
  }
}
lztngnrs

lztngnrs1#

您可以使用top_hits aggregation

{
  "aggs": {
    "user": {
      "terms": {
        "field": "userId"
      },
      "aggs": {
        "status": {
          "terms": {
            "field": "status.keyword"
          },
          "aggs": {
            "top_document": {
              "top_hits": {
                "size": 1,
                "sort": {"updatedAt":"desc"}
              }
            }
          }
        }
      }
    }
  }
}

相关问题