Created
September 8, 2015 06:26
-
-
Save kakakazuma/ec0a9aeb20329b3b1b09 to your computer and use it in GitHub Desktop.
elasticsearch aggregation sample by java. simple group by.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If the aggregation result is largest, i want to scroll the aggregation result ,how to do ?