Skip to content

Instantly share code, notes, and snippets.

@kakakazuma
Created September 8, 2015 06:26
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save kakakazuma/ec0a9aeb20329b3b1b09 to your computer and use it in GitHub Desktop.
Save kakakazuma/ec0a9aeb20329b3b1b09 to your computer and use it in GitHub Desktop.
elasticsearch aggregation sample by java. simple group by.
/*
ES Aggregation to get result same as result from this SQL
SELECT
fieldA, COUNT(fieldA), SUM(fieldB), AVG(fieldB)
from table
group by fieldA;
*/
//検索クエリの発行
SearchRequestBuilder searchReq = client.prepareSearch("sample_index");
searchReq.setTypes("sample_types");
//size()で取得する結果の件数を指定できる
TermsBuilder termsb = AggregationBuilders.terms("my_fieldA").field("fieldA").size(100);
termsb.subAggregation(AggregationBuilders.sum("my_sum_fieldB").field("fieldB"));
termsb.subAggregation(AggregationBuilders.avg("my_avg_fieldB").field("fieldB"));
searchReq.setQuery(QueryBuilders.matchAllQuery()).addAggregation(termsb);
SearchResponse searchRes = searchReq.execute().actionGet();
//結果の取得
Terms fieldATerms = searchRes.getAggregations().get("my_fieldA");
for (Terms.Bucket filedABucket : fieldATerms.getBuckets()) {
//fieldA
String fieldAValue = filedABucket.getKey();
//COUNT(fieldA)
long fieldACount = filedABucket.getDocCount();
//SUM(fieldB)
Sum sumagg = filedABucket.getAggregations().get("my_sum_fieldB");
long sumFieldB = (long)sumagg.getValues();
//AVG(fieldB)
Avg avgagg = filedABucket.getAggregations().get("my_avg_fieldB");
double avgFieldB = avgagg.getValues();
}
@saleinternet
Copy link

If the aggregation result is largest, i want to scroll the aggregation result ,how to do ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment