Existe-t-il un moyen de récupérer les compartiments des agrégations dans une réponse de recherche, avec l'API Java?
{
"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" : [...]
}
}
}
Actuellement, il est possible d'obtenir les agrégations mais je ne sais pas comment obtenir les compartiments.
La version 1.0 actuelle d'ElasticSearch (v1.0.0.Beta2) est toujours une version bêta, et peut-être que cette fonctionnalité doit encore être ajoutée, mais n'a pas trouvé d'informations sur ce point également.
En regardant le source ES sur Github je vois ce qui suit dans leurs tests:
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));
Si quelqu'un se pose des questions sur l'accès aux documents réels, comptez parmi ces compartiments, le code suivant pourrait vous aider.
Terms terms = response.getAggregations().get("agg1");
Collection<Terms.Bucket> buckets = terms.getBuckets();
for (Bucket bucket : buckets) {
System.out.println(bucket.getKeyAsText() +" ("+bucket.getDocCount()+")");
}