elasticsearch top hits aggregation java API query

六眼飞鱼酱① 提交于 2019-12-08 12:56:38

问题


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.

来源:https://stackoverflow.com/questions/36805072/elasticsearch-top-hits-aggregation-java-api-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!