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代码的更多相关文章

  1. java数字转字符串前面自动补0或者其他数字

    /**  * Java里数字转字符串前面自动补0的实现.  *  * @author  xiaomo *  */  public class TestStringFormat {    public ...

  2. T-SQL使用案例——结果数据前面自动补0

    原文:T-SQL使用案例--结果数据前面自动补0 现象: 在开发的过程中,往往需要数字和字符串互转.在转换的过程中,可能需要把1编程00001,这样的格式.实现这种样子是有非常多的方法,本文主要提供一 ...

  3. js正则格式化日期时间自动补0

    原文 js正则格式化日期时间自动补0 背景 时间日期格式化的需求很常见,也有很多工具类转换方法,比如需要将2022-3-4这种日期格式转化为2022-03-04,也就是实现个位数月份或天数日期自动前置 ...

  4. input内强制保留小数点后两位 位数不足时自动补0

    input内强制保留小数点后两位 位数不足时自动补0 小数点后位数超出2位时进行四舍五入 需引入jquery包 1.11.2版本 1 function xiaoshu(x) 2 { 3 var f = ...

  5. VIM自动补全Python代码

    pydiction插件 https://codeload.github.com/rkulla/pydiction/zip/master 新建bundle文件夹 mkdir ~/.vim/bundle ...

  6. 用c语言如何在数字前自动补0

    一: #include <stdio.h>int main(){ long a=3,b=4,c=15; printf("......."a,b,c);return 0; ...

  7. vscode jsx语法自动补全html代码

    1.点击文件——>首选项——>设置 注意:只有在js文件里的jsx才可以自动补全,html文件里的jsx不能.

  8. mysql查询最近7天的数据,没有数据自动补0

    问题描述 查询数据库表中最近7天的记录 select count(*),date(create_time) as date from task where datediff(now(),create_ ...

  9. MySQL实现按天分组统计,提供完整日期列表,无数据自动补0

    业务需求最近要在系统中加个统计功能,要求是按指定日期范围里按天分组统计数据量,并且要能够查看该时间段内每天的数据量. 解决思路直接按数据表日期字段group by统计,发现如果某天没数据,该日期是不出 ...

  10. ES聚合查询实例

    查询特定渠道分享数量最大的30个文章的uuid: { , "query": { "bool": { "must": [ { "te ...

随机推荐

  1. Docker镜像(image)详解

    如果曾经做过 VM 管理员,则可以把 Docker 镜像理解为 VM 模板,VM 模板就像停止运行的 VM,而 Docker 镜像就像停止运行的容器:而作为一名研发人员,则可以将镜像理解为类(Clas ...

  2. Pydantic Mixin:构建可组合的验证系统体系

    title: Pydantic Mixin:构建可组合的验证系统体系 date: 2025/3/22 updated: 2025/3/22 author: cmdragon excerpt: Pyda ...

  3. C# Socket 使用教程

    我在学习Socket时,总是感觉文章看不懂,视频又好长,所以留下这篇学习笔记,权当做同学间学习参考,与个人回顾吧. 简介 Socket(译做:管道/套接字)是一个便捷的类 用于封装通信时所涉及到复杂底 ...

  4. 学习Kotlin语法(四)

    简介 在上一节,我们对Kotlin中函数的相关知识有了大致的了解,本章节我们将去了解一些Kotlin中的作用域函数. 目录 let:处理可空对象,链式操作 run:对象配置 + 计算返回值 with: ...

  5. 2024 (ICPC) Jiangxi Provincial Contest -- Official Contest

    L. Campus 1.首先考虑时间复杂度,因为最多只会有2*k的时间点,所以我们采取的策略是,对这每个时刻,判断有多少扇门是开的,并且考虑这些门到其他点的最短路之和. 2.输入完数据以后,使用dij ...

  6. springboot接口接收xml

    对xml文件的操作也可以借助hutool的XmlUtil. 1. xml格式 <root> <deviceStatInfo onlineCount="64" of ...

  7. 在 .NET 中的 ConvertAll 和 Select 方法哪个性能好

    .NET 的 List 中提供了 ConvertAll 和 Select 两个方法,在开发中实际上应该使用哪一个? 接下来通过基准测试脚本来对比性能. 先编写基准测试脚本: [MemoryDiagno ...

  8. tp5 分页权限权限设置显示

    $adminid = cookie("adminid"); $shop_id=$this->get_shop_id(); if($adminid==1){ $uid = in ...

  9. 我与 ChatGPT 讨论了面向对象语言 中,关于动态调用的问题

    你好,支持面向对象的语言中,"方法表" 是用来处理什么的? 在面向对象的语言中,"方法表"通常指一个类或对象中定义的方法列表.这些方法定义了该类或对象可以做什么 ...

  10. bat文件简短

    bat文件 @echo off F: cd\pictures\projectStreet\FloatingShinyKnot-main node server.js cd\ bat静默运行(但会闪一下 ...