第一種方法 (使用elasticdump)
這是一個nodejs的插件,安裝方式直接使用 npm即可
導出索引的格式
#格式:elasticdump --input {protocol}://{host}:{port}/{index} --output ./test_index.json
#例子:將ES中的test_index 中的索引導出
#導出當前索引的mapping結構
$ elasticdump --input http://192.168.56.104:9200/test_index --output ./test_index_mapping.json --type=mapping
#導出當前索引下的所有真實數據
$ elasticdump --input http://192.168.56.104:9200/test_index --output ./test_index.json --type=data
向新的es服務導入索引
# 創建索引 $ curl -XPUT http:192.168.56.104:9200/test_index #因為導入的是mapping,所以設置type為mapping $ elasticdump --input ./test_index_mapping.json --output http://192.168.56.105:9200/ --type=mapping #因為導入的是data(真實數據)所以設置type為data $ elasticdump --input ./test_index.json --output http://192.168.56.105:9200/ --type=data
使用 elasticdump的官方docker鏡像進行數據的導入導出
# 鏡像下載 $ docker pull taskrabbit/elasticsearch-dump # 下面還是例子:通過鏡像導出數據到本地 # 創建一個文件夾用於保存導出數據 $ mkdir -p /root/data # 下面需要對路徑進行映射並執行命令(導出mapping) $ docker run --rm -ti -v /data:/tmp taskrabbit/elasticsearch-dump \ --input=http://production.es.com:9200/my_index \ --output=/tmp/my_index_mapping.json \ --type=mapping # 導出(data) $ docker run --rm -ti -v /root/data:/tmp taskrabbit/elasticsearch-dump \ --input=http://192.168.56.104:9200/test_index \ --output=/tmp/elasticdump_export.json \ --type=data ----------------------------------------------------------------------------- # 以下內容為ES -> ES的數據遷移例子 $ docker run --rm -ti taskrabbit/elasticsearch-dump \ --input=http://production.es.com:9200/my_index \ --output=http://staging.es.com:9200/my_index \ --type=mapping $ docker run --rm -ti taskrabbit/elasticsearch-dump \ --input=http://production.es.com:9200/my_index \ --output=http://staging.es.com:9200/my_index \ --type=data
注:上面的這些導入導出都是最基本的使用,當然還有很多高級用法,參考下面所列出來的命令進行嘗試或者直接訪問Github官網,查看更加詳細的說明,這里只作為記錄!
logstash系列一使用logstash遷移ES數據
es的文檔id生成方式可以是 自動的uuid,也可以是自定義的id,可以用業務中的id字段進行映射
自動的id,URL安全,base64編碼,GUID,如下:
POST /test_index/test_type
{ "test_content": "my test" }
手動的就靠自己定義
PUT /test_index/test_type/2
{
"test_content": "my test"
}
那么使用logstash抽取數據是怎么做映射的?配置文件如下:
input {
elasticsearch {
hosts => ["192.168.0.1:9200"]
index => "ddd"
query => '{ "query": {"match_all" : {} } }'
size => 1000
scroll => "1m"
codec => "json"
docinfo => true
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["192.168.0.2:9200"]
document_type => "messages"
document_id => "%{id}"
index => "ddd"
}
}
document_id => "%{id}" 指定 文檔id 使用自己定義json 文件中的id 號映射。
