Created
September 8, 2015 06:31
-
-
Save kakakazuma/9225825cf09782889046 to your computer and use it in GitHub Desktop.
elasticsearch aggregation sample by java. where + group by.
This file contains 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
/* | |
SELECT | |
fieldA, COUNT(fieldA) | |
from table | |
WHERE fieldC = "hoge" | |
AND fieldD = "huga" | |
AND fieldB > 10 | |
AND fieldB < 100 | |
group by fieldA; | |
*/ | |
SearchRequestBuilder searchReq = client.prepareSearch("sample_index"); | |
searchReq.setTypes("sample_types"); | |
TermsBuilder termsb = AggregationBuilders.terms("my_fieldA").field("fieldA").size(100); | |
BoolFilterBuilder bf = FilterBuilders.boolFilter(); | |
TermFilterBuilder tf_fieldC = FilterBuilders.termFilter("fieldC","hoge"); | |
TermFilterBuilder tf_fieldD = FilterBuilders.termFilter("fieldD","huga"); | |
bf.must(tf_fieldC); | |
bf.must(tf_fieldD); | |
//境界値を含みたい場合はgte,lte | |
RangeFilterBuilder rangefieldBFilter = FilterBuilders.rangeFilter("fieldB") | |
.gt(10) | |
.lt(100); | |
//今回はqueryでなくfilterで検索条件を制御した。スコア付けしない場合はfilterの方が高速 | |
searchReq.setQuery(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), | |
FilterBuilders.andFilter(bf, rangefieldBFilter))).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(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment