2014-05-12 145 views
3

我在我的文档上使用弹性搜索和聚合作为请求。我的聚合是特定字段上的术语聚合。使用弹性搜索滚动聚合

我希望能够获得所有聚合,但请求只返回我第10第一。我尝试使用弹性搜索的滚动,但它应用于请求而不是聚合,返回的文档滚动得很好,但聚合仍然相同。

有没有人有同样的问题?

这是我在java中的要求:

SearchResponse response = client.prepareSearch("index").setTypes("type").setQuery(QueryBuilders.matchAllQuery()) 
       .addAggregation(AggregationBuilders.terms("TermsAggr").field("aggField")).execute().actionGet(); 

而且这里是我如何得到桶:

Terms terms = response.getAggregations().get("TermsAggr"); 
    Collection<Bucket> buckets = terms.getBuckets(); 

回答

5

默认返回大小聚集结果是10个项目,这就是为什么你只能得到10个结果。您需要将AggregationBuilders对象上的size设置为较大的值才能返回存储桶中的更多或全部值。

SearchResponse response = client.prepareSearch("index") 
     .setTypes("type") 
     .setQuery(QueryBuilders.matchAllQuery()) 
     .addAggregation(AggregationBuilders.terms("TermsAggr") 
      .field("aggField").size(100)) 
     .execute().actionGet(); 

如果你总是想返回所有的值,你可以设置size(0)。但是,您需要升级到ES 1.1,因为最近通过Issue 4837将其添加到该发行版中。

+0

事实上,我想拥有所有的聚合,而不仅仅是其中的一些。大小不可能。顺便说一句我正在使用ES 1.0.1。 – Blblblblblblbl

+0

这个领域有多少物品? –

+0

在生产当然会增长,但我正在使用基于500000项目。这里的问题是,这些项目的数量会增长,因此我不能使用尺寸方法sincde我不会知道在任何时候我应该收到多少聚合。 – Blblblblblblbl