Elasticsearch提供强大的搜索功能,并支持数据的分片和复制。 因此,我们希望将数据库中可用的数据索引到Elasticsearch中。

有多种方法可以将数据索引到Elasticsearch中:

  1. 使用Logstash将源设置为DB,将接收器设置为Elasticsearch,并在需要时使用过滤器来构建JSON对象。
  2. 使用外部库elasticsearch-jdbc ,该库在自己的进程中在Elasticsearch实例外部运行。 它利用传输客户端及其批量API将数据索引到Elasticsearch中。

在本文中,我们将研究方法2,即使用作为独立进程运行的外部库。

我们将使用MySQL作为数据库,并使用MySQL随附的示例数据库世界,其中包含以下表格:

  • 国家
  • 国家语言

Elasticsearch-jdbc库通过其GitHub 页面上提供的兼容性矩阵最多支持Elasticsearch 2.3.4。 首先,让我们为数据建立索引,而无需预先定义Elasticsearch(ES)中的索引结构。 如果我们不提供索引结构,则ES会根据索引数据推断并构建一个。 但这永远不是理想的结构。

创建一个空索引

确保ES正在运行。 如果您在Windows上,请导航到ES的bin目录并运行elasticsearch.bat。 如果您使用的是Linux,请按照此处的说明进行操作。

要创建一个空索引,您必须向<es_url>:<port> / <index_name>发出HTTP POST。 例如,使用cURL:

curl -X POST localhost:9200/world

您甚至可以使用自己选择的REST客户端(例如Postman)来调用ES REST API

设置JDBC导入器

从此处下载elasticsearch-jdbc二进制文件并将其解压缩到一个文件夹中,我们将其称为ES_IMPORTER。 ES_IMPORTER / bin中已经存在用于与MySQL和其他数据库一起使用的脚本,我们会将所有与导入相关的脚本放在同一文件夹中。

注意 :如果使用的是Oracle DB,则需要将JDBC驱动程序放在ES_IMPORTER / lib文件夹中。 对于MySQL等其他DB,PostgreSql JDBC驱动程序已经可用。

另一个注意事项 :elasticsearch-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

先存到es再存到数据库 数据库导入es_python

上面显示索引世界没有定义的结构

打开URL: http:// localhost:9200 / world / _search

先存到es再存到数据库 数据库导入es_python_02

上面显示索引世界中没有数据。

导航至目录:ES_IMPORTER / bin并运行world-importer.batworld-importer.sh

导入程序完成后(应该立即完成),打开URL: http:// localhost:9200 / world / 。 现在,您将看到索引具有在映射键中定义的结构,也称为映射。 并且当您打开URL: http:// localhost:9200 / world / _search时,您将找到索引数据,该数据大约是hits字段报告的239个条目。

JDBC导入器的优点

  • 易于导入数据,提供了许多配置选项。 并且可以安排重复运行。
  • 支持创建嵌套对象和嵌套对象数组(在我们的示例中,大写字母是嵌套对象,而城市和语言是嵌套对象数组)
  • 可以对SQL查询进行参数化
  • 只有上次运行后更改的数据才能重新索引。

JDBC导入器的缺点

  • 不支持ES版本5及更高版本
  • 嵌套对象数组中可能存在重复的对象。 但是重复数据删除可以在应用程序层进行处理。
  • 对最新ES版本的支持可能会延迟。

在本文的下一部分中,我们将:

  • 创建索引的映射
  • 了解用于索引的SQL

翻译自: https://www.javacodegeeks.com/2017/03/index-data-relational-database-elasticsearch-1.html