分页ElasticSearch中的top_hits聚合

时间:2019-03-08 18:44:31

标签: elasticsearch

现在,我正在Elastic Search中进行top_hits聚合,该聚合将我的数据按字段分组,按日期对分组进行排序,然后选择前1个。

我需要以某种方式分页此聚合结果,以便可以传递pageSize和pageNumber,但我不知道如何。

除此之外,我还需要此聚合的总结果,以便我们可以在Web界面的表中显示它。

聚合看起来像这样:

POST my_index/_search
{
  "size": 0,
  "aggs": {
    "top_artifacts": {
      "terms": {
        "field": "artifactId.keyword"
      },
      "aggs": {
        "top_artifacts_hits": {
          "top_hits": {
            "size": 1,
            "sort": [{
              "date": {
                "order": "desc"
              }
            }]
          }
        }
      }
    }
  }
} 

1 个答案:

答案 0 :(得分:0)

如果我了解您的需求,那么您应该可以通过Composite Aggregation进行分页。您仍然可以在分页中传递size参数,但是您的from将是存储桶的关键。

POST my_index/_search
{
  "size": 0, 
  "aggs": {
    "top_artifacts": {
      "composite": {
        "sources": [
          {
            "artifact": {
              "terms": {
                "field": "artifactId.keyword"
              }
            }
          }
        ]
        , 
        "size": 1, // OPTIONAL SIZE (How many buckets)
        "after": {
          "artifact": "FOO_BAZ" // Buckets after this bucket key
        }
      },
      "aggs": {
        "hits": {
          "top_hits": {
            "size": 1,
            "sort": [
              {
                "timestamp": {
                  "order": "desc"
                }
              }
              ]
          }
        }
      }
    }
  }
}