Elasticsearch提供强大的搜索功能,并支持数据的分片和复制。 因此,我们希望将数据库中可用的数据索引到Elasticsearch中。
有多种方法可以将数据索引到Elasticsearch中:
- 使用Logstash将源设置为DB,将接收器设置为Elasticsearch,并在需要时使用过滤器来构建JSON对象。
- 使用外部库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
上面显示索引世界没有定义的结构
打开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时,您将找到索引数据,该数据大约是hits字段报告的239个条目。
JDBC导入器的优点
- 易于导入数据,提供了许多配置选项。 并且可以安排重复运行。
- 支持创建嵌套对象和嵌套对象数组(在我们的示例中,大写字母是嵌套对象,而城市和语言是嵌套对象数组)
- 可以对SQL查询进行参数化
- 只有上次运行后更改的数据才能重新索引。
JDBC导入器的缺点
- 不支持ES版本5及更高版本
- 嵌套对象数组中可能存在重复的对象。 但是重复数据删除可以在应用程序层进行处理。
- 对最新ES版本的支持可能会延迟。
在本文的下一部分中,我们将:
- 创建索引的映射
- 了解用于索引的SQL
翻译自: https://www.javacodegeeks.com/2017/03/index-data-relational-database-elasticsearch-1.html