Как использовать 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 => 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 без сложного переноса данных.


ссылка на оригинал статьи https://habr.com/ru/articles/797055/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *