有没有办法使用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)仍然是测试版,也许这个功能仍然需要添加,但也没有找到关于这一点的信息.
如果有人想知道访问实际文档,那么代码可能有所帮助.
Terms terms = response.getAggregations().get("agg1"); Collection<Terms.Bucket> buckets = terms.getBuckets(); for (Bucket bucket : buckets) { System.out.println(bucket.getKeyAsText() +" ("+bucket.getDocCount()+")"); }
查看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));