[Перевод] Как использовать Elasticdump с Manticore

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 без сложного переноса данных.
