es聚合查询自动补0----java代码
ES语句
GET /event_log_hulianwang_v3/_search
{
"size": 0,
"query": {
"bool": {
"must": [
{
"term": {
"event_type.keyword": "终端事件"
}
},
{
"range": {
"event_time": {
"gte": "2023-01-11 10:03:32",
"lte": "now"
}
}
}
],
"must_not": [
{
"terms": {
"event_small.keyword": [
"上线",
"下线"
]
}
}
]
}
},
"aggs": {
"monthly_events": {
"date_histogram": {
"field": "event_time",
"interval": "month",
"format": "yyyy-MM",
"min_doc_count": 0,
"extended_bounds": {
"min": "2023-03",
"max": "2024-03"
}
}
}
}
}
查询结果:
java代码实现
@Override
public List<Map<String, Object>> securityEventTrends(String teb) { //存放最后的结果
List<Map<String,Object>> list=new ArrayList<>();
//1.创建搜索请求对象
SearchRequest searchRequest = new SearchRequest(index);
//2.设置搜索源配置
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//3.构建QueryBuilder对象指定查询方式和查询条件
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
//添加日期直方图聚合
DateHistogramAggregationBuilder monthlyEvents=null;
if (teb.equals("时")){
boolQueryBuilder.must(QueryBuilders.termQuery("event_type.keyword", "终端事件"))
.must(QueryBuilders.rangeQuery("event_time").gte(GetTimeUtil.oneDayAgoDateTime()).lte(GetTimeUtil.currentDateTime()))
.mustNot(QueryBuilders.termsQuery("event_small.keyword", "上线", "下线")); // 添加日期直方图聚合
monthlyEvents = AggregationBuilders.dateHistogram("events_datas")
.field("event_time")
.dateHistogramInterval(DateHistogramInterval.HOUR)
.format("yyyy-MM-dd HH").minDocCount(0);
// 自动补0操作
ExtendedBounds extendedBounds = new ExtendedBounds(GetTimeUtil.oneDayAgoDateTime().substring(0,13), GetTimeUtil.currentDateTime().substring(0,13));
monthlyEvents.extendedBounds(extendedBounds);
}else if (teb.equals("日")){
boolQueryBuilder.must(QueryBuilders.termQuery("event_type.keyword", "终端事件"))
.must(QueryBuilders.rangeQuery("event_time").gte(GetTimeUtil.oneMonthAgoDateTime()).lte(GetTimeUtil.currentDateTime()))
.mustNot(QueryBuilders.termsQuery("event_small.keyword", "上线", "下线")); // 添加日期直方图聚合
monthlyEvents = AggregationBuilders.dateHistogram("events_datas")
.field("event_time")
.dateHistogramInterval(DateHistogramInterval.DAY)
.format("yyyy-MM-dd").minDocCount(0);
ExtendedBounds extendedBounds = new ExtendedBounds(GetTimeUtil.oneMonthAgoDateTime().substring(0,10), GetTimeUtil.currentDateTime().substring(0,10));
monthlyEvents.extendedBounds(extendedBounds);
}else if (teb.equals("月")){
boolQueryBuilder.must(QueryBuilders.termQuery("event_type.keyword", "终端事件"))
.must(QueryBuilders.rangeQuery("event_time").gte(GetTimeUtil.oneYearAgoDateTime()).lte(GetTimeUtil.currentDateTime()))
.mustNot(QueryBuilders.termsQuery("event_small.keyword", "上线", "下线"));
searchSourceBuilder.sort(SortBuilders.fieldSort("event_time").order(SortOrder.ASC));
// 添加日期直方图聚合
monthlyEvents = AggregationBuilders.dateHistogram("events_datas")
.field("event_time")
.dateHistogramInterval(DateHistogramInterval.MONTH)
.format("yyyy-MM").minDocCount(0);
ExtendedBounds extendedBounds = new ExtendedBounds(GetTimeUtil.oneYearAgoDateTime().substring(0,7), GetTimeUtil.currentDateTime().substring(0,7));
monthlyEvents.extendedBounds(extendedBounds);
} // 将聚合添加到搜索源构建器
searchSourceBuilder.query(boolQueryBuilder)
.aggregation(monthlyEvents)
.size(0); // 不返回文档,只返回聚合结果 // 设置搜索请求
searchRequest.source(searchSourceBuilder); try {
SearchResponse searchResponse = client.search(searchRequest,RequestOptions.DEFAULT);
System.out.println("查询的es语句------------"+searchRequest);
// 获取聚合结果
ParsedDateHistogram parsedDateHistogram = searchResponse.getAggregations().get("events_datas");
List<? extends Histogram.Bucket> buckets = parsedDateHistogram.getBuckets();
buckets.stream().forEach(val->{
Map<String,Object> map=new HashMap<>();
map.put(((Histogram.Bucket) val).getKeyAsString(),((Histogram.Bucket) val).getDocCount());
list.add(map);
}); } catch (IOException e) {
logger.info("错误日志:"+e.getMessage());
} return list;
}
es聚合查询自动补0----java代码的更多相关文章
- java数字转字符串前面自动补0或者其他数字
/** * Java里数字转字符串前面自动补0的实现. * * @author xiaomo * */ public class TestStringFormat { public ...
- T-SQL使用案例——结果数据前面自动补0
原文:T-SQL使用案例--结果数据前面自动补0 现象: 在开发的过程中,往往需要数字和字符串互转.在转换的过程中,可能需要把1编程00001,这样的格式.实现这种样子是有非常多的方法,本文主要提供一 ...
- js正则格式化日期时间自动补0
原文 js正则格式化日期时间自动补0 背景 时间日期格式化的需求很常见,也有很多工具类转换方法,比如需要将2022-3-4这种日期格式转化为2022-03-04,也就是实现个位数月份或天数日期自动前置 ...
- input内强制保留小数点后两位 位数不足时自动补0
input内强制保留小数点后两位 位数不足时自动补0 小数点后位数超出2位时进行四舍五入 需引入jquery包 1.11.2版本 1 function xiaoshu(x) 2 { 3 var f = ...
- VIM自动补全Python代码
pydiction插件 https://codeload.github.com/rkulla/pydiction/zip/master 新建bundle文件夹 mkdir ~/.vim/bundle ...
- 用c语言如何在数字前自动补0
一: #include <stdio.h>int main(){ long a=3,b=4,c=15; printf("......."a,b,c);return 0; ...
- vscode jsx语法自动补全html代码
1.点击文件——>首选项——>设置 注意:只有在js文件里的jsx才可以自动补全,html文件里的jsx不能.
- mysql查询最近7天的数据,没有数据自动补0
问题描述 查询数据库表中最近7天的记录 select count(*),date(create_time) as date from task where datediff(now(),create_ ...
- MySQL实现按天分组统计,提供完整日期列表,无数据自动补0
业务需求最近要在系统中加个统计功能,要求是按指定日期范围里按天分组统计数据量,并且要能够查看该时间段内每天的数据量. 解决思路直接按数据表日期字段group by统计,发现如果某天没数据,该日期是不出 ...
- ES聚合查询实例
查询特定渠道分享数量最大的30个文章的uuid: { , "query": { "bool": { "must": [ { "te ...
随机推荐
- Error: Address already in use
端口被某个进程占用 使用命令 lsof -i:端口号 然后看到进程号,直接杀掉进程就好 kill -9 进程号
- PLSQL Developer使用大全
第一章 PLSQL Developer特性 PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发.如今,有越来越多的商业逻辑和应用逻辑转向了Oracle S ...
- 【Git】Git GUI的使用
在Git命令行一文中已经对Git的操作命令进行了简单的介绍,但是理论知识过于枯燥,使得初学者在Git的使用上还是会有很大的困难.虽然我更推荐使用Git Bash方式对Git进行操作,但是对于大部分只是 ...
- restful 服务器一个问题,看ChatGPT的威力
看看是否牛逼: 真不是写代码的料,也没有这样的天赋,仅仅玩玩而已. 问题:客户端边缘路由中一段js代码,使用get请求一个方法,把json数据送入数据库相关表.由于种种原因导致长连接,通过资源管理器可 ...
- 使用Python可视化潮汐力
引言 潮汐力,简单来说,就是天体间由于引力差异而产生的力量.这种力在地球上最显著的表现就是潮汐现象,即海水的涨落.潮汐力是由月球和太阳的引力作用引起的,它对地球的影响非常深远,除了海洋潮汐外,还能影响 ...
- 判断页面是否存在指定内容,校验结果(page should contain element指令的用法)
会员调整成分销商后,分销商列表寻找该记录的方法
- 如何在 MySQL 中监控和优化慢 SQL?
如何在 MySQL 中监控和优化慢 SQL? 在 MySQL 中,慢 SQL 查询是指那些执行时间较长的查询,通常会影响数据库的性能和响应时间.通过监控和优化这些慢 SQL 查询,可以提高数据库的效率 ...
- 《基于改进Wallace树的Posit乘法单元优化》(一)
原文 文章通过增加特定的计数器.重新设计部分积求和阶段计数器布局 以及改进最终求和阶段使用的加法器,提出一种名为3L-Wallace树的改进Wallace树算法,有效减少了部分积求和的阶段数, 从而降 ...
- php获取前一天,前一个月,前半年,前一年的时间戳
#获取前一小时strtotime("-1 hour") #获取前一天strtotime("-1 day") #获取前一周strtotime("-1 w ...
- DOC,PDF,PPT文件转换为HTML代码记录
pom文件引入 <repositories> <repository> <id>com.e-iceblue</id> <url>http:/ ...