记录一次有意思的Elasticsearch垃圾数据删除操作

一次数据处理过程中出现bug,造成es中进入脏数据,需要快速删除脏数据。虽然java客户端有接口,但是有时候手头没有现成的依赖和代码。

1.首先想到的是curl

如果知道,第一个想到的是根据id删除数据

curl -XDELETE 'http://x.x.10.183:9200/info_data/info_data/9511'

java调用curl命令,便利id列表删除数据,但是这种方法慢,适用少量数据。

import cn.hutool.core.util.RuntimeUtil;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Del_esTest {
    public static String execCurl(String[] cmds) {
        ProcessBuilder process = new ProcessBuilder(cmds);
        Process p;
        try {
            p = process.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
            StringBuilder builder = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
                builder.append(System.getProperty("line.separator"));
            }
            return builder.toString();

        } catch (IOException e) {
            System.out.print("error");
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        //不按这样构建cmd 会报错
        String[] cmds = {"curl", "-X", "DELETE",
                "http://192.168.10.183:9200/info_data/info_data/9511",
                "-H", "accept: */*", "-H", "Content-Type: application/json;charset=UTF-8", "-d"
                , "{ \\\"bodyName\\\": \\\"bodyValue\\\"}"};
        
          //使用系统自带的ProcessBuilder
//        System.out.println(execCurl(cmds));


        //可以使用 hutool的 RuntimeUtil
        String str = RuntimeUtil.execForStr(cmds);
        System.out.println(str);
    }
}

2.鉴于根据id删除过慢,考虑能否直接根据搜索结果批量删除。

首先熟悉一下curl的search接口。

json格式化推荐使用:JSON在线解析及格式化验证 - JSON.cn,因为如果格式化不标准,curl粘贴过去可能会报错。

来源:Elasticsearch布尔查询——bool - 穷开心y - 博客园

#根据pubtime排序

curl -XGET 'http://192.168.10.183:9200/info_data/info_data/_search' -d '
{
    "sort":[
        {
            "pubtime":{
                "order":"desc"
            }
        }
    ],
    "from":0,
    "size":10
}
'

#根据site_group查询

curl -XGET 'http://192.168.10.183:9200/info_data/info_data/_search' -d '
{
    "query":{
        "term":{
            "site_group":"106"
        }
    },
    "sort":[
        {
            "id":{
                "order":"asc"
            }
        }
    ],
    "from":0,
    "size":1
}
'

#根据复合条件查询

curl -XGET 'http://192.168.10.183:9200/info_data/info_data/_search' -d '
{
    "query":{
        "bool":{
            "must":[
                {
                    "term":{
                        "data_type":"1"
                    }
                },
                {
                    "term":{
                        "site_group":"106"
                    }
                }

            ]
        }
    },
    "sort":[
        {
            "id":{
                "order":"asc"
            }
        }
    ],
    "from":0,
    "size":1
}
'

 #查询删除 delete_by_query,这种删除最快,但是一定要慎重,先查询确认,再删除

curl -X POST "localhost:9200/twitter/_delete_by_query?scroll_size=5000" -H 'Content-Type: application/json' -d'
{
  "query": {
    "term": {
      "user": "kimchy"
    }
  }
}
'

#range query 范围查询

curl -XGET 'x.x.55.188:9200/second_short_video_info_ref/second_short_video_info_ref/_search' -d'
{
  "query": {
    "range": {
      "pubtime": { 
        "gte": "2022-03-23 00:00:00", 
        "lte": "2022-03-23 23:59:00"                  
      }
    }
  },
  "size":0
}'

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值