如何从复合聚合中过滤结果?

时间:2019-06-04 21:10:05

标签: elasticsearch amazon-elasticsearch

我想过滤内部具有top_hits聚合的复合聚合的结果。因此,我首先将数据与top_hits分组,然后将其用作复合聚合中的一个子聚合,该复合聚合具有一个基于ID的单一来源,而且我不知道如何过滤这些聚合结果。

我尝试使用过滤器聚合,但是由于复合聚合必须是所有聚合之父,因此我不确定。尝试了这些汇总的不同组合,但没有一个能如我所愿地显示结果。

{
  "size": 0,
  "aggs": {
    "grouped_data": {
      "composite": {
        "sources": [
          {
            "artifact": {
              "terms": {
                "field": "artifactId.keyword"
              }
            }
          }
        ],
        "size": 20
      },
      "aggs": {
        "top_artifacts_hits": {
          "top_hits": {
            "size": 1,
            "sort": [{
              "initialDate": {
                "order": "desc"
              }
            }]
          }
        }
      }
    }
  }
}

我尝试使用query API进行过滤,但这对我来说不是一个好选择,因为我要应用的过滤器用于分组结果。在主聚合之前使用一些query会使ElasticSearch查询先然后进行分组。我需要它倒退。我正在AWS下使用ES 6.3。

所以我的文档看起来像这样:

{
  "artifactId": "foo",
  "clientId": "bar",
  "artifactState": "foozz",
  "initialDate": 1559745246
}

我需要做的是为每个不同的artifactState获取基于initialDate的最后一个artifactId,这就是为什么我要使用top_hits + Composite。

0 个答案:

没有答案