千家信息网

java如何使用elasticsearch分组进行聚合查询

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍java如何使用elasticsearch分组进行聚合查询,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!java连接elasticsearch 进行聚合查询进行
千家信息网最后更新 2025年01月19日java如何使用elasticsearch分组进行聚合查询

这篇文章主要介绍java如何使用elasticsearch分组进行聚合查询,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

java连接elasticsearch 进行聚合查询进行相应操作

一:对单个字段进行分组求和

1、表结构图片:

根据任务id分组,分别统计出每个任务id下有多少个文字标题

1.SQL:select id, count(*) as sum from task group by taskid;

java ES连接工具类

public class ESClientConnectionUtil { public static TransportClient client=null; public final static String HOST = "192.168.200.211"; //服务器部署 public final static Integer PORT = 9301; //端口 public static TransportClient getESClient(){ System.setProperty("es.set.netty.runtime.available.processors", "false"); if (client == null) { synchronized (ESClientConnectionUtil.class) { try { //设置集群名称 Settings settings = Settings.builder().put("cluster.name", "es5").put("client.transport.sniff", true).build(); //创建client client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(HOST), PORT)); } catch (Exception ex) { ex.printStackTrace(); System.out.println(ex.getMessage()); } } } return client; } public static TransportClient getESClientConnection(){ if (client == null) { System.setProperty("es.set.netty.runtime.available.processors", "false"); try { //设置集群名称 Settings settings = Settings.builder().put("cluster.name", "es5").put("client.transport.sniff", true).build(); //创建client client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(HOST), PORT)); } catch (Exception ex) { ex.printStackTrace(); System.out.println(ex.getMessage()); } } return client; } //判断索引是否存在 public static boolean judgeIndex(String index){ client= getESClientConnection(); IndicesAdminClient adminClient; //查询索引是否存在 adminClient= client.admin().indices(); IndicesExistsRequest request = new IndicesExistsRequest(index); IndicesExistsResponse responses = adminClient.exists(request).actionGet(); if (responses.isExists()) { return true; } return false; }}

java ES语句(根据单列进行分组求和)

//根据 任务id分组进行求和 SearchRequestBuilder sbuilder = client.prepareSearch("hottopic").setTypes("hot");//根据taskid进行分组统计,统计出的列别名叫sum TermsAggregationBuilder termsBuilder = AggregationBuilders.terms("sum").field("taskid"); sbuilder.addAggregation(termsBuilder); SearchResponse responses= sbuilder.execute().actionGet();//得到这个分组的数据集合 Terms terms = responses.getAggregations().get("sum"); List lists = new ArrayList<>();for(int i=0;i

根据多列进行分组求和

//根据 任务id分组进行求和 SearchRequestBuilder sbuilder = client.prepareSearch("hottopic").setTypes("hot");//根据taskid进行分组统计,统计出的列别名叫sum TermsAggregationBuilder termsBuilder = AggregationBuilders.terms("sum").field("taskid");//根据第二个字段进行分组 TermsAggregationBuilder aAggregationBuilder2 = AggregationBuilders.terms("region_count").field("birthplace");//如果存在第三个,以此类推; sbuilder.addAggregation(termsBuilder.subAggregation(aAggregationBuilder2)); SearchResponse responses= sbuilder.execute().actionGet();//得到这个分组的数据集合 Terms terms = responses.getAggregations().get("sum"); List lists = new ArrayList<>();for(int i=0;i

对多个field求max/min/sum/avg

SearchRequestBuilder requestBuilder = client.prepareSearch("hottopic").setTypes("hot");//根据taskid进行分组统计,统计别名为sum TermsAggregationBuilder aggregationBuilder1 = AggregationBuilders.terms("sum").field("taskid")//根据tasktatileid进行升序排列 .order(Order.aggregation("tasktatileid", true));// 求tasktitleid 进行求平均数 别名为avg_title AggregationBuilder aggregationBuilder2 = AggregationBuilders.avg("avg_title").field("tasktitleid");// AggregationBuilder aggregationBuilder3 = AggregationBuilders.sum("sum_taskid").field("taskid"); requestBuilder.addAggregation(aggregationBuilder1.subAggregation(aggregationBuilder2).subAggregation(aggregationBuilder3)); SearchResponse response = requestBuilder.execute().actionGet(); Terms aggregation = response.getAggregations().get("sum"); Avg terms2 = null; Sum term3 = null; for (Terms.Bucket bucket : aggregation.getBuckets()) { terms2 = bucket.getAggregations().get("avg_title"); // org.elasticsearch.search.aggregations.metrics.avg.InternalAvg term3 = bucket.getAggregations().get("sum_taskid"); // org.elasticsearch.search.aggregations.metrics.sum.InternalSum System.out.println("编号=" + bucket.getKey() + ";平均=" + terms2.getValue() + ";总=" + term3.getValue()); }

以上是"java如何使用elasticsearch分组进行聚合查询"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

分组 统计 查询 任务 数量 内容 名称 字段 数据 篇文章 索引 集群 以此类推 三个 下有 价值 兴趣 升序 单个 图片 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 美国访问学者外导数据库 网络安全小达人的手抄报 网易版mc突然进不去服务器 软件开发人的思维方式 模拟钢琴软件开发 苏州运营网络技术费用是多少 江苏语音网络技术服务五星服务 建站买空间还是服务器 计算机 网络技术考试 服务器插框是什么样子的 苏州网络安全包含哪些内容 网络安全的四大危险 幼儿园网络安全宣传主题班会 gui写入excel数据库 数据库 主机和服务器吗 苹果平板请求服务器失败 网络安全设备证书要求 江西科技职业学院大学生互联网 数据连接池的数据库名 泰州手机软件开发流程 怎么连接本机数据库 云服务器怎样对接内网 用别人搭建的网络安全吗 人工神经网络技术图片 学校网络安全成绩 江西服务器机柜现货虚拟主机 虚拟服务器平台 软件开发公司可以做硬件吗 上海微领软件开发有限公司好吗 软件开发制作视频教程
0