ES结合java代码聚合查询

本文介绍如何使用Java代码配合Elasticsearch进行聚合查询。通过在Java中构建对象,设置聚合名称和字段,根据ES代码的层级关系逐层获取数据,并创建实体类接收查询结果。最终,通过调用相应方法查询并获取聚合后的值,为后续业务操作做准备。
摘要由CSDN通过智能技术生成

思路不清晰的小伙伴可以先在es中把聚合代码写出来


{
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brandName.keyword"
      },
      "aggs": {
        "typeAgg": {
        "terms": {
          "field": "typeTwoName.keyword"
        }
        },
        "ruleAgg": {
          "terms": {
            "field": "ruleName.keyword"
          },
            "aggs": {
                "ruleValueAgg": {
                  "terms": {
                    "field": "ruleAttrValue.keyword"
                  }
                }
              }
        }
      }
    }
  }

注:字段名称加keyword是精准查询,模糊查询可以去掉

 查询完成后这是聚合的结构

 pom文件中引入依赖es依赖,在这里就不详细介绍了,首先在java中构建对象

//构建对象
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

 在java代码中先把要聚合的名称创建出来

根据刚刚的es代码设置java中的terms名称和field后面的名称相对应

//构建聚合名称
TermsAggregationBuilder brandAgg = AggregationBuilders.terms("brandAgg").field("brandName.keyword");
TermsAggregationBuilder typeAgg = AggregationBuilders.terms("typeAgg").field("typeTwoName.keyword");
TermsAggregationBuilder ruleAgg = AggregationBuilders.terms("ruleAgg").field("ruleName.keyword");
TermsAggregationBuilder ruleValueAgg = AggregationBuilders.terms("ruleValueAgg").field("ruleAttrValue.keyword");

这里是根据es代码中创建的层级关系来依次分配 

//根据聚合分配层级
brandAgg.subAggregation(typeAgg);
bra
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值