在 Windows 和 Ubuntu 上安装和使用 Elasticsearch 和 MongoDB
- 什么是 Elasticsearch
- 在 Windows 10 上安装 Elasticsearch
- 在 Ubuntu 20.04 上安装 Elasticsearch
- 将 Elasticsearch 与 MongoDB 结合使用的主要原因
本文是 Elasticsearch 在 Windows 和 Ubuntu 20.04 上的分步安装和配置指南。它还演示了将 Elasticsearch 与 MongoDB 一起用于两种操作系统的情况。
什么是 Elasticsearch
Elasticsearch 是一个 NoSQL 数据库,一个旨在存储日志的开源实时分布式和分析引擎。Elasticsearch 是在 Java 编程和 Apache Lucene 之上开发的。
许多知名公司,包括 LinkedIn 和 OpenStack,都在使用它。它支持基于文档而不是模式和表的全文搜索。
它还用于数据迁移、索引和同步。当应用程序需要太多的搜索操作和过滤器时,Elasticsearch 是最佳选择。
在 Windows 10 上安装 Elasticsearch
第 1 步:检查是否安装了 Java
要在 Windows 10 上安装 Elasticsearch,我们必须在我们的机器上安装最新版本的 Java。你还可以使用以下任何命令来确认你的机器上已经安装了 Java。
请记住,如果我们要安装 Elasticsearch,我们必须拥有 Java 版本 7 或更高版本。
第 2 步:下载 Elasticsearch .zip
文件
转到此网站并单击以下屏幕截图中的下载链接。接下来,选择我们要使用 Elasticsearch 的平台,然后下载 .zip
文件。
第 3 步:运行 Elasticsearch 批处理文件
一旦我们下载了 .zip
文件,将其解压缩到你想要的位置。然后,导航到 bin
文件夹并双击 elasticsearch
批处理文件。
它只不过是一个标准的 Windows 批处理文件,其中包含在幕后执行的步骤。此外,它有助于在你的机器上启动 Elasticsearch 守护程序,如下所示。
保持打开状态并按照以下步骤操作。
第 4 步:禁用身份验证(仅用于学习目的)
默认情况下,身份验证是启用的,这意味着我们必须输入登录凭据。你可以使用默认登录凭据,也可以按照 this 页面更改它们。
对于本文,我们将禁用身份验证(仅用于学习目的,但建议在生产环境中使用)。我们使用记事本打开可以位于%ES_HOME%\config\elasticsearch.yml
路径的 elasticsearch.yml
文件。
在这里,ES_HOME
是你的 Elasticsearch 主目录。例如,在我们的例子中,elasticsearch.yml
可以位于 C:\Users\DelftStack\Desktop\elasticsearch-8.2.2-windows-x86_64\elasticsearch-8.2.2\config
。
打开 elasticsearch.yml
文件后,搜索 xpack.security.enabled
选项并将其值设为 false
,如下面的屏幕截图所示。
停止 Elasticsearch 并通过运行 elasticsearch.bat
文件重新开始。
第 5 步:在浏览器上运行 Elasticsearch
在你喜欢的浏览器上输入 http://localhost:9200
。如果你看到类似于以下屏幕截图的页面,则说明 Elasticsearch 已成功启动并运行。
在 Ubuntu 20.04 上安装 Elasticsearch
第 1 步:安装所需的依赖项
更新/升级包索引:
sudo apt update
sudo apt upgrade
与 Windows 操作系统一样,Ubuntu 上也需要 Java 来安装 Elasticsearch。如果尚未安装,请在 Ubuntu 20.04 上执行以下命令安装默认 JDK。
sudo apt install openjdk-8-jdk
安装后,使用 java -version
检查它是否存在。
我们还需要安装一个 APT Transport
包,以便通过 HTTPS
访问我们所有的存储库。
sudo apt install apt-transport-https
第 2 步:在 Ubuntu 上下载并安装 Elasticsearch
下一项工作是添加 Elasticsearch 存储库。使用 wget
查询来提取公钥。
如果一切顺利,你必须将 OK
作为输出。
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
现在,通过执行以下命令将存储库添加到系统。我们在以下命令中编写 8.x
,因为这是编写本教程时的最新版本。
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
再次,使用下面给出的命令更新包索引。
sudo apt update
通过执行以下命令安装 Elasticsearch。安装可能需要一些时间。
所以,让它成功完成。
sudo apt install elasticsearch
安装后,我们必须启动 Elasticsearch,因为它不会自行启动。如果我们重新启动机器,我们还需要重新运行 Elasticsearch。
为避免这种情况,请执行以下命令在系统重启后自动重新加载 Elasticsearch。
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
现在,使用以下命令检查 Elasticsearch 的状态。
sudo systemctl status elasticsearch
第 3 步:配置 Elasticsearch
默认情况下,Elasticsearch 已预先配置为基本使用。如果我们想在我们的设置中使用一个节点,我们不必对配置文件进行任何更改。
如果要编辑 Elasticsearch 配置,请编辑 /etc/elasticsearch
目录中的 elasticsearch.yml
文件。你还可以在 /var/log/elasticsearch/logging.yml
找到日志记录的配置。
我们正在编辑 elasticsearch.yml
文件以禁用本教程的身份验证。我们将 xpack.security.enabled
的值从 true
更改为 false
。
请记住,每当你编辑 elasticsearch.yml
文件时,请不要忘记使用以下命令重新启动服务。
sudo systemctl restart elasticsearch.service
接下来,使用以下命令检查 Elasticsearch 是否已启动并正在运行。
curl localhost:9200
我们也可以在浏览器上输入 http://localhost:9200
,它应该显示与上面给出的 curl
命令相同的结果。此外,你可以查看这篇文章以保护 Elasticsearch。
将 Elasticsearch 与 MongoDB 结合使用的主要原因
我们使用 MongoDB 来存储和查询数据,而 Elasticsearch 用于对数据进行全文索引。因此,两者的结合(用于索引的 Elasticsearch 和用于存储的 MongoDB)是许多公司遵循的常见架构之一。
Elasticsearch 是为搜索目的而开发的,它还提供了用于数据索引的高级功能。它与 Kibana
和 Logstash
一起用于数据分析。
使用 Elasticsearch 的优点之一是它可以快速搜索指定文档中的所有字段。我们可以将其视为让我们的个人 Google 搜索我们的数据。
我们还可以在不同的场景中使用 Elasticsearch。例如,我们可以执行同步、构建搜索引擎、数据迁移、索引等等。
在本教程中,我们将学习将 Elasticsearch 与 MongoDB 一起用于同步目的。
使用 Elasticsearch 执行同步
我们必须按照下面给出的步骤在 Windows/Ubuntu 上使用 Elasticsearch 和 MongoDB 执行同步。在此之前,请确保你拥有所有依赖项。
例如,我们在此代码示例中使用 Node.js
。此外,继续运行两个数据库引擎(MongoDB 和 Elasticsearch)。
之后,让我们按照步骤操作。
-
导入
mongoose
和mongoosastic
包。 -
与 MongoDB 引擎建立成功连接。
-
创建一个 MongoDB 模式。
-
使用
mongoosastic
插件连接 Elasticsearch。 -
首先,创建 MongoDB 模型,然后创建 Elasticsearch 映射。
-
将数据添加到你的 MongoDB 数据库,并且它必须与 Elasticsearch 同步。
示例代码(将整个代码放在一个文件中,我们将它放在 app.js
文件中):
// Step 1:
const mongoose = require('mongoose');
const mongoosastic = require('mongoosastic');
// Step 2:
mongoose.connect('mongodb://localhost:27017/studentdb');
// Step 3:
var StudentSchema =
new mongoose.Schema({firstname: String, lastname: String, city: String});
// Step 4:
StudentSchema.plugin(mongoosastic, {'host': 'localhost', 'port': 9200});
// Step 5:
var Student = mongoose.model('student', StudentSchema);
Student.createMapping((err, mapping) => {
console.log('mapping created');
});
// Step 6:
var newStudent =
new Student({firstname: 'Mehvish', lastname: 'Ashiq', city: 'Lahore'});
newStudent.save((err) => {
if (err) {
console.log(err);
}
console.log('Student is added in both databases');
})
newStudent.on('es-indexed', (err, result) => {
console.log('indexed to elastic search');
});
现在,运行这段代码;如下。
确认 MongoDB 中的条目如下。
接下来,打开 http://localhost:9200/students/_search
以在 Elasticsearch 上进行确认。它看起来类似于以下屏幕截图。