Skip to content

Instantly share code, notes, and snippets.

@kakakazuma
Created September 8, 2015 06:31
Show Gist options
  • Save kakakazuma/9225825cf09782889046 to your computer and use it in GitHub Desktop.
Save kakakazuma/9225825cf09782889046 to your computer and use it in GitHub Desktop.
elasticsearch aggregation sample by java. where + group by.
/*
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