elasticsearch top hits aggregation java API query

匿名 (未验证) 提交于 2019-12-03 00:44:02

问题:

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:

  1. Filter by indexDate less than or equal to a given date.
  2. aggregate based on formId. Forming buckets per formId.
  3. Sort in descending order and return top hit result per bucket.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!