Map<Long, BrandDTO> brandDTOMap = Maps.newHashMap();
Map<Long, LabelDTO> labelDTOMap = Maps.newHashMap();
NativeSearchQueryBuilder nativeQueryBuilderAgg = new NativeSearchQueryBuilder()
.withQuery(queryBld) .withFilter(boolQueryBld)
.withIndices("goodstest").withTypes("skus")
.addAggregation(AggregationBuilders.terms("brandAgg").field("brandId")
.subAggregation(AggregationBuilders.terms("brandChineseNameAgg").field("brandChineseName.raw"))
.subAggregation(AggregationBuilders.terms("brandEnglishNameAgg").field("brandEnglishName.raw")).size(0))
.addAggregation(AggregationBuilders.terms("labelAgg").field("labelId")
.subAggregation(AggregationBuilders.terms("labelNameAgg").field("labelName.raw")).size(0))
;
;
SearchQuery searchQueryAgg = nativeQueryBuilderAgg.build();
Aggregations aggregations = elasticsearchTemplate.query(searchQueryAgg, new ResultsExtractor<Aggregations>() {
@Override
public Aggregations extract(SearchResponse response) {
return response.getAggregations();
}
});
Map<String, Aggregation> map=aggregations.asMap();
for(String s:map.keySet()){
if(s.equals("brandAgg")) {
LongTerms brandId=(LongTerms) map.get(s);
List<org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket> list=brandId.getBuckets();
for(org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket b:list){
Long brandIdLong = (Long) b.getKeyAsNumber();
StringTerms brandChineseNameTerms = (StringTerms) b.getAggregations().asMap().get("brandChineseNameAgg");
String brandChineseNameStr = brandChineseNameTerms.getBuckets().get(0).getKeyAsString();
StringTerms brandEnglishNameTerms =(StringTerms) b.getAggregations().asMap().get("brandEnglishNameAgg");
String brandEnglishNameStr = brandEnglishNameTerms.getBuckets().get(0).getKeyAsString();
//System.out.println(brandIdLong +"------"+brandChineseNameStr+"------"+brandEnglishNameStr);
if (brandIdLong != null) {
BrandDTO brandDTO = new BrandDTO();
brandDTO.setId(brandIdLong);
brandDTO.setChineseName(brandChineseNameStr);
brandDTO.setEnglishName(brandEnglishNameStr);
brandDTOMap.put(brandIdLong, brandDTO);
}
}
}
if(s.equals("labelAgg")) {
LongTerms labelId=(LongTerms) map.get(s);
List<org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket> list=labelId.getBuckets();
for(org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket b:list){
Long labelIdLong = (Long) b.getKeyAsNumber();
StringTerms labelNameAggTerms = (StringTerms) b.getAggregations().asMap().get("labelNameAgg");
String labelNameStr = labelNameAggTerms.getBuckets().get(0).getKeyAsString();
// System.out.println(labelIdLong +"------"+labelNameStr);
if (labelIdLong != null && !labelDTOMap.containsKey(labelIdLong)) {
LabelDTO labelDTO = new LabelDTO();
labelDTO.setId(labelIdLong);
labelDTO.setName(labelNameStr);
labelDTOMap.put(labelIdLong, labelDTO);
}
}
}
}