如何在SearchResponse中使用Elasticsearch Java API访问聚合结果?
-
21-12-2019 - |
题
是否有一种方法可以在搜索响应中检索聚合的桶,并使用Java API?
{
"took" : 185,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 200,
"max_score" : 1.0,
"hits" : [...]
},
"aggregations" : {
"agg1" : {
"buckets" : [...]
},
"agg2" : {
"buckets" : [...]
}
}
}
.
目前,可以获得聚合,但我无法弄清楚如何获得桶。
电流1.0 elasticsearch(v1.0.0.beta2)仍然是一个beta版本,也许仍然可以添加此功能,但在该点也没有找到信息。
解决方案
看github上的es源我在测试中看到以下内容:
SearchResponse response = client().prepareSearch("idx").setTypes("type")
.setQuery(matchAllQuery())
.addAggregation(terms("keys").field("key").size(3).order(Terms.Order.count(false)))
.execute().actionGet();
Terms terms = response.getAggregations().get("keys");
Collection<Terms.Bucket> buckets = terms.getBuckets();
assertThat(buckets.size(), equalTo(3));
. 其他提示
如果有人想知道在代码可能有帮助下访问这些存储桶的实际文件计数。
Terms terms = response.getAggregations().get("agg1");
Collection<Terms.Bucket> buckets = terms.getBuckets();
for (Bucket bucket : buckets) {
System.out.println(bucket.getKeyAsText() +" ("+bucket.getDocCount()+")");
}
. 不隶属于 StackOverflow