web-dev-qa-db-fra.com

Comment accéder au résultat des agrégations avec elasticSearch Java api dans SearchResponse?

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.

21
ThomasC

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));
36
mconlin

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()+")");
}
8
Charith De Silva