Comment accéder aux agrégations Résultat avec Elasticsearch Java API à SearchResponse?
-
21-12-2019 - |
Question
Y a-t-il un moyen de récupérer les godets 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 peux pas comprendre comment obtenir les seaux.
Version actuelle 1.0 de 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 aussi.
La solution
Regarder sur le ES Source 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));
Autres conseils
Si quelqu'un s'interroge sur l'accès à des documents réels, le nombre de ces godets est peut-être utile.
Terms terms = response.getAggregations().get("agg1");
Collection<Terms.Bucket> buckets = terms.getBuckets();
for (Bucket bucket : buckets) {
System.out.println(bucket.getKeyAsText() +" ("+bucket.getDocCount()+")");
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow