探索集群 - shuiyuebingdian/ElasticSearch GitHub Wiki

REST API

现在我们的节点(和集群)已经启动并运行,下一步是了解如何与之通信。幸运的是,Elasticsearch提供了非常全面而强大的REST API,您可以使用它与集群进行交互。该API可以完成的几件事如下:

检查您的群集,节点和索引的运行状况,状态和统计信息
管理您的集群,节点以及索引数据和元数据
对您的索引执行CRUD(创建,读取,更新和删除)和搜索操作
执行高级搜索操作,例如分页,排序,过滤,脚本,聚合以及许多其他操作

让我们从基本的运行状况检查开始,我们可以使用该检查来查看集群的运行情况。
我们将使用curl来执行此操作,但是您可以使用允许您进行HTTP / REST调用的任何工具。假设我们仍然在启动Elasticsearch并打开另一个命令外壳窗口的同一个节点上。

集群健康API

要检查集群的运行状况,我们将使用_cat API。您可以在Kibana的控制台中运行以下命令:

GET /_cat/health?v

集群运行状况会显示绿色,黄色或红色。绿色表示一切正常(群集完全可用),黄色表示所有数据可用,但某些副本尚未分配(群集完全可用),红色表示由于某种原因某些数据不可用。请注意,即使群集是红色的,它仍然可以部分起作用(即它将继续满足来自可用分片的搜索请求),但是由于缺少数据,您可能需要尽快对其进行修复。

获取集群中节点的列表的API

GET /_cat/nodes?v

列出所有索引

GET /_cat/indices?v

创建索引

现在,我们创建一个名为“ customer”的索引,然后再次列出所有索引:

PUT /customer?pretty
GET /_cat/indices?v

响应如下:

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open customer 95SQ4TSUT7mWBT7VNHH67A 5 1 0 0 260b 260b

第一个命令后面的pretty表示结果以json格式显示。

第二个命令的结果告诉我们,现在我们有1个名为customer的索引,它具有5个主分片和1个副本(默认值),并且其中包含0个文档。

您可能还会注意到,客户索引带有标记为黄色的运行状况。回想一下我们之前的讨论,黄色表示(尚未)分配某些副本。此索引发生这种情况的原因是,默认情况下,Elasticsearch为此索引创建了一个副本。由于目前我们只有一个节点在运行,因此直到另一节点加入群集的稍后时间,才可以分配该副本(以实现高可用性)。一旦将该副本分配到第二个节点,此索引的运行状况将变为绿色。

文档建立索引和查询

现在让我们在客户索引中添加一些内容。之前请记住,为了对文档建立索引,我们必须告诉Elasticsearch它应该进入索引的哪种类型。

让我们将一个简单的客户文档编入ID为1的“external”类型的customer索引中,如下所示:

PUT /customer/external/1?pretty
{
"name": "John Doe"
}

以及响应:

{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : true
}

从上面可以看到,在customer索引和external类型内部已成功创建了新的客户文档。该文档的内部ID为1,这是我们在索引时指定的。

重要的是要注意,Elasticsearch不需要您首先显式创建索引,然后才能将文档建立索引。在上一个示例中,Elasticsearch将自动创建事先不存在的客户索引。

现在,让我们检索刚刚索引的文档:

以及响应:

从上面可以看到,在客户索引和外部类型内部已成功创建了新的客户文档。该文档的内部ID为1,这是我们在索引时指定的。

重要的是要注意,Elasticsearch不需要您首先显式创建索引,然后才能将文档建立索引。在上一个示例中,Elasticsearch将自动创建事先不存在的客户索引。

现在,让我们检索刚刚索引的文档:
GET /customer/external/1?pretty

以及响应: {
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : { "name": "John Doe" }
}
这里的字段found,它表示我们找到了一个具有请求的ID 1的文档和另一个字段_source,该域返回了我们从上一步索引的完整JSON文档。

删除索引

DELETE /customer?pretty