首页 > 编程语言 >es聚合查询自动补0----java代码

es聚合查询自动补0----java代码

时间:2024-03-12 17:57:56浏览次数:27  
标签:GetTimeUtil extendedBounds java QueryBuilders ---- time new event es

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; }

 

标签:GetTimeUtil,extendedBounds,java,QueryBuilders,----,time,new,event,es
From: https://www.cnblogs.com/dabu/p/18068864

相关文章

  • React — 请求模块(http)封装、API模块封装
    一、请求模块封装//axios封装//根域名配置//超时//请求拦截器/响应拦截器importaxiosfrom'axios'consthttp=axios.create({baseURL:"",timeout:5000})//在发送请求之前拦截插入自定义配置对于参数的处理http.interceptors.request.use(config......
  • PLSQL登录ora_12541无法识别连接符
       tnsnames.ora文件配置时,有一定的格式要求,一般从其他地方粘贴时,地址端口服务名都不会有什么问题,这时粘贴时要注意各行的格式要求:<ATOMICSCHEMANAME>=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<HOSTNAME>)(PORT=<PORTNUMBER>)))(CON......
  • Pixel 刷机教程(已Root 保数据升级)(使用PixelFlasher)
    本教程留作本人备用,下面教程基于Pixel6Pro复现⚠️警告☣️如果想保留数据一定不要:下载出厂镜像然后解压,然后双击flash-all.bat,此操作会清空数据!!!!!!!!下载刷机包去官网下载刷机包即可(国内可访问):https://developers.google.cn/android/images?hl=zh-cn出厂映像就是线刷包⭐建议......
  • 开学二周(日常补题训练)
    pta天梯专栏7-11龙龙送外卖-SMU2024spring天梯赛1(补题)(pintia.cn)题解:首先我们先建个图然后存一下各个节点的父亲节点我们细看这个最短路可以发现,当全部节点加进来,那么最短路就是每一个节点跑两遍然后最深的那个节点最后才跑,这样就只需要1遍所以我们首先把每一个节......
  • TR069-STUN
    原理1、NAT穿越技术,为了解决NAT设备对P2P网络的通信限制 2、作用:检测网络中是否存在NAT设备,并获取两个通信端点经NAT设备分配的IP地址和端口号,然后建立一条可穿越NAT的P2P链接,实现P2P通信 3、cwmp:依据TR111实现STUNServer功能,CPE作为STUNClient,向STUNServer发送BINDING......
  • Windows环境安装RabbitMQ
    消息队列......
  • tomcat无法启动的解决方法
    一:双击startup.bat但闪退我们可以用记事本打开startup.bat在末尾添加一个pause这样它就会新建一个窗口停在错误的地方二:根据报错信息改正这一步如果有乱码可以进入tomcat的conf目录下logging.properties找到java.util.logging.ConsoleHandler.encoding=utf-8这行更改......
  • 【转】QPS和并发数的关系
     原文: https://www.cnblogs.com/ooo0/p/15963700.html-------------------- QPS:  请求进入的速度并发数:系统中同时存在的请求数 根据Little'sLaw,我们能得到如下的关系式:并发数 = QPS*耗时 以大学招生为例:大一新生的招收速度是5000人/年,每个学生在大学......
  • Leangoo领歌免费敏捷工具项目“版本发布”功能上线
    ​ Leangoo领歌是款永久免费的专业的敏捷开发管理工具,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。Leangoo领歌上手快、实施成本低,可帮助企业快速落地敏捷,提质增效、缩短周期、加速创新。Leangoo领歌区别于传统项目管理软件,项目的需求、......
  • LY1060 [ 20230203 CQYC模拟赛IV T1 ] 放进去
    题意一共有\(n\)个物品,每个物品有\(m\)种种类。每个物品的每个种类的代价为\(a_{i,j}\)选择一种种类需要先支付\(b_i\)的代价。\(n\le1e5,m\le25\)求最小的代价使得能够选择\(n\)种物品。Sol考场上竟然没做出来。。。冲到最后20min交了发模拟退火。。。集......