一、安裝elasticdump
終端中輸入
1
|
npm install elasticdump -g
|
-g表示全局可用,直接在終端輸入 elasticdump --version,出現版本信息即表示安裝成功,如下
1
2
|
C:\Users\T
470
s>elasticdump --version
6.3
.
3
|
二、常用的導入導出方法
1、將索引中的數據導出到本地
1
|
elasticdump --input=http://localhost:
9200
/demo --output=D:/ES/date/demo.json
|
其中,demo是索引。
2、將本地數據導入es中
1
|
elasticdump --input=D:/ES/date/demo.json --output=http://localhost:
9200
/demo
1
|
3、將es導入另一個es
1
|
elasticdump --input=http://ip:
9200
/demo --output=http://
127.0
.
0.1:
9200
/demo
|
4、含有分詞的導入
轉自:https://blog.csdn.net/Wang_Ocean/article/details/90267797
前文:公司正在運行的項目需要搭一個測試環境,需要將正式環境的ES里面存儲的數據導入到該測試環境的ES服務器里面。使用本地的windows系統來實現。
1,環境准備
因為elaticdump 依賴於nodejs的環境,需要下載nodejs的相關依賴環境,去nodejs官網直接安裝包,我下載的是msi安裝程序,安裝好之后會直接配置好環境變量,在cmd或者Powershell直接下載elaticdump 即可:
1
|
npm install elasticdump
|
2,生產環境導出到測試環境
1)導出分詞器,導出分詞器的時候要特別注意,我們只能根據索引單個導入,不能全部導出,全部導出會出現索引不存在的錯誤:
1
|
elasticdump --input=http://ip:
9200
--output=http://
127.0
.
0.1:
9200
/ --type=analyzer --
all
=true
|
該全部導出導入的命令會如下錯誤:
1
|
Error Emitted => {
"root_cause"
:[{
"type"
:
"action_request_validation_exception"
,
"reason"
:
"Validation Failed: 1: index is missing;"
}],
"type"
:
"action_request_validation_exception"
,
"reason"
:
"Validation Failed: 1: index is missing;"
}
|
所以后面改為按索引分別導入則可以:
1
2
3
|
elasticdump --input=http://ip:
9200
/applog --output=http://
127.0
.
0.1:
9200
/applog --type=analyzer
elasticdump --input=http://ip:
9200
/cms_article --output=http://
127.0
.
0.1:
9200
/cms_article --type=analyzer
elasticdump --input=http://ip:
9200
/followup --output=http://
127.0
.
0.1:
9200
/followup --type=analyzer
|
坑:再倒入的時候我並不知道到底有多少個索引,如何確定索引的名稱?
這里我是直接先導出所有映射mapping到本地,然后找到索引的名稱再到各導入分詞:
1
|
elasticdump --input=D:/mapping.json --output=http://
127.0
.
0.1:
9200
/ --
all
=true --type=mapping
|
疑惑:我這里的索引目前只有三個,如果是多個怎么處理?超過100?
2)導出映射mapping
映射mapping可以直接全部導入導出,直接命令:
1
|
elasticdump --input=http://ip:
9200
/ --output=http://
127.0
.
0.1:
9200
/ --
all
=true --type=mapping
|
3)導出全部數據data
每個索引下的數據可以全部一次性導入:
1
|
elasticdump --input=http://ip:
9200
/ --output=http://
127.0
.
0.1:
9200
/ --
all
=true --type=data
|
3,總結
1),如果不導入analyzer會怎么樣?
我試過如果只導入data和mapping,則數據會導入,mapping會發生變化,最終的結果沒有分詞的效果。
2),如果不導入mapping也不會有分詞的效果。
3),順序導入最好按照:analyzer,mapping和data這個順序來,防止出現分詞失效的結果。