es聚合查询demo

 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);
                     }
                     
                     }
             }
        }  

转载于:https://my.oschina.net/xiaominmin/blog/1785982

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值