Java 使用弹性搜索在聚合上滚动
我在我的文档上使用弹性搜索和聚合作为请求。我的聚合是特定字段上的术语聚合 我希望能够得到所有的聚合,但请求只返回我的第10个第一。我尝试使用弹性搜索的滚动,但它应用于请求,而不是聚合,返回的文档滚动良好,但聚合仍然相同 有人有同样的问题吗 以下是我的java请求:Java 使用弹性搜索在聚合上滚动,java,elasticsearch,aggregation,Java,elasticsearch,Aggregation,我在我的文档上使用弹性搜索和聚合作为请求。我的聚合是特定字段上的术语聚合 我希望能够得到所有的聚合,但请求只返回我的第10个第一。我尝试使用弹性搜索的滚动,但它应用于请求,而不是聚合,返回的文档滚动良好,但聚合仍然相同 有人有同样的问题吗 以下是我的java请求: SearchResponse response = client.prepareSearch("index").setTypes("type").setQuery(QueryBuilders.matchAllQuery())
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();
Terms=response.getAggregations().get(“TermsAggr”);
收集桶=terms.getBucket();
聚合结果的默认返回大小是10个项目,这就是为什么您只能返回10个结果的原因。您需要将AggregationBuilders
对象上的size
设置为更大的值,以便返回bucket中的更多或所有值
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,因为这是最近通过添加到该版本中的。事实上,我希望拥有所有聚合,而不仅仅是其中的一部分。这在尺寸上是不可能的。顺便说一句,我使用的是ES 1.0.1。在生产中,它当然会增长,但我使用的是500000个项目。这里的问题是,这些项目的数量将增长,因此我不能使用大小方法,因为我不知道在每一时刻我应该收到多少聚合。