Elasticsearch предоставляет мощные возможности поиска с поддержкой шардинга и репликации данных. Поэтому мы хотели бы проиндексировать данные, доступные в нашей БД, в Elasticsearch.
Есть несколько способов индексировать данные в Elasticsearch:
- Используйте Logstash для установки источника в качестве БД и приемника в качестве Elasticsearch и используйте фильтр, если требуется для создания объекта JSON.
- Используйте внешнюю библиотекуasticsearch -jdbc, которая в своем собственном процессе работает вне экземпляра Elasticsearch. Он использует транспортный клиент и его массовые API для индексации данных в Elasticsearch.
В этой статье мы рассмотрим подход 2, то есть использование внешней библиотеки, работающей как отдельный процесс.
Мы будем использовать MySQL в качестве БД и использовать пример мира баз данных , который поставляется с MySQL, со следующими таблицами:
- страна
- город
- countrylanguage
Библиотека Elasticsearch-jdbc поддерживает до Elasticsearch 2.3.4 с матрицей совместимости, доступной на их странице GitHub. Во-первых, давайте индексируем данные без предварительного определения структуры индекса в Elasticsearch (ES). Если мы не предоставляем структуру индекса, ES выводит и строит ее на основе индексированных данных. Но это не всегда будет идеальная структура.
Создать пустой индекс
Убедитесь, что ES работает. Если вы работаете в Windows, перейдите в каталог bin ES и запуститеasticsearch.bat. Если вы работаете в Linux, следуйте инструкциям здесь .
Чтобы создать пустой индекс, вы должны выполнить HTTP POST для <es_url>: <port> / <index_name>. Например, используя cURL:
1
|
curl -X POST localhost: 9200 /world |
Вы даже можете использовать клиенты REST по вашему выбору, такие как Postman, для вызова API ES REST
Настройка JDBC Importer
Загрузите двоичный файл e lasticsearch-jdbc и распакуйте его в папку, назовем его ES_IMPORTER. В ES_IMPORTER / bin уже есть скрипты для работы с MySQL и другими БД, и мы поместим все скрипты, связанные с импортом, в одну папку.
Примечание . Если вы используете Oracle DB, вам нужно поместить драйвер JDBC в папку ES_IMPORTER / lib. Для других БД, таких как MySQL, драйверы PostgreSql JDBC уже доступны.
Другое примечание :asticsearch-jdbc требует JDK 8
Мы создадим следующие файлы (код доступен по ссылкам) для запуска средства импорта:
- world-importer.bat / world-importer.sh — используется для запуска импортера
- world-importer-config.json — используется для настройки импортера
- world.sql — содержит SQL-запрос, который необходимо выполнить для получения данных для индексации.
Строка соединения JDBC, имя пользователя БД и пароль могут быть обновлены в world-importer-config.json . Кроме того, порт ES, имя хоста ES, имя индекса ES, имя типа индекса ES можно обновить в том же файле.
Запуск импортера JDBC
Перед запуском импортера откройте URL: http: // localhost: 9200 / world
Выше показано, что мир индекса не имеет определенной структуры
Откройте URL: http: // localhost: 9200 / world / _search
Выше показано, что в мире индексов нет данных.
Перейдите в каталог: ES_IMPORTER / bin и запустите world-importer.bat ИЛИ world-importer.sh .
Когда импортер завершит работу, что должно произойти почти сразу, откройте URL: http: // localhost: 9200 / world / . Теперь вы увидите, что индекс имеет структуру, которая также называется отображениями, определенными в ключе отображений . И когда вы откроете URL: http: // localhost: 9200 / world / _search, вы найдете проиндексированные данные, которые будут содержать около 239 записей, как указано в поле попаданий .
Преимущества JDBC Importer
- Легко импортировать данные, доступно множество вариантов конфигурации. И может быть запланировано запустить несколько раз.
- Поддерживает создание вложенных объектов и массивов вложенных объектов (в нашем примере столица — это вложенный объект, а города и языки — это массивы вложенных объектов)
- SQL-запросы могут быть параметризованы
- Только данные, измененные после последнего запуска, могут быть переиндексированы.
Недостатки JDBC Importer
- Нет поддержки ES версии 5 и выше
- Существует возможность дублирования объектов в массиве вложенных объектов. Но дедупликация может быть обработана на прикладном уровне.
- Возможна задержка поддержки последних версий ES.
В следующей части этой статьи мы будем:
- Создайте сопоставления для индекса
- Понять SQL, используемый для индексации
Ссылка: | Индексируйте данные из реляционной базы данных в Elasticsearch — 1 от нашего партнера JCG Мохамеда Санауллы в блоге Experiences Unlimited . |