栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

es时间段查询

es时间段查询

下面展示一些 内联代码片。

es时间段查询 记录一下学习es的艰辛之旅

刚接触es 的时候,就来个需求dsl都不会写,直接硬上,结果就是第一段这种情况,先查范围再分割,蠢方法还觉得写的分割算法很厉害,结果过了半年再看直接es自带方法,虽然是es5,没那么多花里胡哨的方法,但是够用上,321上链接(时间段的起止可以用hutool工具包,更加方便一点,虽然但是能用就行)

  
    @Override
    public JSonObject findApiLogByThourHttp(JSonObject params) {
        JSonObject result = new JSonObject();
        try {
            JSonObject ap = new JSonObject();
            List hintList = new ArrayList();
            //参数校验
//            if (StringUtils.isBlank(params.getString("start_time"))) {
//                hintList.add("start_time");
//            }
            if (StringUtils.isBlank(params.getString("time_range"))) {
                hintList.add("time_range");
            }
            if (!hintList.isEmpty()) {
                result.put("code", ResponseCode.C0001);
                result.put("keyword", org.apache.commons.lang3.StringUtils.join(hintList));
                return result;
            }
            List list = new ArrayList<>();
            long current = System.currentTimeMillis();
            long zero1 = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
            long zero = getStartTimeOfDay();
            long twelve = zero + 24 * 60 * 60 * 1000 - 1;//今天23点59分59秒的毫秒数
            long l = System.currentTimeMillis() - System.currentTimeMillis() % 3600000;
            //long onehour = current - 24 * 60 * 60 * 1000 - 1;
            long onehour;
            long jgtime = 0;
            String ttnum = params.getString("time_range");
            switch (ttnum) {
                case "1":
                    onehour = current - 1 * 60 * 60 * 1000 - 1;
                    jgtime=60 * 1000;
                    break;
                case "24":
                    onehour = current - 24 * 60 * 60 * 1000 - 1;
                    jgtime=60 * 60 * 1000;
                    break;
                case "7":
                    onehour = zero - 7 * 24 * 60 * 60 * 1000 ;
                    current=twelve;
                    jgtime=24 * 60 * 60 * 1000;
                    break;
                case "30":
                   
//                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//                    sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
                    Date date =new Date();
                    date.setTime(zero);
                    Calendar now = Calendar.getInstance();
                    now.setTime(date);         //塞入当前日期
                    now.add(Calendar.MONTH, -1);
                    onehour = now.getTimeInMillis();
                    current=twelve;
                    jgtime=24 * 60 * 60 * 1000;
                    break;
                default:
                    onehour = current - 1 * 60 * 60 * 1000 - 1;
                    jgtime=60 * 1000;
                    break;

            }
            //    System.out.println("zerooo"+zero+"twwlwllw"+twelve);
            long time = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse("2021-05-07 20:00:00", new ParsePosition(0)).getTime() / 1000;

            // 闭区间//1小时范围内
            QueryBuilder qb1 = QueryBuilders.rangeQuery("start_time").gte(onehour).lte(current);
            //  .includeLower(true)     // 包含上界
            //.includeUpper(true);      // 包含下届
            // 大于//成功的
            // QueryBuilder qb2 = QueryBuilders.rangeQuery("id").gt(1);w
            // 过滤多条件
            QueryBuilder qb;
            if (params.get("service_id") != null && params.get("service_id") != "") {
                QueryBuilder qb3 = QueryBuilders.termQuery("service_id.keyword", params.get("service_id"));
                // 单个字符串//状态是成功的
                if (params.get("status") != null && params.get("status") != "") {
                    // 单个字符串//状态是成功的
                    QueryBuilder qb0 = QueryBuilders.termQuery("status", params.get("status"));
                    qb = QueryBuilders.boolQuery().must(qb1).must(qb0).must(qb3);
                } else {
                    qb = QueryBuilders.boolQuery().must(qb1).must(qb3);
                }
            } else {
                if (params.get("status") != null && params.get("status") != "") {
                    // 单个字符串//状态是成功的
                    QueryBuilder qb0 = QueryBuilders.termQuery("status", params.get("status"));
                    qb = QueryBuilders.boolQuery().must(qb1).must(qb0);
                } else {
                    qb = QueryBuilders.boolQuery().must(qb1);
                }
            }
            JSonObject json = new JSonObject();
            json.put("query",JSON.parseObject(qb.toString()));
            json.put("size",10000);
            JSonArray jsonArray=new JSonArray();
            JSonObject jobj=new JSonObject();
            jobj.put("start_time","desc");
            jsonArray.add(jobj);
            json.put("sort",jsonArray);
            Map map = RestLowEsHttpUtil.RestLowEsHttpUtil(this.getHost(),json.toString(),"POST",database+"/ds_invoke");
            if("-1".equals(map.get("code"))){
                result.put("code", ResponseCode.FAILED);
                return result;
            }
            JSonObject dataObject = JSON.parseObject(map.get("data"));
            JSonObject hitsObject = (JSONObject) dataObject.get("hits");
            JSonArray hitsListArray = (JSONArray) hitsObject.get("hits");
            List invokeModelList =  new ArrayList<>();
            for(int i=0;i {
                    for (long i = onehour; i < finalCurrent; i += finalJgtime) {
                        int j = 0;
                        if (e.getStart_time() > i && e.getStart_time() < i + finalJgtime) {
                            j++;
                        }
                        if (j > 0) {
                            if ((timedun.get(stampToDate(String.valueOf(i))) != null) && (int) timedun.get(stampToDate(String.valueOf(i))) > 0) {
                                timedun.put(stampToDate(String.valueOf(i)), (int) timedun.get(stampToDate(String.valueOf(i))) + 1);
                            } else {
                                timedun.put(stampToDate(String.valueOf(i)), j);
                            }
                        }
                    }
                    return null;
                }).collect(Collectors.toList());
                ap.put("timedun", timedun);
            }
            ap.put("count", total);
            //ap.put("list", list);
            result.put("data", ap);
            result.put("code", ResponseCode.OK);
        } catch (Exception e) {
            logger.error("es add err...n", e);
            result.put("code", ResponseCode.FAILED);
        }
        return result;
    }


    
    public JSonObject findApiLogByThourHttpNew(JSonObject params) {
        JSonObject result = new JSonObject();
        try {
            JSonObject ap = new JSonObject();
            List hintList = new ArrayList();
            if (StringUtils.isBlank(params.getString("time_range"))) {
                hintList.add("time_range");
            }
            if (!hintList.isEmpty()) {
                result.put("code", ResponseCode.C0001);
                result.put("keyword", org.apache.commons.lang3.StringUtils.join(hintList));
                return result;
            }

//            String now = DateUtil.now();
//            long nowCurrent=DateUtil.currentSeconds();
//
//            DateUtil.offsetMinute(Date date, int offset)



            List list = new ArrayList<>();
            long current = System.currentTimeMillis();
            long zero1 = current / (1000 * 3600 * 24) * (1000 * 3600 * 24) - TimeZone.getDefault().getRawOffset();
            long zero = getStartTimeOfDay();
            long twelve = zero + 24 * 60 * 60 * 1000 - 1;//今天23点59分59秒的毫秒数
            long l = System.currentTimeMillis() - System.currentTimeMillis() % 3600000;
            //long onehour = current - 24 * 60 * 60 * 1000 - 1;
            long onehour;
            long jgtime = 0;
            String ttnum = params.getString("time_range");
            switch (ttnum) {
                case "1":
                    onehour = current - 1 * 60 * 60 * 1000 - 1;
                    jgtime=60 * 1000;
                    break;
                case "24":
                    onehour = current - 24 * 60 * 60 * 1000 - 1;
                    jgtime=60 * 60 * 1000;
                    break;
                case "7":
                    onehour = zero - 7 * 24 * 60 * 60 * 1000 ;
                    current=twelve;
                    jgtime=24 * 60 * 60 * 1000;
                    break;
                case "30":
                   
//                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//                    sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
                    Date date =new Date();
                    date.setTime(zero);
                    Calendar now = Calendar.getInstance();
                    now.setTime(date);         //塞入当前日期
                    now.add(Calendar.MONTH, -1);
                    onehour = now.getTimeInMillis();
                    current=twelve;
                    jgtime=24 * 60 * 60 * 1000;
                    break;
                default:
                    onehour = current - 1 * 60 * 60 * 1000 - 1;
                    jgtime=60 * 1000;
                    break;

            }
            //    System.out.println("zerooo"+zero+"twwlwllw"+twelve);
            long time = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse("2021-05-07 20:00:00", new ParsePosition(0)).getTime() / 1000;

            // 闭区间//1小时范围内
            QueryBuilder qb1 = QueryBuilders.rangeQuery("start_time").gte(onehour).lte(current);
            //  .includeLower(true)     // 包含上界
            //.includeUpper(true);      // 包含下届
            // 大于//成功的
            // QueryBuilder qb2 = QueryBuilders.rangeQuery("id").gt(1);w
            // 过滤多条件
            QueryBuilder qb;
            if (params.get("service_id") != null && params.get("service_id") != "") {
                QueryBuilder qb3 = QueryBuilders.termQuery("service_id.keyword", params.get("service_id"));
                // 单个字符串//状态是成功的
                if (params.get("status") != null && params.get("status") != "") {
                    // 单个字符串//状态是成功的
                    QueryBuilder qb0 = QueryBuilders.termQuery("status", params.get("status"));
                    qb = QueryBuilders.boolQuery().must(qb1).must(qb0).must(qb3);
                } else {
                    qb = QueryBuilders.boolQuery().must(qb1).must(qb3);
                }
            } else {
                if (params.get("status") != null && params.get("status") != "") {
                    // 单个字符串//状态是成功的
                    QueryBuilder qb0 = QueryBuilders.termQuery("status", params.get("status"));
                    qb = QueryBuilders.boolQuery().must(qb1).must(qb0);
                } else {
                    qb = QueryBuilders.boolQuery().must(qb1);
                }
            }
            AggregationBuilder agg ;
            switch (ttnum) {
                case "1":
                     agg =  AggregationBuilders.dateHistogram("groupDate").field("start_time").dateHistogramInterval(DateHistogramInterval.MINUTE).offset("-8h");
                    break;
                case "24":
                     agg =  AggregationBuilders.dateHistogram("groupDate").field("start_time").dateHistogramInterval(DateHistogramInterval.HOUR).offset("-8h");
                    break;
                case "7":
                     agg =  AggregationBuilders.dateHistogram("groupDate").field("start_time").dateHistogramInterval(DateHistogramInterval.DAY).offset("-8h");
                    break;
                case "30":
                     agg =  AggregationBuilders.dateHistogram("groupDate").field("start_time").dateHistogramInterval(DateHistogramInterval.DAY).offset("-8h");
                    break;
                default:
                     agg =  AggregationBuilders.dateHistogram("groupDate").field("start_time").dateHistogramInterval(DateHistogramInterval.DAY).offset("-8h");

            }
            JSonObject aggjson=JSONObject.parseObject(agg.toString());
            String dsl1=aggjson.toString();
            aggjson.getJSonObject("groupDate").getJSonObject("date_histogram").remove("order");

//            JSonObject json = new JSonObject();
//            json.put("query",JSON.parseObject(qb.toString()));
//            json.put("size",10000);
//            JSonArray jsonArray=new JSonArray();
//            JSonObject jobj=new JSonObject();
//            jobj.put("start_time","desc");
//            jsonArray.add(jobj);
//            json.put("sort",jsonArray);

            JSonObject json = new JSonObject();
            json.put("query", JSON.parseObject(qb.toString()));
            json.put("size", "0");
            json.put("aggs",aggjson);
            String dsl=json.toString();
            Map map = RestLowEsHttpUtil.RestLowEsHttpUtil(this.getHost(),dsl,"POST",database+"/ds_invoke");
            if("-1".equals(map.get("code"))){
                result.put("code", ResponseCode.FAILED);
                return result;
            }
            JSonObject dataObject = JSON.parseObject(map.get("data"));
            JSonObject hitsObject = dataObject.getJSonObject("aggregations").getJSonObject("groupDate");

            JSonArray buckets = hitsObject.getJSonArray("buckets");
            int total = (Integer) dataObject.getJSonObject("hits").get("total");
            JSonObject timedun = new JSonObject();
            buckets.stream().forEach(e->{
                JSonObject obj = (JSONObject) e;
                timedun.put(stampToDate(obj.getString("key")), obj.getIntValue("doc_count"));
            });
            ap.put("timedun", timedun);
            ap.put("count", total);
            //ap.put("list", list);
            result.put("data", ap);
            result.put("code", ResponseCode.OK);
        } catch (Exception e) {
            logger.error("es add err...n", e);
            result.put("code", ResponseCode.FAILED);
        }
        return result;
    }



上dsl语句

{
    "size": "0",
    "query": {
        "bool": {
            "adjust_pure_negative": true,
            "must": [
                {
                    "range": {
                        "start_time": {
                            "include_lower": true,
                            "include_upper": true,
                            "from": 1642521600000,
                            "boost": 1,
                            "to": 1643212799999
                        }
                    }
                },
                {
                    "term": {
                        "status": {
                            "boost": 1,
                            "value": "false"
                        }
                    }
                }
            ],
            "boost": 1
        }
    },
    "aggs": {
        "groupDate": {
            "date_histogram": {
                "field": "start_time",
                "offset": -28800000,
                "interval": "1d",
                "keyed": false,
                "min_doc_count": 0
            }
        }
    }
}

如果对你有用,有帮助的话,点个赞再走吧

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/722638.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号