Skip to content

Instantly share code, notes, and snippets.

@kakakazuma
Created September 8, 2015 06:30
Show Gist options
  • Save kakakazuma/e1849cc9ab47ea869a08 to your computer and use it in GitHub Desktop.
Save kakakazuma/e1849cc9ab47ea869a08 to your computer and use it in GitHub Desktop.
elasticsearch aggregation sample by java. date histogram.
/*
ES Aggregation to get result same as result from this SQL
SELECT
DATE(create_at),fieldA,SUM(fieldB)
from table
group by DATE(create_at),fieldA;
*/
SearchRequestBuilder searchReq = client.prepareSearch("sample_index");
searchReq.setTypes("sample_types");
//例えばInterval.minutes(15)にすると15分ごとの集計ができる
DateHistogramBuilder dhb = AggregationBuilders.dateHistogram("my_datehistogram").field("create_at").interval(DateHistogram.Interval.days(1));
TermsBuilder termsb_fa = AggregationBuilders.terms("my_fieldA").field("fieldA").size(100);
termsb_fa.subAggregation(AggregationBuilders.sum("my_sum_fieldB").field("fieldB"));
dhb.subAggregation(termsb_fa)
searchReq.setQuery(QueryBuilders.matchAllQuery()).addAggregation(dhb);
SearchResponse searchRes = searchReq.execute().actionGet();
DateHistogram dateHist = searchRes.getAggregations().get("my_datehistogram");
for (DateHistogram.Bucket dateBucket : dateHist.getBuckets()) {
//DATE(create_at)
String create_at = dateentry.getKey();
Terms fieldATerms = dateBucket.getAggregations().get("my_fieldA");
for (Terms.Bucket filedABucket : fieldATerms.getBuckets()) {
//fieldA
String fieldAValue = filedABucket.getKey();
//SUM(fieldB)
Sum sumagg = filedABucket.getAggregations().get("my_sum_fieldB");
long sumFieldB = (long)sumagg.getValues();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment