I am running the below query and want to retrieve top hits per bucket. But I see multiple docs per bucket in few cases. I want only one document per bucket returned. Can some one review the query and suggest.
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();
STEPS in the query:
Filter by indexDate less than or equal to a given date.
aggregate based on formId. Forming buckets per formId.
Sort in descending order and return top hit result per bucket.