blog-post

Как использовать Elasticdump с Manticore

Elasticdump — это инструмент, используемый для управления и миграции данных в Elasticsearch и OpenSearch. Elasticdump позволяет пользователям перемещать и сохранять индексы, экспортируя данные в файл JSON, а затем импортируя их в другое место. Эта функциональность особенно полезна для резервного копирования и восстановления, а также для миграции данных между различными средами (например, из разработки в продукцию).

Теперь вы можете использовать Elasticdump для импорта ваших индексов Elasticsearch/OpenSearch в Manticore. Вы можете выбрать один из двух доступных вариантов: импортировать целый индекс или импортировать только его схему.

Импорт схемы и данных

Чтобы скопировать индекс в Manticore, включая данные, вы можете использовать следующую команду:

elasticdump --input=http://localhost:9200/your_elasticsearch_or_opensearch_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_or_opensearch_index --output=http://localhost:9308/your_manticore_table --type=mapping

Вы получите новую пустую таблицу Manticore со структурой, импортированной из оригинального узла.

Обратите внимание, что в приведенных выше примерах используются порты по умолчанию для Elasticsearch и Manticore: localhost:9200 и localhost:9308, соответственно. Если вы используете другие хосты/порты для подключения к Elasticsearch, OpenSearch или 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
  • flat_object => 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
  • knn_vector => float_vector,
  • 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 будет иметь следующую схему:

+----------+--------+----------------+
| Field    | Type   | Properties     |
+----------+--------+----------------+
| id       | bigint |                |
| title    | text   | indexed stored |
| location | json   |                |
+----------+--------+----------------+

Заключение

В заключение, Manticore Search теперь поддерживает Elasticdump, что упрощает пользователям переход с Elasticsearch или OpenSearch на Manticore. Это обновление упрощает процесс миграции, позволяя пользователям плавно переносить данные и схему. Это большой шаг для тех, кто хочет перейти на Manticore Search без хлопот, связанных со сложной передачей данных. Эта интеграция означает простую миграцию, которая сохраняет ваши данные нетронутыми, что делает Manticore Search привлекательным выбором для улучшения возможностей поиска с легкостью.

Установить Manticore Search

Установить Manticore Search