我正在使用Elasticsearch 5.3。我正在聚合一些数据,但结果太多,无法在单个查询中返回。我尝试使用size = Integer.MAX_VALUE;
,但即便如此,也证明了这一点。在ES搜索API中,有scroll方法通过搜索结果。是否有类似的功能可用于org.elasticsearch.search.aggregations.AggregationBuilders.terms
聚合器,我该如何使用它?搜索滚动API可以用于聚合器吗?
答案 0 :(得分:20)
在ES 5.3中,您可以partition使用术语桶并为每个请求检索一个分区。
例如,在下面的查询中,您可以请求将存储桶划分为10个分区,并仅返回第一个分区。与您想要一次检索所有存储桶相比,它将返回的数据量减少约10倍。
{
"size": 0,
"aggs": {
"my_terms": {
"terms": {
"field": "my_field",
"include": {
"partition": 0,
"num_partitions": 10
},
"size": 10000
}
}
}
}
然后,您可以通过将分区增加到1来发出第二个请求,依此类推
{
"size": 0,
"aggs": {
"my_terms": {
"terms": {
"field": "my_field",
"include": {
"partition": 1, <--- increase this up until partition 9
"num_partitions": 10
},
"size": 10000
}
}
}
}
要在Java代码中添加它,您可以这样做:
TermsAggregationBuilder agg = AggregationBuilders.terms("my_terms");
agg.includeExclude(new IncludeExclude(0, 10));