Comment accéder aux agrégations Résultat avec Elasticsearch Java API à SearchResponse?

StackOverflow https://stackoverflow.com//questions/21018493

  •  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.

Était-ce utile?

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
scroll top