
Elasticdump - это инструмент для управления и миграции данных Elasticsearch. Он позволяет пользователям перемещать и сохранять индексы, экспортируя данные в файл JSON, а затем импортируя их в другое место. Эта функциональность особенно полезна для целей резервного копирования и восстановления, а также для миграции данных между различными средами (например, из разработки в продакшн).
Теперь вы также можете использовать Elasticdump для импорта ваших индексов Elasticsearch в Manticore.
Эта функциональность доступна только в development версии на данный момент (27 февраля 2024 года). Вот так вы можете установить dev пакеты.
Импорт схемы и данных
Чтобы скопировать индекс Elasticsearch в Manticore вместе с данными, используйте следующую команду:
elasticdump --input=http://localhost:9200/your_elasticsearch_index --output=http://localhost:9308/your_manticore_table --type=data
Давайте рассмотрим простой пример его использования. Вот оригинальный индекс Elasticsearch под названием test с такой схемой:
# curl -sX GET localhost:9200/test/_mapping { "test": { "mappings": { "properties": { "price": { "type": "float" }, "title": { "type": "text" } } } } }
и 300 документами в нем:
# curl -sX GET localhost:9200/test/_count { "count": 300, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 } }
Пока что в Manticore у нас нет никаких таблиц:
# curl -sX GET localhost:9308/cli -d 'SHOW TABLES' Empty set (0.000 sec)
Теперь давайте запустим Elasticdump:
# elasticdump --input=http://localhost:9200/test --output=http://localhost:9308/test_imported --type=data Tue, 26 Feb 2024 16:18:52 GMT | starting dump (node:156) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead. (Use `node --trace-deprecation ...` to show where the warning was created) Tue, 26 Feb 2024 16:18:52 GMT | got 300 objects from source elasticsearch (offset: 0) Tue, 26 Feb 2024 16:18:52 GMT | sent 300 objects to destination elasticsearch, wrote 300 Tue, 26 Feb 2024 16:18:52 GMT | got 0 objects from source elasticsearch (offset: 300) Tue, 26 Feb 2024 16:18:52 GMT | Total Writes: 300 Tue, 26 Feb 2024 16:18:52 GMT | dump complete
И проверим результаты импорта, который мы сделали:
# curl -sX GET localhost:9308/cli -d 'DESC test_imported' +-------+--------+----------------+ | Field | Type | Properties | +-------+--------+----------------+ | id | bigint | | | title | text | indexed stored | | price | float | | +-------+--------+----------------+ 3 rows in set (0.000 sec)
# curl -sX GET localhost:9308/cli -d 'SELECT COUNT(*) FROM test_imported' +----------+ | count(*) | +----------+ | 300 | +----------+ 1 row in set (0.000 sec)
Мы видим, что таблица скопирована.
Импорт только схемы
Чтобы импортировать только схему таблицы, выполните:
# elasticdump --input=http://localhost:9200/your_elasticsearch_index --output=http://localhost:9308/your_manticore_table --type=mapping
Вы получите новую пустую таблицу Manticore со структурой, импортированной из узла Elasticsearch.
Обратите внимание, что в приведенных выше примерах используются порты Elasticsearch и Manticore по умолчанию: localhost:9200 и localhost:9308 соответственно. Если вы используете другие хосты/порты для подключения к Elasticsearch или Manticore, вы должны соответствующим образом изменить вашу команду.
Также имейте в виду, что Manticore конвертирует некоторые типы данных Elasticsearch в свои собственные, если они не поддерживаются внутренне:
aggregate_metric=>jsonbinary=>stringboolean=>boolbyte=>intcompletion=>stringdate=>timestampdate_nanos=>bigintdate_range=>jsondense_vector=>jsonflattened=>jsonfloat=>floatfloat_range=>jsongeo_point=>jsongeo_shape=>jsonhalf_float=>floathistogram=>jsoninteger=>intinteger_range=>jsonip=>stringip_range=>jsonkeyword=>stringlong=>bigintlong_range=>jsonmatch_only_text=>textobject=>jsonpoint=>jsonscaled_float=>floatsearch_as_you_type=>textshape=>jsonshort=>inttext=>textunsigned_long=>intversion=>stringНапример, если вы импортируете индекс Elasticsearch с такой схемой:
{ "test": { "mappings": { "properties": { "location": { "type": "geo_point" }, "title": { "type": "text" } } } } }
, то в Manticore таблица будет иметь вот такую схему:
sql +----------+--------+----------------+ | Field | Type | Properties | +----------+--------+----------------+ | id | bigint | | | title | text | indexed stored | | location | json | | +----------+--------+----------------+
Заключение
Итак, поисковая система Manticore теперь поддерживает Elasticdump, упрощая пользователям переход с Elasticsearch на Manticore. Это обновление упрощает процесс миграции, позволяя пользователям без труда переносить данные и схему. Это большой плюс для тех, кто хочет перейти на поисковую систему Manticore без сложного переноса данных.
