一次数据处理过程中出现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
}'