2014-05-12 199 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