ElasticsearchRestTemplate 单个字段求和

ElasticsearchRestTemplate 单个字段求和



 String key = "sum_bale_count";

		// 查询条件组装
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        boolQueryBuilder.must(QueryBuilders.matchQuery(Cont.SMALL_MAT_CODE,matSmallCode)).filter(QueryBuilders.boolQuery()
                        .must(QueryBuilders.existsQuery("baleCount")))
                .filter(QueryBuilders.termsQuery(Cont.FIRST_MENU_ID, FirstPageMenuId.N2018032700291334.getCode(), FirstPageMenuId.N2018032900295987.getCode()));
		
		/**
		 *求和函数
		 * key -- 求和的名称(可以理解为一个标志)
		 * baleCount --求和字段
		 */
        SumAggregationBuilder sumBale= AggregationBuilders.sum(key).field("baleCount");
        // 数据分页。需求是聚合,数据本身我并不需要,所以只返回一条数据就行
        Pageable pageable = PageRequest.of(0, 1);

        NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
        nativeSearchQueryBuilder.withFields("baleCount");
        nativeSearchQueryBuilder.withQuery(boolQueryBuilder).addAggregation(sumBale).withPageable(pageable);

        SearchHits<DocNotices> search = elasticsearchRestTemplate.search(nativeSearchQueryBuilder.build(), DocNotices.class);
		//获取求和结果
        Aggregations aggregations = search.getAggregations();

        if (Objects.isNull(aggregations)){
            return null;
        }

        Map<String, Aggregation> aggMap = aggregations.getAsMap();
        if (!CollectionUtils.isEmpty(aggMap)){
            ParsedSum parsedSum = (ParsedSum)aggMap.get(key);

            if (!Objects.isNull(parsedSum) && !Objects.isNull(parsedSum.getValue())) {
                Integer sum = Integer.valueOf(new Double(parsedSum.getValue()).intValue());
                //redisTemplate.opsForValue().set(cacheKey,sum,10, TimeUnit.MINUTES);
                return sum;
            }

        }
        return null;

本文参考文章

Elasticsearch 基本查询及聚合查询参考

Elasticsearch深分页-1
Elasticsearch深分页 -2

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值