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 ...
随机推荐
- 前缀函数和 KMP "跳步骤"模式匹配
在一篇由字符构成的长文中查找另一个短字符串出现的位置,这可以算是编程领域最最常见的问题(比如按下 Ctrl + F 就可以打开你浏览器的查找功能).这个问题叫做字符串的模式匹配,我们把被查找的关键词叫 ...
- JMeter 线程编号 __threadNum 获取不到
场景: 在 BeanShell PreProcessor 中,使用 vars.get("__threadNum") 获取不到当前线程数,如: import org.apache.j ...
- 实现领域驱动设计 - 使用ABP框架 - 领域逻辑 & 应用逻辑
领域逻辑 & 应用逻辑 如前所述,领域驱动设计中的业务逻辑分为两部分(层):领域逻辑和应用逻辑: 领域逻辑由系统的核心领域规则组成,应用逻辑实现应用特定的用例 虽然定义很明确,但实现起来可能并 ...
- 资料推荐-一个神奇的网站educative.io
前言 算法和数据结构一直是笔者心中的痛,笔者曾经阅读过两个材料,但都收效不好,尝试总结下这两个材料: 极客时间的数据结构和算法的课程 优点:适合用于去理解数据结构和算法的基本概念 缺点:不包含题目(这 ...
- 小白的第一篇blog
Markdown学习 1.标题 要写标题可用#加空格,再下字,然后再用回车键. 2.字体 1.粗体打法:在文字两侧加两个* 如:hello world! 2.斜体打法:在文字两侧加一个* 如: hel ...
- Oracle - ORA-19809: 超出了恢复文件数的限制
场景重现 使用rman执行以下命令进行数据库备份的时候出现异常: RMAN> backup database; 出现如下错误: # 主要异常信息如下: # ... RMAN-00571: === ...
- JSON Objects Framework(1)
学习datasnap,json必须掌握.用自身的JSON,就必须熟悉JSON Objects Framework.其中tostring和value区别就是一个坑. The JSON objects f ...
- Java容器集合经典面试题集
目录 概述类面试题 1. 请说一下Java容器集合的分类,各自的继承结构 2. 请谈一谈Java集合中的fail-fast和fail-safe机制 3. 如何一边遍历一边删除Collection中的元 ...
- idea插件开发踩坑记录
问题 build.gradles.kts配置文件中全部爆红,提示Cannot access script base class 'org.gradle.kotlin.dsl.KotlinBuildSc ...
- 使用Python和SymPy推导斯特林公式
引言 斯特林公式(Stirling's Approximation)是一种用来近似计算阶乘的数学公式.它是数学分析中非常重要的近似公式之一,尤其在概率论.统计学.物理学等领域中广泛应用.本文将使用 P ...