I want to generate similar query using Elasticsearch JAVA API . I am trying to apply filters at an aggregation level.
{
"query":{
"filtered":{
"filter":{ "terms":{ "family_name":"Brown" } } //filter_1
}
},
"aggs":{
"young_age":{
"filter":{
"terms" : {
"gender" : "male" //filter_2
}
},
"aggs":{
"age":{
"terms":{
"field":"age"
}
}
}
}
}
}
Please find the sample code that i am up to
TermFilterBuilder family_filter_1 = FilterBuilders.termFilter("family_name","Brown");
FilteredQueryBuilder qbuilder =QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),family_filter_1);
SearchRequestBuilder search = client.prepareSearch("test_index")
.setTypes("test_type")
.setSearchType(SearchType.COUNT)
.setQuery(qbuilder);
search.addAggregation(terms("age").field("age")
.size(0)// Size 0 returns all the "group by keys"
.order(Terms.Order.count(true))); // to sort the output
System.out.println(""+search);
and response i am getting . Please suggest how to add filter_2
{
"query" : {
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"term" : {
"family_name" : "Brown"
}
}
}
},
"aggregations" : {
"age" : {
"terms" : {
"field" : "age",
"size" : 0,
"order" : {
"_count" : "asc"
}
}
}
}
}
Thanks in advance..
rangefilter aggregation is run, i.e. the field on whichfilter_2is run.