SearchResponse에서 Elasticsearch Java API로 집계에 액세스하는 방법은 무엇입니까?
-
21-12-2019 - |
문제
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" : [...]
}
}
}
.
현재, 집계를 얻을 수 있지만 버킷을 얻는 방법을 알아낼 수 없습니다.
현재 1.0 elasticsearch (v1.0.0.beta2)는 여전히 베타 버전이며,이 기능을 여전히 추가해야하지만 해당 지점에 대한 정보를 찾지 못했습니다.
해결책
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));
. 다른 팁
실제 문서에 액세스하는 것에 대한 궁금해하는 사람은 코드 다음 코드가 도움이 될 수 있습니다.
Terms terms = response.getAggregations().get("agg1");
Collection<Terms.Bucket> buckets = terms.getBuckets();
for (Bucket bucket : buckets) {
System.out.println(bucket.getKeyAsText() +" ("+bucket.getDocCount()+")");
}
. 제휴하지 않습니다 StackOverflow