将关系数据库中的数据索引到 Elasticsearch – 1

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(226)   2023-11-15 16:34:57

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

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

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

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

我们将使用 MySQL 作为数据库,并使用 MySQL 自带的示例数据库 world,,其表如下:

  • country
  • city
  • countrylanguage

Elasticsearch-jdbc 库最高支持 Elasticsearch 2.3.4,其 GitHub 页面 上提供了兼容性矩阵。首先,让我们在不在 Elasticsearch (ES) 中预先定义索引结构的情况下对数据进行索引。如果我们不提供索引结构,ES 会根据索引的数据推断并构建一个。但这并不总是一个理想的结构。

创建空索引

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

要创建空索引,您必须向 : / 发出 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 等其他数据库,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

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

打开网址:http://localhost:9200/world/_search

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

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

导入程序完成后(应该几乎立即完成),打开 URL:http://localhost:9200/world/。您现在将看到索引有一个结构,也称为映射,在 mappings 键中定义。当您打开 URL:http://localhost:9200/world/_search 时,您会发现索引数据大约为 命中领域。

JDBC导入器的优势

  • 易于导入数据,提供大量配置选项。并且可以定时重复运行。
  • 支持创建嵌套对象和嵌套对象数组(在我们的示例中,首都是嵌套对象,城市和语言是嵌套对象数组)
  • SQL查询可以参数化
  • 只能重新索引上次运行后更改的数据。

JDBC导入器的缺点

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

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

  • 为索引创建映射
  • 了解用于索引的 SQL
标签2: Java教程
地址:https://www.cundage.com/article/jcg-index-data-relational-database-elasticsearch-1.html

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...