java中使用restTemplate.postForObject()方法向es发送请求

restTemplate.postForObject() 方法本质上是将对象放入HttpEntity中,然后将对象POST给一个url。
当我想根据时间范围批量删除一些es中的数据,用到了_delete_by_query的方法,在kibana上面写好测试得没问题了,然后我想把kibana上面整个语句直接发送到es上面。
这是我在kibana上面写的

POST center_data/_delete_by_query
{
"query": {
    "bool":{
      "must":{
          "range": {
             "RECORDTIME": {
              "gte": "2020-06-29 01:00:00",
              "lte": "2020-06-29 01:30:00"
            }
        }
        }
    }
  }
  }

方法测试已经没问题
下面是Java中的操作

 public ResultEntity deleteByTime(String url, String name,String starttime,String endtime){
//        boolean returnResult = false;
        String result ="";
//        String url = EsHttpUrl+"/center_data/_delete_by_query";
        try {
            HttpHeaders headers = new HttpHeaders();
            MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
            headers.setContentType(type);
            if (!"111".equals(EsUserPwd)) {
                headers.add("Authorization", "Basic " + Base64.getBase64(EsUserPwd));
            }
            headers.add("Accept", MediaType.APPLICATION_JSON.toString());
            RestTemplate restTemplate = new RestTemplate();
            String body = "{\n" +
                    "\"query\": {\n" +
                    "    \"bool\":{\n" +
                    "      \"must\":{\n" +
                    "          \"range\": {\n" +
                    "             \""+name+"\": {\n" +              //RECORDTIME
                    "              \"gte\": \""+starttime+"\",\n" +            //2020-06-29 00:00:00
                    "              \"lte\": \""+endtime+"\"\n" +               //2020-06-29 01:00:00
                    "            }\n" +
                    "        }\n" +
                    "        }\n" +
                    "    }\n" +
                    "  }\n" +
                    "  }";
            HttpEntity<String>  formEntity = new HttpEntity<String>(body, headers);
            LOGGER.info("formEntity:::"+formEntity);
            result=restTemplate.postForObject(url, formEntity, String.class);
  //          returnResult = true;
            LOGGER.info("result::::::::::::::::::::::::"+result);
            LOGGER.info("删除完成");
        }catch (Exception e){
  //          returnResult=false;
            LOGGER.info("eee"+e);
            LOGGER.error("删除失败,删除时间段:"+starttime+"--"+endtime);
        }

        return new ResultEntity(result);
    }

需要注意的点:

1. url是需要写整个,就像kibana里面一样,比如这样:
String url = EsHttpUrl+"/center_data/_delete_by_query";
2. 在把kibana里面的请求体复制的时候要带着大括号复制在这里插入图片描述

这个图片里面标记的这一组大括号就不能少,不然会报400。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如我一般的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值