Elasticsearch 是一个分布式、RESTful 搜索和分析平台。它可以根据需要进行扩展,并且您可以立即在单个 DigitalOcean droplet 上开始使用它。在本教程中,我们将在 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
。
Oracle 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
安装一个启动 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,使其对公共互联网不可访问--Elasticsearch 没有内置的安全性,可以被任何可以访问 HTTP API 的人控制。这可以通过编辑 `elasticsearch.yml` 来完成。假设您使用的是包安装,请使用以下命令打开配置: ```bash 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
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 命令:创建(Create)、读取(Read)、更新(Update)和销毁(Destroy)。
要添加一个条目
curl -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
您应该会看到以下响应
{"ok":true,"_index":"tutorial","_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 添加和查询数据。