/ / SearchResponseでelasticSearch java apiを使って集計結果にアクセスするには? - java、elasticsearch、バケット

SearchResponseのelasticSearch java apiを使用して集計結果にアクセスするにはどうすればよいですか? - java、elasticsearch、バケット

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" : [...]
}
}
}

現在のところ、集計を取得することは可能ですが、バケツを取得する方法はわかりません。

ElasticSearchの現在のバージョン1.0(v1.0.0.Beta2)はまだベータ版なので、この機能を追加する必要があるかもしれませんが、その点に関する情報も見つかりませんでした。

回答:

回答№1の場合は32

を見て 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));

回答№2のための7

実際の文書へのアクセスについて誰かが疑問に思う場合は、以下のコードを参考にしてください。

Terms  terms = response.getAggregations().get("agg1");
Collection<Terms.Bucket> buckets = terms.getBuckets();
for (Bucket bucket : buckets) {
System.out.println(bucket.getKeyAsText() +" ("+bucket.getDocCount()+")");
}