使用elasticdump实现es数据导入导出示例(持续更新中)

时间:2022-10-07 01:13:32

Elasticdump是一个命令行工具,可用于将数据从Elasticsearch导出到JSON文件,以及将JSON文件导入到Elasticsearch中。以下是一个简单的示例,演示如何使用Elasticdump实现数据导入导出:

1.安装Elasticdump

您可以使用npm命令在命令行中安装Elasticdump。(npm请自行安装。)例如,使用以下命令安装最新版本:

npm install elasticdump -g

进入到bin目录

cd /opt/module/node16/lib/node_modules/elasticdump/bin

可以看到有两个命令,elasticdump用来备份单个索引,multielasticdump可以用来并行备份多个索引

-rwxr-xr-x. 1 1001 1001  4026 49 14:38 elasticdump
-rwxr-xr-x. 1 1001 1001 14598 1026 1985 multielasticdump

2.导出数据

要导出数据,请使用以下命令:

elasticdump \
  --input=http://192.168.2.227:9200/es_table_index \
  --output=/opt/module/data/data_es_table/es_table_index_mapping.json \
  --type=mapping

elasticdump \
  --input=http://192.168.2.227:9200/es_table_index \
  --output=/opt/module/data/data_es_table/es_table_index_data.json \
  --type=data

2.1还可以直接导入到另一个es集群当中

elasticdump \
--input=http://127.0.0.1:9200/test_event   \
--output=http://127.0.0.2:9200/test_event \
--type=mapping

同理,可直接将备份数据导入另一个es集群

elasticdump \
--input=http://127.0.0.1:9200/test_event   \
--output=http://127.0.0.2:9200/test_event \
--type=data

3.导入数据

要导入数据,请使用以下命令

elasticdump \
  --input=/opt/module/data/data_es_table/es_table_index_mapping.json \
  --output=http://localhost:9200/my_index \
  --type=mapping

elasticdump \
  --input=/opt/module/data/data_es_table/es_table_index_data.json \
  --output=http://localhost:9200/my_index \
  --type=data

4.使用elasticdump进行多个索引备份操作:

#将ES索引及其所有类型备份到es_backup文件夹中
multielasticdump direction = dump match ='^.*$'  input = http://127.0.0.1:9200   output =/tmp/es_backup
#仅备份ES索引以“ -index”(匹配正则表达式)为前缀的结尾。仅备份索引数据。所有其他类型都将被忽略。#注意:默认情况下会忽略分析器和别名类型
multielasticdump --direction=dump --match='^.*-index$' --input=http://127.0.0.1:9200 --ignoreType='mapping,settings,template'  --output=/tmp/es_backup
multielasticdump --direction=load --input=/tmp/es_backup --output=http://127.0.0.1:9200

使用multielasticdump有一个区别的地方是–direction的参数设置和–ignoreType参数设置。
备份时,–direction=dump是默认值,则–input必须是ElasticSearch服务器基本位置的URL(即http://localhost:9200),并且–output必须是目录。每个匹配的索引都会创建一个数据,映射和分析器文件。

还原时,要加载从multielasticsearch转储的文件,–direction应将其设置为load,–input必须是multielasticsearch转储的目录,并且–output必须是Elasticsearch服务器URL。

–match`用于过滤应转储/加载的索引(正则表达式)。

–ignoreType允许从转储/加载中忽略类型。支持六个选项。data,mapping,analyzer,alias,settings,template。提供了多类型支持,使用时每种类型必须用逗号分隔,并interval允许控制生成新索引的转储/装入的时间间隔。

–includeType允许将类型包含在转储/装载中。支持六个选项- data,mapping,analyzer,alias,settings,template。

5.导出分词器,导出分词器的时候要特别注意,我们只能根据索引单个导入,不能全部导出,全部导出会出现索引不存在的错误:

elasticdump --input=http://ip:9200 --output=http://127.0.0.1:9200/ --type=analyzer --all=true

6.相关参数说明

# --input 指定来源
# --output 导出的路径(如果以 csv 结尾,则会自动保存为 csv 格式)
# --quiet 不输出任何日志信息
# --scrollTime 用来指定每次滚动查询的时间间隔(当我们需要从 elasticsearch 中检索大量数据时,通常需要使用滚动查询来避免一次性检索过多数据导致内存溢出或性能下降的问题)
# --limit 指定每次滚动查询的文档数量
# --noRefresh 禁用索引的自动刷新功能(当需要执行大量索引操作时,如果每次操作都会自动刷新索引,将导致性能下降)
# --maxRows 指定每次滚动查询的最大文档数量
# --concurrency 并发执行的数量
# --transform 对结果进行转换(如提取特定字段、转换数据格式等)
# --searchBody 查询语句
elasticdump --input="$endpoint/$index" \
  --output=$outputpath \
  --quiet --scrollTime=30m --limit=10000 --noRefresh --maxRows=1000000 \
  --concurrency=2 \
  --transform @transform.js \
  --searchBody "$searchbody"