elasticsearch 數據遷移


第一種方法 (使用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 號映射。
 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM