Я работаю над эластичным поиском, и я хочу создать такой же индекс для локального экземпляра эластичного поиска, как он создается в производственном экземпляре, с тем же типом сопоставления и настроек, один из способов, о котором я могу думать, - это установить те же сопоставления, есть ли другое лучшее способ копирования метаданных индекса на локальный, спасибо
Как дублировать индекс в эластичном поиске?
Ответы (2)
Просто отправьте запрос GET на https://source-es-ip:port/index_name/_mappings и ПОЛУЧИТЕ вывод в https://destination-es-ip:port/index_name
Копирование данных может быть выполнено с помощью API-интерфейса Elasticsearch Reindex. Для справки вы можете увидеть это ссылка. Например, для этого я бы использовал этот скрипт python -
from elasticsearch import Elasticsearch
from elasticsearch.helpers import reindex
import urllib3
urllib3.disable_warnings()
es_source = Elasticsearch(hosts=['ip:port'],<other params>)
es_target = Elasticsearch(hosts=['ip:port'],<other params>)
for index in es.indices.get('<index name/pattern>')
r = reindex(es_source, source_index=index, target_index=index, target_client=es_target, chunk_size=500)
print(r)
И это работает во всех версиях, даже при копировании индексов в разные версии ES.
Я использую для этого образ докера, подробности - https://hub.docker.com/r/taskrabbit/elasticsearch-dump/ (преимущество использования образа докера в том, что вам не нужно устанавливать node и npm в вашей системе, достаточно только запуска докера)
После того, как докер установлен и вы вытащили образ taskrabbit, вы можете запустить образ докера, чтобы получить дамп индекса elasticsearch на вашем удаленном сервере на локальный и наоборот, используя команды запуска:
sudo docker run --net=host --rm -ti taskrabbit/elasticsearch-dump --input=http://<remote-elastic>/testindex --output=http://<your-machine-ip>:9200/testindex --type=mapping
sudo docker run --net=host --rm -ti taskrabbit/elasticsearch-dump --input=http://<remote-elastic>/testindex --output=http://<your-machine-ip>:9200/testindex --type=data
чтобы скопировать индекс с вашего локального elasticsearch на удаленный, просто поменяйте местами ввод и вывод. Первая команда копирует отображение, а вторая выгружает данные.