elasticsearch group by java_java elasticsearch聚合查询实例详解

现有索引数据:

index:school

type:student

---------------------------------------------------

{"grade":"1", "class":"1", "name":"xiao 1"}

{"grade":"1", "class":"1", "name":"xiao 2"}

{"grade":"1", "class":"2", "name":"xiao 3"}

{"grade":"1", "class":"2", "name":"xiao 4"}

{"grade":"1", "class":"2", "name":"xiao 5"}

Java分组统计年级和班级学生个数,如SQL: SELECT grade,class,count(1) FROM student GROUP BY grade,class;

package test;

import java.util.Iterator;

import java.util.Map;

import org.elasticsearch.action.search.SearchRequestBuilder;

import org.elasticsearch.action.search.SearchResponse;

import org.elasticsearch.action.search.SearchType;

import org.elasticsearch.search.aggregations.Aggregation;

import org.elasticsearch.search.aggregations.AggregationBuilders;

import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;

import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;

import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder;

import org.junit.Test;

import utils.NesUtils;

public class TestAggregation

{

@Test

public void testAggregation()

{

SearchRequestBuilder srb = NesUtils.getSearcher("school");

srb.setTypes("student");

srb.setSearchType(SearchType.COUNT);

TermsBuilder gradeTermsBuilder = AggregationBuilders.terms("gradeAgg").field("grade");

TermsBuilder classTermsBuilder = AggregationBuilders.terms("classAgg").field("class");

gradeTermsBuilder.subAggregation(classTermsBuilder);

srb.addAggregation(gradeTermsBuilder);

SearchResponse sr = srb.execute().actionGet();

Map aggMap = sr.getAggregations().asMap();

StringTerms gradeTerms = (StringTerms) aggMap.get("gradeAgg");

Iterator gradeBucketIt = gradeTerms.getBuckets().iterator();

while(gradeBucketIt.hasNext())

{

Bucket gradeBucket = gradeBucketIt.next();

System.out.println(gradeBucket.getKey() + "年级有" + gradeBucket.getDocCount() +"个学生。");

StringTerms classTerms = (StringTerms) gradeBucket.getAggregations().asMap().get("classAgg");

Iterator classBucketIt = classTerms.getBuckets().iterator();

while(classBucketIt.hasNext())

{

Bucket classBucket = classBucketIt.next();

System.out.println(gradeBucket.getKey() + "年级" +classBucket.getKey() + "班有" + classBucket.getDocCount() +"个学生。");

}

System.out.println();

}

}

}

运行完成输出结果

---------------------------------------------------

1年级有5个学生。

1年级2班有3个学生。

1年级1班有2个学生。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中什么是 伪共享_【Java】聊聊多线程中的伪共享现象

首页专栏java文章详情0聊聊多线程中的伪共享现象小强大人发布于 1 月 27 日什么是伪共享?讲伪共享之前,让我们先乘坐时光机,回到大学课堂,来重温下计算机组成原理的基础知识。我们知道,CPU和内存的运行速度相差很大&am…

java多个mapreduce_java – 在hadoop中运行多个MapReduce作业

我想运行一系列map reduce工作,所以最简单的解决方案似乎是jobcontroller.说我有两个工作,job1和job2.我想在job1之后运行job2.嗯,它遇到了一些问题.经过几个小时的调试后,我将代码缩小到以下几行:JobConf jobConf1 new JobConf();JobConf jobConf2 new JobConf()…

java用户界面项目_结对项目(带图型用户界面)Java实现【柴政-陈起廷】

对分数及整数的计算/**** 相加操作*/ADD("") {Overridepublic String calculate(String a, String b) {boolean flagA a.contains("/");boolean flagB b.contains("/");//两个都是分数if (flagA && flagB) {int[] anInt ResolveUtil.…

java securerandom使用_Java中的SecureRandom nextBytes()方法

用户指定的随机字节数可以使用nextBytes()类java.security.SecureRandom中的方法获得。该方法需要一个参数,即一个随机字节数组,它返回用户指定的随机字节。演示此的程序如下所示-示例import java.security.*;import java.util.*;public class Demo {pub…

java 跨类 调用 model_Model.java中的这两个方法,为什么不能在子类中调用,或者包内调用也行啊。...

JFinal 你好,想跟你请教个问题:Model.java中的这两个方法,为什么不能在子类中调用,或者包内调用也行啊。/*** Find model.*/SuppressWarnings("unchecked")private List find(Connection conn, String sql, Object... p…

mysql n 识别_mysql – 不能有“不识别”的N:M关系吗?

我的数据库ERM(实体关系模型)有一个TEACHER实体类型,它与SUBJECT_MODULE实体类型相关(因为每个主题中的不同模块由不同的教师讲授,对于某些模块,甚至每个模块中的不同章节都可以通过不同的教师)通过TEACH关系类型.这是一种N:M的关系,因为每个教师都可以教授许多学科…

新闻资讯java开发_新闻资讯app开发的功能与意义

获取新闻的目的因人而异,但对获取新闻的需求是一样的。现在是移动互联网的时代。人们不再想依靠传统的手段,而把便利作为获取服务的核心。因此,开发新闻咨询app是必要的。其到来不仅意味着获得新闻登上新的阶梯,还因为画出了圆满的…

JAVA中注解controller_SpringMVC之基于注解的Controller

参考博客:https://www.cnblogs.com/qq78292959/p/3760560.htmlController注解:传统风格的Controller需要实现Controller接口,而现在我们只需要用注解就行了。基于注解的控制器有几个优点,1.一个控制器可以处理多个action(动作)&am…

c java json_cJSON_json包的C语言解析库

cJSON库描述CJSON是一个用于解析JSON包的C语言库,库文件为cJSON.c和cJSON.h, 所有的实现都在这两个文件中。原作者的地址cJSON。JSON包的解析例如有一个JSON的数据包如下:{"rxpk": [{"tmst": 1868500100,"time"…

e语言mysql中文_大佬们E语言连接MYSQL输出中文乱码怎么破

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼.版本 2.支持库 mysql.支持库 iext.程序集 窗口程序集_启动窗口.子程序 _按钮1_被单击数据库连接句柄 = 连接MySql (“127.0.0.1”, “root”, “zkqingfish*”, “mu_game_1”, 3306) 执行SQL语句 (连接句柄, “set na…

java中删除最大的数,【Java练习】删除字符串中字符个数最少的字符

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼输入:asdasdas输出:asasas[java] view plain copyprint?1.package com.iotex;2.3.import java.util.ArrayList;4.import java.util.Collections;5.import java.util.Comparator;6.import java.util.HashMap…

php实时上传多张图片,PHP实现多张图片上传预览功能

PHP实现多张图片上传预览功能,支持左右移动图片切换位置、删除图片,限制图片上传的数量等-向左移动图片function reverse_left(obj) {var obj_li obj.parents("li");var obj_prev obj_li.prev("li");if (obj_prev.hasClass("…

centos php 默认安装目录,centos系统中的软件安装目录在哪

centos系统中软件的默认安装目录一般在/usr/local或者/opt中。我们还可以通过whereis命令来查看软件的实际安装路径。命令:whereis功能介绍:在特定目录中查找符合条件的文件。这些文件的烈性应属于原始代码,二进制文件,或是帮助文…

php代码丑,php – 屏幕截图你生命中见过的最丑陋的HTML

我正在使用PHP和libtidy来尝试筛选可能是历史上最糟糕和最不正确的HTML表格使用情况.该站点关闭了几个table,tr,td,font或bold标签,并且一致地嵌套了表中的许多不同的表层.示例代码段:Home Team - WildcatsAway Team - Polar BearsRosters1 Baird, T2 Knight, P8 Mi…

百度指数 php,百度指数是什么?百度指数有什么用?百度指数怎么用?

做SEO必知的第一步:百度指数【百度指数地址】百度指数是用以反映关键词在过去30天内的网络曝光率及用户关注度! 它能形象地反映该关键词的每天的变化趋势!百度指数是以百度网页搜索和百度新闻搜索为基础的免费海量数据分析服务,用…

php获取全部sessionid,php怎么获取所有的sessionid?或获取所有的session

php怎么获取所有的sessionid?或获取所有的sessionphp 如何获取所有的 sessionid ?或获取所有的session就是想通过一个.php文件读取所有的 sessionid ?或获取所有的session ??sessionphp------解决方案----------------…

php atlas,apache atlas是什么

Atlas是一组可伸缩和可扩展的核心基础治理服务——使企业能够有效和高效地满足Hadoop中的遵从性需求,并允许与整个企业数据生态系统进行集成。Apache Atlas为组织提供开放的元数据管理和治理能力,以建立其数据资产的目录,对这些资产进行分类和…

matlab heaviside,Matlab编写的Lyapunov指数计算程序汇总.doc

Matlab编写的Lyapunov指数计算程序汇总matlab编写的Lyapunov指数计算程序汇总申明:以下各程序为个人在网络上收集的Lyapunov指数计算程序,未经过验证,不保证程序的正确性和计算结果的正确性,请大家见谅,也欢迎大家探讨…

php2588,搞清楚一下必胜2588z和2582z哪个好点?都有些什么区别?内幕评测分析

这二个必胜2588z和2582z区别不是很大的哈,款式和配置是差不多的,只是必胜2582Z 2052Z更强一些,看个人需要吧,不过家用的话,这两款都是可以的,我自己用的是必胜2582Z 2052Z,款式多大气的&#xf…

超表面透镜相位matlab,基于超透镜的小F数大景深镜头的设计方法及应用与流程...

本发明涉及基于超透镜的小f数大景深镜头的设计方法及应用。背景技术:监控系统中采用的透镜往往要求具有尽量高的成像分辨率和尽量大的景深,通常情况下,高分辨率的透镜一般具有较小f数,大的景深又要求焦距较短。但是利用传统透镜的…