elasticsearch 数据导出删除

elasticsearch 数据导入导出删除

elasticsearch可以通过curl访问es集群获取数据,也可以通过elasticdump导出数据

查看数据

#查看es的所有索引
curl -u admin:abc123 -X GET http://192.168.10.28:30001/_cat/indices?v 

elasticdump导出数据

es支持json的导入导出

#安装elasticdump
npm install elasticdump -g

#导出数据,从10.28的es,账号密码为admin:password123,把索引为data-aaa导出到data_2022_backup下
# limit默认是100,根据自己需求调整大小,注意过大可能会影响es性能
elasticdump --input http://admin:password123@192.168.10.28:30007/data-aaa --output ./data_2022_backup/data-aaa.json --type=data --limit 10000

elasticdump删除数据

#该操作会删除整个索引上匹配查询条件的所有文档,请务必确认查询条件是否正确,以免误删
curl  -u admin:abc2022  -X POST 'http://192.168.10.28:30001/dev-media-2022-10-18/_delete_by_query'  -H "Content-Type: application/json"  -d '{ "query": { "match_all": {} } }'

#删除后,在index management上还可以搜到,只是大小由原先的几M变成了300kb左右
#可以通过下面命令彻底删除
curl -XDELETE  -u admin:admin123  http://192.168.10.28:3001/dev-media-2022-10-19

删除遇到过的问题

for循环删除的时候出现了几个问题

问题1

for循环的时候引用参数引用不到

#如下,引用${i},而两边用的是单引号,参数不生效。
for i in `cat del_index.list`;do curl  -u admin:asdas  -X POST 'http://192.168.10.28:30007/${i}/_delete_by_query'  -H "Content-Type: application/json"  -d '{ "query": { "match_all": {} } }';done &

改动

#把${i}改成 '"$i"'。去掉大括号,两个单引号里面包两个双引号,双引号里面是$i
for i in `cat del_index.list`;do curl  -u admin:admin123  -X POST 'http://192.168.10.28:30001/'"$i"'/_delete_by_query'  -H "Content-Type: application/json"  -d '{ "query": { "match_all": {} } }';done &
问题2

有的索引带[dev]字样
用for循环打印出来的没问题,但是放到curl去删除的时候,curl把它传入后,它会把[]识别为他自己的匹配规则。
我们需要提前编辑好我们的索引列表

vim del_index.list

#进入命令行模式执行 ,把所有的[dev] 改成 \[dev\],这样加上转换符即使传到curl里面,也不会被识别成别的意思。
:%s/\[dev]/\\[dev\\]/g
posted @   liwenchao1995  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2022-05-05 k8s Flannel网络规划服务
2022-05-05 k8s Job&CronJob
点击右上角即可分享
微信分享提示