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

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

© Habrahabr.ru