状态: 已弃用
本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:
原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.
请参阅: 本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。
Elasticsearch 是一个分布式、RESTful 搜索和分析平台。 它可以根据需要进行扩展,您可以立即开始在单个 DigitalOcean 液滴上使用它。 在本教程中,我们将下载、安装并开始在 Ubuntu 上使用 Elasticsearch。 提供的步骤目前已在以下平台上进行了测试:Ubuntu 12.04.3 x64 和 Ubuntu 13.10 x64。
依赖项
首先,通过运行 apt-get update
更新可用软件包列表。
接下来,我们必须安装 Java 运行时。 这里有两个选项。
- 安装 Ubuntu 提供的 OpenJDK 运行时。
- 安装 Elasticsearch 推荐的 Java 运行时 Oracle Java。
如果您只是想尝试一下并熟悉 Elasticsearch 或运行一小部分节点,则第一个选项非常有效。 后一种选择是 Elasticsearch 推荐的,以保证兼容性。
OpenJDK
要完成第一个选项,我们可以简单地运行 apt-get install openjdk-6-jre
。
甲骨文Java
对于第二个选项,我们将按照 Elasticsearch 文档中的步骤进行操作。 首先,我们必须添加一个包含 Oracle Java 运行时的存储库
sudo add-apt-repository ppa:webupd8team/java
然后我们必须运行 apt-get update
从这个新的存储库中提取包信息。 完成后,我们可以安装 Oracle Java 运行时
sudo apt-get install oracle-java7-installer
执行上述命令时,您需要接受 Oracle 二进制许可证。 如果您不同意该许可,您可以改为安装 OpenJDK 运行时。
测试您的 Java 安装
然后,您可以通过运行 java -version
检查是否安装了 Java。
这就是我们现在需要的所有依赖项,让我们开始获取和安装 Elasticsearch。
下载并安装
Elasticsearch 可以 直接从他们的站点 以 zip、tar.gz、deb 或 rpm 包的形式下载。 您无需提前执行此操作,因为我们将在下面的文本中下载我们需要的文件。
安装
鉴于 Elasticsearch 提供的下载选项,我们有几个选项:
- 从 zip 或 tar.gz 存档安装。
- 从 deb 包安装。
- 从 rpm 包安装。
最后一个选项不是 Ubuntu 的方式,所以我们将忽略它。
如果您只是想玩一下 Elasticsearch,最好从 zip 或 tar.gz 存档安装。 从这些选项中的任何一个进行安装只会使运行 Elasticsearch 所需的二进制文件可用。 从 deb 包安装会完全安装 Elasticsearch 并立即启动服务器运行。 这包括在 /etc/init.d/elasticsearch
安装一个 init 脚本,它会在启动时启动 Elasticsearch。 如果你只是想玩 Elasticsearch,我建议从 zip 或 tar.gz 安装。 这样,您可以在随意启动和停止服务器的同时发现 Elasticsearch。
从 zip 或 tar.gz 存档安装
zip 和 tar.gz 下载都包含 Elasticsearch 的预编译二进制文件。
首先,在方便的地方下载源代码。 提取存档后,您将能够直接从生成的目录运行二进制文件,因此您应该将它们放置在您希望访问 Elasticsearch 的每个用户都可以访问的地方。 对于本教程,我们将只下载到当前用户的目录。 如果您将它们下载到 /tmp
,它们可能会在您重新启动 VPS 时消失。 如果这是您想要的,请继续并将下载文件放在那里。 您可以通过运行mktemp -d
快速在/tmp
中创建一个新的临时目录。
无论如何,在继续之前,请确保您位于要将 Elasticsearch 提取到的目录中。
下载档案
运行
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.zip
或者
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.tar.gz
第一个命令下载 zip 存档,第二个命令下载 tar.gz 存档。 如果您下载了 zip 包,请确保您之前运行过 apt-get install unzip
然后运行
unzip elasticsearch-0.90.7.zip
或者,如果您已经下载了 tar.gz 包,请运行
tar -xf elasticsearch-0.90.7.tar.gz
任一选项都将创建目录 elasticsearch-0.90.7。 通过输入 cd elasticsearch-0.90.7
进入该目录,您将在 bin
文件夹中找到二进制文件。
从 Debian 软件包安装
为 Ubuntu 下载的最佳软件包是 deb 软件包。 RPM 可以工作,但需要先转换,这里不做介绍。 通过运行获取 deb 包
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.deb
直接从 Debian 软件包安装是通过运行
dpkg -i elasticsearch-0.90.7.deb
这会导致 Elasticsearch 正确安装在 /usr/share/elasticsearch
中。 回想一下,从 Debian 软件包安装还会在 /etc/init.d/elasticsearch
中安装一个 init 脚本,该脚本会在启动时启动 Elasticsearch 服务器。 服务器也将在安装后立即启动。
配置文件
如果从 zip 或 tar.gz 存档安装,则可以在结果目录的 config 文件夹中找到配置文件。 如果从 Debain 包安装,配置文件位于 /etc/elasticsearch
。
无论哪种情况,都会有两个主要的配置文件:elasticsearch.yml 和 logging.yml。 第一个配置 Elasticsearch 服务器设置,毫无疑问,后者配置 Elasticsearch 使用的记录器设置。
默认情况下,“elasticsearch.yml”将只包含注释。
“logging.yml”提供基本日志记录的配置。 您可以在 /var/log/elasticsearch 中找到生成的日志。
删除 Elasticsearch 公共访问
在继续之前,您需要配置 Elasticsearch,使其无法被公共 Internet 访问——Elasticsearch 没有内置的安全性,并且可以由任何可以访问 HTTP API 的人控制。 这可以通过编辑 elasticsearch.yml
来完成。 假设您随包一起安装,请使用以下命令打开配置:
sudo vi /etc/elasticsearch/elasticsearch.yml
然后找到指定 network.bind_host
的行,然后取消注释并将值更改为 localhost
,如下所示:
network.bind_host: localhost
然后在文件中的某处插入以下行,以禁用动态脚本:
script.disable_dynamic: true
保存并退出。 现在重新启动 Elasticsearch 以使更改生效:
sudo service elasticsearch restart
稍后我们将介绍其他基本配置选项,但首先我们应该测试最基本的 Elasticsearch 安装。
测试您的 Elasticsearch 安装
您现在已经将 zip 或 tar.gz 存档解压缩到一个目录,或者从 Debian 包中安装了 Elasticsearch。 无论哪种方式,您都有可用的 Elasticsearch 二进制文件,并且可以启动服务器。 如果您使用 zip 或 tar.gz 存档,请确保您位于生成的目录中。 如果您使用 Debian 软件包安装,则 Elasticsearch 服务器应该已经在运行,因此您不需要启动服务器,如下所示。
让我们确保一切正常。 跑
./bin/elasticsearch
Elasticsearch 现在应该在端口 9200 上运行。 请注意,Elasticsearch 需要一些时间才能完全启动,因此立即运行下面的 curl 命令可能会失败。 开始响应的时间不应超过十秒,因此如果以下命令失败,则可能是其他错误。
通过运行确保服务器已启动
curl -X GET 'http://localhost:9200'
您应该看到以下响应
{ "ok" : true, "status" : 200, "name" : "Xavin", "version" : { "number" : "0.90.7", "build_hash" : "36897d07dadcb70886db7f149e645ed3d44eb5f2", "build_timestamp" : "2013-11-13T12:06:54Z", "build_snapshot" : false, "lucene_version" : "4.5.1" }, "tagline" : "You Know, for Search" }
如果您看到与上述类似的响应,则说明 Elasticsearch 工作正常。 或者,您可以通过访问从浏览器查询您安装的 Elasticsearch :9200。 您应该看到与上面使用 curl 时看到的相同的 JSON。
如果您通过 zip 或 tar.gz 存档安装,则可以使用 RESTful API 停止服务器
curl -X POST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'
当使用 Debian 软件包安装 Elasticsearch 时,上述命令也有效,但您也可以使用 service elasticsearch stop
停止服务器。 可以用对应的service elasticsearch start
重启服务器。
使用弹性搜索
Elasticsearch 已启动并正在运行。 现在,我们将介绍一些基本配置和用法。
基本配置
当通过 zip 或 tar.gz 存档安装时,配置文件位于生成目录内的 config 文件夹中。 通过 Debian 软件包安装时,可以在 /etc/elasticsearch/
中找到配置文件。 您会发现两个配置文件是 elasticsearch.yml 和 logging.yml。 第一个是通用的 Elasticsearch 配置。 提供的文件只包含注释,因此使用默认设置。 通读该文件将很好地概述这些选项,但我将在下面提出一些建议。 没有任何设置是必需的。 您可以在不执行以下任何操作的情况下使用 Elasticsearch,但这将是一个原始开发环境。
设置“cluster.name”是 Elasticsearch 提供自动发现的方法。 这意味着如果同一网络上的一组 Elasticsearch 服务器共享相同的集群名称,它们将自动发现彼此。 这就是扩展 Elasticsearch 的简单方法,但请注意,如果您保留默认集群名称,并且您的网络上还有其他 Elasticsearch 服务器不受您的控制,您可能会陷入糟糕的状态。
基本用法
让我们将一些数据添加到我们的 Elasticsearch 安装中。 Elasticsearch 使用 RESTful API,它响应常见的 CRUD 命令:创建、读取、更新和销毁。
添加条目
curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
您应该看到以下响应
{“ok”:true,“_index”:“教程”,“_type”:“helloworld”,“_id”:“1”,“_version”:1}
我们所做的是向 Elasticserach 服务器发送一个 HTTP POST 请求。 请求的 URI 是 /tutorial/helloworld/1。 了解这里的参数很重要:
- “tutorial”是 Elasticsearch 中数据的索引。
- “helloworld”是类型。
- “1”是我们在上述索引和类型下的条目的id。
如果您看到上面对 curl 命令的响应,我们现在可以使用以下命令查询数据
curl -X GET 'http://localhost:9200/tutorial/helloworld/1'
应该回应
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"exists":true, "_source" : { "message": "Hello World!" }}
成功! 我们在 Elasticsearch 中添加和查询数据。
需要注意的一件事是,我们可以通过将 ?pretty=true
附加到查询中来获得更好的输出。 让我们试一试
curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty=true'
哪个应该回应
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 1, "exists" : true, "_source" : { "message": "Hello World!" } }
这更具可读性。 如果您在 Elasticsearch 配置文件中设置了 format=yaml
,则输出也将被漂亮地打印出来,而无需附加查询字符串。
结论
我们现在已经安装、配置并开始使用 Elasticsearch。 因为它响应基本的 RESTful API。 现在可以很容易地开始在您的应用程序中使用 Elasticsearch 添加和查询数据。