Как дублировать индекс в эластичном поиске?

Я работаю над эластичным поиском, и я хочу создать такой же индекс для локального экземпляра эластичного поиска, как он создается в производственном экземпляре, с тем же типом сопоставления и настроек, один из способов, о котором я могу думать, - это установить те же сопоставления, есть ли другое лучшее способ копирования метаданных индекса на локальный, спасибо


person quester    schedule 11.11.2019    source источник
comment
попробуйте что-нибудь вроде: npmjs.com/package/elasticdump   -  person Archit Saxena    schedule 11.11.2019


Ответы (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.

person Kashish Soni    schedule 11.11.2019
comment
Где указано имя индекса es_target? - person Nguai al; 26.01.2021

Я использую для этого образ докера, подробности - 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 на удаленный, просто поменяйте местами ввод и вывод. Первая команда копирует отображение, а вторая выгружает данные.

person soumitra goswami    schedule 11.11.2019