elasticsearch top命中聚合java API查询

我正在运行以下查询,并想要检索每个桶的热门点击量。 但在少数情况下,我看到每个桶有多个文档。 我想每桶只返回一个文件。 有人可以审查查询并建议。

SearchResponse sr=client.prepareSearch(versionIndexName).setTypes(versionIndexType).setQuery(Quer yBuilders.boolQuery().must(QueryBuilders.rangeQuery("indexDate").lte(givenTime))) .addAggregation(AggregationBuilders.terms("form.id").field("form.id").size(0) .subAggregation(AggregationBuilders.topHits("top").setExplain(true).setSize(1) .setFrom((size*index)).addSort(SortBuilders.fieldSort("indexDate") .order(SortOrder.DESC)).setFetchSource(true))).execute().actionGet(); 

查询中的步骤:

  1. 按indexDate过滤小于或等于给定日期。
  2. 基于formId的聚合。 每个formId形成桶。
  3. 按降序排序并返回每个桶的最高命中结果。