离线安装elasticdump导出elasticsearch数据

离线安装elasticdump导出elasticsearch数据

  • 需求:
  • 导出步骤:
    • 一、外网安装node环境
    • 二、外网安装elasticdump
    • 三、内网离线安装node和elasticdump
    • 四、elasticdump导出数据示例

需求:

项目需要导出知识库博客文章数据,格式为json;
知识库系统部署在内网,没有node和elasticdump数据导出工具,需要离线安装node和elasticdump,方法是找一台与内网配置一样的外网机器在线安装node和elasticdump环境,再把安装包导入内网安装。
备注:使用的机器是x86+银行麒麟V4桌面版操作系统

导出步骤:

一、外网安装node环境

 # 1.下载node安装包,命令行或网页下载,我下载的是V16版本,使用elasticdump尽量安装10版本以上的:
 wget https://nodejs.org/dist/v16.14.2/node-v16.14.2-linux-x64.tar.gz
 # 2. 把压缩包移动到安装路径下(注意:不要先解压,否则一些命令链接会失效),进入目录下解压,
 # 我的安装路径是/usr/lib,也可以放到其他目录下
 mv  node-v16.14.2-linux-x64.tar.gz /usr/lib
 cd  /usr/lib
 tar -xzvf node-v16.14.2-linux-x64.tar.gz
 # 3. 建立命令的软连接,就是文件的快捷方式,把这个快捷方式发送到/usr/local/bin
 #(有的系统放/usr/bin);
 ln -s /usr/lib/node-v16.14.2-linux-x64/bin/node /usr/local/bin
 ln -s /usr/lib/node-v16.14.2-linux-x64/bin/npm /usr/local/bin
 # 4. 检测环境,不出意外会看到版本信息,如果报错,检测安装过程,重新安装:
	node -v
	npm -v

二、外网安装elasticdump

 # 1.使用npm命令安装elasticdump :
 npm install elasticdump -g
 # 2. 建立elasticdump命令软链接
 ln -s /usr/lib/node-v16.14.2-linux-x64/lib/node_modules/elasticdump/bin/elasticdump /usr/local/bin/elasticdump
 # 3. 检测环境,安装成功,会看到elasticdump帮助信息,导出数据时需要查看这些帮助参数的用法:
 elasticdump --help	

三、内网离线安装node和elasticdump

在线安装成功后,把node的安装包和elasticdump安装后的缓存打包导入内网,进行安装,
以下是导出缓存和离线安装步骤:

  • 导出缓存包
 # 1. 查看npm缓存路径,我的是/root/.npm
 npm config get cache
 # 2.把elasticdump安装后的缓存目录打包
 cd /root
 tar -cf npm-cache.tar .npm 

打包完成后在/root目录下生成npm-cache.tar文件
把在线下载的node-v16.14.2-linux-x64.tar.gz 和 npm-cache.tar

  • 离线安装node和elasticdump
 # 1.参见外网步骤安装node,安装完的目录为:/usr/lib/node-v16.14.2-linux-x64
 # 2.拷贝npm-cache.tar到/root,并解压缩
 mv npm-cache.tar /root
 cd /root
 tar -xvf npm-cache.tar
 
 # 3.先进入/usr/lib/node-v16.14.2-linux-x64/bin安装elasticdump
 cd /usr/lib/node-v16.14.2-linux-x64/bin
 # --cache-min这个参数是指超过多少分钟,才去网络下载,设置足够大就会从缓存安装
 npm install --cache /root/.npm --optional --cache-min 9999999 -shrinkwarp false elasticdump  
 # 4.创建软连接
 ln -s /usr/lib/node-v16.14.2-linux-x64/lib/node_modules/elasticdump/bin/elasticdump /usr/local/bin/elasticdump 
 # 5. 检测环境,安装成功,会看到elasticdump帮助信息,导出数据时需要查看这些帮助参数的用法:
 elasticdump --help	

四、elasticdump导出数据示例

  • elasticsearch常用查询语句,地址粘贴到浏览器查看,若在终端使用curl命令
>  1.查询elasticsearch 语句查看现有es index doc数量: 
>  http://ip:9200/_cat/indices?v
> 
> 2.查询某个index下文章数量
> http://ip:9200/_cat/count/index_name?v
> 
> 3.查看索引mapping:
>  http://ip:9200/索引名称/_mapping?pretty
> 
> 4.按某字段搜索,其中attach_type是字段名称,mp4是字段值:
> http://ip:9200/索引名称/_search?q=attach_type:mp4(搜索类型为MP4的doc)
> 
> 5.控制返回数据的数量
>  http://ip:9200/索引名称/_search?size=2
>  
> 6.按id搜索doc:
>  http://ip:9200/索引名称/_doc/#id值
  • elasticdump导出语句(以下示例若在终端不能正常运行,可能是含有中文字符,空格\等特殊字符删除后重新手动输入一遍)

基本的导入导出,可通过终端elasticdump --help查看

1.从一个 elasticsearch导入到另一个 elasticsearch

1)mapping导入

elasticdump \
--input=http://production.es.com:9200/my_index \
--output=http://staging.es.com:9200/my_index \
--type=mapping
  2)data导入
elasticdump \
--input=http://production.es.com:9200/my_index \
--output=http://staging.es.com:9200/my_index \
--type=data

2.导出成json文件

1)按create_time字段的时间范围筛选数据并导出json,并按该字段倒序排列
term 是要筛选的字段和值,这里针对有id字段的数据,type替换为id,把blog替换为id值,可以筛选出唯一的数据

elasticdump --input=http://192.168.8.9:9200/all_prod_v8_main \
--output=/opt/data/data_1000_20230524.json \
--type=data \
--searchBody='{"query":{"bool":{"must":[{"term":{"type":"blog"}},{"range":{"create_time":{"gte":"2020-01-01","lt":"2022-02-01"}}}],"must_not":[],"should":[]}},"sort":[{"create_time":{"order":"desc"}}],"aggs":{}}'

2)控制导出数据的数量,导出10000条数据

elasticdump --input=http://192.168.8.9:9200/all_prod_v8_main \
--output=/opt/data/data_10000_20230524.json \
--type=data \
--size=10000 \
--searchBody='{"query":{"bool":{"must":[{"term":{"type":"blog"}}],"must_not":[],"should":[]}},"sort":[{"create_time":{"order":"desc"}}],"aggs":{}}'

3)全部导出,依据文件大小进行自动分隔(也可依据行数进行分割–maxRows),20Mb左右一个文件,导出过程自动把文件进行分割,

#–limit 每次请求数据的数量,默认100,要导出的数据量大时,此值改大提高效率
#–fileSize(–maxRows):对导出的数据按文件大小或按行数分割成多个文件
#–overwrite 存储路径文件存在进行覆盖
#-- 更多参数终端输入elasticdump --help查看

elasticdump --input=http://192.168.8.9:9200/all_prod_v8_main \
--output=/opt/data/20Mb/data_20mb_20230524.json \
--type=data \
--limit=1000 \
--fileSize=20mb \
--overwrite=true \
--searchBody='{"query":{"bool":{"must":[{"term":{"type":"blog"}}],"must_not":[],"should":[]}},"sort":[{"create_time":{"order":"desc"}}],"aggs":{}}'

文章参考:
https://blog.csdn.net/su8888i/article/details/130287754

你可能感兴趣的:(elasticsearch,elasticsearch,node.js)