我在一台机器上从Elasticsearch导出,现在想将这些数据导入另一台我在docker上运行Elasticsearch的机器上。
这是docker-compose文件中与Elasticsearch相关的内容:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:5.5.0
environment:
- cluster.name=my-docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- xpack.security.enabled=false
- http.host=0.0.0.0
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
cap_add:
- IPC_LOCK
volumes:
- ./src/elastic:/home
ports:
- 9200
- 9300
networks:
- my_network
弹性搜索容器已启动并正在运行。但是,我不知道如何导入数据。
我找到了Elasticsearch容器的IP(在下面指定为XXX.XX.XX.X
)并执行了以下命令:
curl -X PUT -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
"type": "fs",
"settings": {
"location": "/home/test/etk_backup/myproject_backup"
}
}' "http://XXX.XX.XX.X:9200/_snapshot/myproject_backup"
但是出现此错误:
{“错误”:{“ root_cause”:[{“类型”:“ repository_exception”,“原因”:“ [myproject_backup] 位置[/ home / test / etk_backup / myproject_backup]与以下任何位置都不匹配 path.repo指定的位置,因为此设置为空“}]
我进入了Elasticsearch的容器,并在path.repo
中手动指定了elasticsearch.yml
,如下所示:
path-repo: ["/home/test/etk_backup/myproject_backup"]
但是出现了同样的错误。我该如何解决这个问题?
答案 0 :(得分:0)
尝试以下方法:
path.repo: ["/home/test/etk_backup/myproject_backup"]
答案 1 :(得分:0)
为此提供一个方便的工具:我们一直在使用Elasticdump将数据从一个索引复制到另一个索引(通常供开发人员在其本地索引中存储数据)。尚不清楚它是否仍在维护,但它仍可在ES6.3上对我们有效
您将这样使用它:
$ npm install elasticdump -g
$ elasticdump --input=https://XXX.XX.XX.X:9200/<index> --output /tmp/es-mapping --type=mapping --headers='{"Content-Type": "application/json"}'
$ elasticdump --input=https://XXX.XX.XX.X:9200/<index> --output /tmp/es-data --type=data --headers='{"Content-Type": "application/json"}' [--searchBody '<some query to filter what's being copied>']
$ elasticdump --input /tmp/es-mapping --output https://YYY.YY.YY.Y:9200/<index> --type mapping
$ elasticdump --input /tmp/es-data --output https://YYY.YY.YY.Y:9200/<index> --type data
您可能不需要保存到文件的中间步骤,但是我发现在本地进行实验并在实验以破坏性方式失败时需要重新加载索引的情况下,这是一件很不错的事情。