![](https://habrastorage.org/getpro/habr/upload_files/00a/1c5/bfc/00a1c5bfcafd73e6d5d0c8df9f061984.png)
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
=>json
binary
=>string
boolean
=>bool
byte
=>int
completion
=>string
date
=>timestamp
date_nanos
=>bigint
date_range
=>json
dense_vector
=>json
flattened
=>json
float
=>float
float_range
=>json
geo_point
=>json
geo_shape
=>json
half_float
=>float
histogram
=>json
integer
=>int
integer_range
=>json
ip
=>string
ip_range
=>json
keyword
=>string
long
=>bigint
long_range
=>json
match_only_text
=>text
object
=>json
point
=>json
scaled_float
=>float
search_as_you_type
=>text
shape
=>json
short
=>int
text
=>text
unsigned_long
=>int
version
=>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 без сложного переноса данных.