AggregationBuilders.terms:一段时间内,某个字段取值的数量排名前几的聚合

/ ** 	@param startTime 开始的时间* @param endTime 结束的时间* @param termAggName term过滤* @param fieldName 要做count的字段* @param top 返回的数量*/
RangeQueryBuilder actionPeriod = QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second");
TermsBuilder termsBuilder = AggregationBuilders.terms(termAggName).field(fieldName).size(top).order(Terms.Order.count(false));
return client.prepareSearch(INDICE).setQuery(actionPeriod).addAggregation(termsBuilder).setSize(0).execute().actionGet();     
复制代码

order(Terms.Order.count(false)):表示降序

size(top):top表示只要排序的数量

prepareSearch(INDICE):INDICE表示索引的名字

setSize(0):表示只要聚合结果

如果需要去掉某些特殊字段取值 client为构建的ES客户端

 BoolQueryBuilder actionPeriodMustNot = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second")).mustNot(QueryBuilders.termQuery(field, value));
复制代码

如果是单个字段特定的多个值

//values是个List
BoolQueryBuilder actioPeriodMust = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second")).must(QueryBuilders.termsQuery(field, values));
复制代码

使用结果

Terms clickCount= sr.getAggregations().get(termAggName);
for (Terms.Bucket term:clickCount.getBuckets()){int key = term.getKeyAsNumber().intValue(); //要排序字段的值long docCount = term.getDocCount(); //数量
}
复制代码

date_histogram: 一段时间之内,时间字段按照时间间隔的聚合

BoolQueryBuilder actioPeriodMust = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second"));
DateHistogramBuilder actionInterval = AggregationBuilders.dateHistogram(dateNickName).field("myTimeField").timeZone("Asia/Shanghai");
if (timeInterval<MINUTE){actionTimeInterval.interval(DateHistogramInterval.seconds(timeInterval)).format("HH:mm:ss");
}else if (timeInterval<HOUR){actionTimeInterval.interval(DateHistogramInterval.minutes(timeInterval / MINUTE)).format("dd HH:mm");
}else if (timeInterval < DAY){actionTimeInterval.interval(DateHistogramInterval.hours(timeInterval / HOUR)).format("HH:mm");
}else if (timeInterval < THIRTY_DAY){actionTimeInterval.interval(DateHistogramInterval.days(timeInterval / DAY));
}else{actionTimeInterval.interval(DateHistogramInterval.MONTH);
}
actionInterval.format("yyyy-MM-dd HH:mm:ssZ");
return client.prepareSearch(INDICE).setQuery(actioPeriodMust).addAggregation(actionInterval).setSize(0).execute().actionGet();
复制代码

es本身默认设置的时间戳是 UTC形式,在国内要设置TimeZone(“Asia/Shanghai”);

java的SimpleDateFormate会默认获取虚拟机所在时区的时间戳,所以存时间的时候,最好存与时区无关的时间,再做本地化显示

使用结果

Histogram histogram=sr.getAggregations().get(dateNickName);
for(Histogram.Bucket entry:histogram.getBuckets()){String key = entry.getKeyAsString();//时间间隔long count = entry.getDocCount();//数量
}
复制代码

subAggregation:一段时间内,按照一定的时间间隔,每个间隔段内字段每个取值的数量聚合

相当于合并上述两个场景

BoolQueryBuilder query = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second")).must(QueryBuilders.termsQuery("action", orderValue));
DateHistogramBuilder actionTimeInterval = AggregationBuilders.dateHistogram(dateNickName).field("myTimeField").timeZone("Asia/Shanghai");
actionTimeInterval.subAggregation(AggregationBuilders.terms(termNickName).field("action").size(size));
return client.prepareSearch(INDICE).setQuery(query).addAggregation(actionTimeInterval).setSize(0).execute().actionGet();
复制代码

使用结果

Histogram hitogram = sr.getAggregations().get(dateAggName);
for (Histogram.Bucket date : hitogram.getBuckets()) {String intervalName = date.getKeyAsString();long timeIntervalCount = date.getDocCount();if (timeIntervalCount != 0) {Terms terms = date.getAggregations().get(termAggName);for (Terms.Bucket entry : terms.getBuckets()) {int key=	entry.getKeyAsNumber().intValue();long childCount = entry.getDocCount();}}
}
复制代码

分页获取数据

BoolQueryBuilder actionPeriodMust = QueryBuilders.boolQuery().must(QueryBuilders.termQuery(key, value)).must(QueryBuilders.rangeQuery("myTimeField").gte(startTime).lte(endTime).format("epoch_second"));
return client.prepareSearch(INDICE).setQuery(actionPeriodMust).addSort(SortBuilders.fieldSort("myTimeField").order(SortOrder.ASC)).setFrom(from).setSize(size).execute().actionGet();        
复制代码

使用

Iterator<SearchHit> iterator = sr.getHits().iterator();
while (iterator.hasNext()) {SearchHit next = iterator.next();JSONObject jo = JSONObject.parseObject(next.getSourceAsString());
}
复制代码

AggregationBuilders.cardinality:获取某个字段的唯一取值数量

BoolQueryBuilder query = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("myTimeField").gte(startTimeInSec*1000).lte(endTimeInSec*1000).format("epoch_millis"));
CardinalityBuilder fieldCardinality = AggregationBuilders.cardinality(cardinalityAggName).field(field);//field 要获取的字段
return client.prepareSearch(INDICE).setQuery(query).addAggregation(fieldCardinality).execute().actionGet();
复制代码

使用结果

Cardinality cardinality = sr.getAggregations().get(cardinalityAggName);
long value = cardinality.getValue();
复制代码

bool查询

比如想要addr是beijing的,同时必须满足条件:name是 paxi,或者,phoneNumber是 1234567890

BoolQueryBuilder searchIdQuery = QueryBuilders.boolQuery();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
while (kvs.hasNext()){Map.Entry<String, String> fieldValue = kvs.next();String field=fieldValue.getKey();String value=fieldValue.getValue();searchIdQuery.should(QueryBuilders.termQuery(field, value));
}
boolQueryBuilder.must(searchIdQuery);
boolQueryBuilder.must(QueryBuilders.termsQuery(key, values));
return client.prepareSearch(INDICE).setQuery(boolQueryBuilder).execute().actionGet();
复制代码

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

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

相关文章

关于JavaScript的数组随机排序

昨天了解了一下Fisher–Yates shuffle费雪耶兹随机置乱算法&#xff0c;现在再来看看下面这个曾经网上常见的一个写法&#xff1a; function shuffle(arr) { arr.sort(function () { return Math.random() - 0.5; }); } 或者使用更简洁的 ES6 的写法&#xff1a; function shu…

通用唯一识别码UUID

UUID是通用唯一识别码&#xff08;Universally Unique Identifier&#xff09;的缩写。UUID 的目的&#xff0c;是让分布式系统中的所有元素&#xff0c;都能有唯一的辨识资讯&#xff0c;而不需要透过中央控制端来做辨识资讯的指定。如此一来&#xff0c;每个人都可以建立不与…

java内省机制 + 内省是什么 + 内省实现方式 + 和反射的区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、内省是什么、实现方式&#xff1a; 内省&#xff08;Introspector&#xff09;是Java语言对Bean类属性、事件的一种缺省处理方法。…

百度联合长虹发布第二款云手机 售价900元以下

摘要&#xff1a;【搜狐IT消息】5月15日消息&#xff0c;百度今天宣布联合长虹发布第二款智能手机&#xff0c;采用3.5英寸屏幕、300万像素摄像头&#xff0c;650MHz主频处理器&#xff0c;零售价格在700-899元之间&#xff0c;中国联通将为其提供话费补贴。 【搜狐IT消息】5月…

vmware workstation17环境安装centos7

打开控制面板&#xff0c;搜索“服务”&#xff0c;启动vmware authorize service -------解决无法开启虚拟机问题之无法连接MKS 2.虚拟机硬盘扩展为15G------解决安装centos7时出现的“检查存储配置出错”问题 3.硬盘分区----/boot 300mb&#xff08;不能小于200mb&#xff0…

博客园中的源代码格式显示

昨天写了一篇文章&#xff0c;但是在写的时候呢&#xff0c;没有注意&#xff0c;直接将代码复制上去了&#xff0c;今天正好有人提醒&#xff0c;看到了格式的混乱&#xff0c;借此记录整理一下&#xff0c;如何能直接粘贴代码&#xff0c;而且格式&#xff08;缩进&#xff0…

static的使用

类中的静态变量在程序运行期间&#xff0c;其内存空间对所有该类的对象实例而言是共享的&#xff0c;为了节省系统内存开销、共享资源&#xff0c;应该对一些适合使用static的变量声明为静态变量。 变量声明为static的使用场景&#xff1a; &#xff08;1&#xff09;变量所…

Linux内核的裁剪和移植

linux内核的裁剪和移植具体都在这个网址里面。https://blog.csdn.net/xie0812/article/details/10816059https://blog.csdn.net/xie0812/article/details/10821779转载于:https://blog.51cto.com/13401435/2145947

李开复唱衰互联网手机:大部分公司会失败

摘要&#xff1a;互联网企业和手机制造企业之间巨大的鸿沟也被李开复鲜明地指出来&#xff1a;“两个产业差别巨大&#xff0c;企业基因不同。”百度此前也坦诚表示&#xff0c;与长虹合作的千元机&#xff0c;主要是针对2000元以下的用户体验&#xff0c;不能与四五千元的苹果…

【POJ】3268 Silver Cow Party

题目链接&#xff1a;http://poj.org/problem?id3268 题意 &#xff1a;有N头奶牛&#xff0c;M条单向路。X奶牛开party&#xff0c;其他奶牛要去它那里。每头奶牛去完X那里还要返回。去回都是走的最短路。现在问这里面哪头奶牛走的路最长。 题解&#xff1a;对每个奶牛i与X做…

java.util.ConcurrentModificationException异常分析

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Java在操作ArrayList、HashMap、TreeMap等容器类时&#xff0c;遇到了java.util.ConcurrentModificationException异常。以ArrayList为例…

redis基本数据类型之String

redis基本数据类型之String redis一共分为5中基本数据类型&#xff1a;String,Hash,List,Set,ZSet String String类型是包含很多种类型的特殊类型&#xff0c;并且是二进制安全的。比如序列化的对象进行储存&#xff0c;比如一张图片进行二进制储存&#xff0c;比如一个简单…

Laravel5.5之事件监听、任务调度、队列

一、事件监听 流程&#xff1a; 1.1 创建event php artisan make:event UserLogin LoginController.php /*** The user has been authenticated.** param \Illuminate\Http\Request $request* param mixed $user* return mixed*/protected function authenticated(Request …

朱江洪功成身退 朱董配解体谁主格力(图)

摘要&#xff1a;中国家电营销委员会副理事长洪仕斌向时代周报记者表示&#xff1a;“朱江洪和董明珠已经完成了他们在格力发展前二十年的使命。“朱董配”解体之后&#xff0c;有人质疑格力“技术营销”的格局必将被打破&#xff0c;难以延续&#xff0c;“董氏班底”与朱江洪…

一些dos下简单命令

(1)切换盘符 d: 回车 (2)显示某目录下的所有文件或者文件夹(掌握) dir 回车 (3)创建文件夹 md 文件夹名称 回车 (4)删除文件夹 rd 文件夹名称 回车 (5)进入目录(掌握) 单级进入 cd 目录名称 多级进入 cd 目录名称1\目录名称2\... (6)回退目录(掌握) 单级回退 cd.. …

ssh服务器拒绝了密码 请再试一次 Xftp5连接失败

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我的情况都很简单&#xff1a; 第一回主机 ip 不对&#xff0c; 第二次 是账号、密码都不对。 最后 IP、账号、密码都对了 就连上了。

后端DTO(数据传输对象)与DAO(数据库数据源对象)解耦的好处

我们在后端的开发中经常会将DO对象传到Service层直接作为DTO传给前端&#xff0c;这样做其实会有很多弊端。 &#xff08;一&#xff09;DO对象一般其成员域和数据库字段是对应的&#xff0c;所以不能添加额外的字段&#xff0c;但是有时候端就是需要这个字段。反之前端要向后…

【刷算法】字符串的全排列

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 分析 没啥好分析的了&#xff0c;这个题不会&#xff0c;上网查的思路&#xff0c;大概就是&#xff1a; abc分化…

BZOJ.2741.[FOTILE模拟赛]L(分块 可持久化Trie)

题目链接 首先记\(sum\)为前缀异或和&#xff0c;那么区间\(s[l,r]sum[l-1]^{\wedge}sum[r]\)。即一个区间异或和可以转为求两个数的异或和。 那么对\([l,r]\)的询问即求\([l-1,r]\)中某两个数异或的最大值。 区间中某一个数和已知的一个数异或的最大值可以用可持久化Trie \(O(…

传腾讯人事大地震 马化腾将重整公司架构

摘要&#xff1a;5月17日消息&#xff0c;传腾讯董事长马化腾将重新组织公司架构&#xff0c;为腾讯大换血。据悉&#xff0c;腾讯之所以选择互动娱乐部门负责人接任这一重要岗位&#xff0c;也是因为互娱部门业绩持续快速发展&#xff0c;成为了“腾讯帝国”发展的核心驱动力之…