Elasticsearch7.2中文教程翻译(三):探索集群

@高效码农  July 23, 2019

REST API

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

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

集群健康

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

要检查群集运行状况,我们将使用_catAPI。

GET /_cat/health?v

curl -X GET "localhost:9200/_cat/health?v"

返回:

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1475247709 17:01:49  elasticsearch green           1         1      0   0    0    0        0             0                  -                100.0%

我们可以看到名为“elasticsearch”的群集处于绿色状态。

每当我们要求群集健康时,我们要么获得绿色,黄色或红色。

绿色 - 一切都很好(集群功能齐全)
黄色 - 所有数据都可用,但尚未分配一些副本(群集功能齐全)
红色 - 某些数据由于某种原因不可用(群集部分功能)
注意:当群集为红色时,它将继续提供来自可用分片的搜索请求,但您可能需要尽快修复它,因为存在未分配的分片。

同样从上面的响应中,我们可以看到总共1个节点,并且我们有0个分片,因为我们还没有数据。请注意,由于我们使用默认群集名称(elasticsearch),并且由于Elasticsearch默认使用单播网络发现来查找同一台计算机上的其他节点,因此您可能会意外启动计算机上的多个节点并拥有它们所有人都加入一个集群。在这种情况下,您可能会在上面的响应中看到多个节点。

我们还可以获得群集中的节点列表,如下所示:

GET /_cat/nodes?v

curl -X GET "localhost:9200/_cat/nodes?v"

返回:

ip        heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
127.0.0.1           10           5   5    4.46                        dim      *      PB2SGZY

在这里,我们可以看到一个名为“PB2SGZY”的节点,它是我们集群中当前的单个节点。

列出所有索引

现在让我们来看看我们的索引

GET /_cat/indices?v
curl -X GET "localhost:9200/_cat/indices?v"

返回:

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

这仅仅意味着我们在集群中还没有索引。

创建索引

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

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

第一个命令使用PUT动词创建名为“customer”的索引。我们只是追加pretty到调用的末尾,告诉它打印JSON响应(如果有的话)。

返回:

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

第二个命令的结果告诉我们,我们现在有一个名为customer的索引,它有一个主分片和一个副本(默认值),它包含零文档。

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

索引和查询文档

现在让我们在客户索引中加入一些内容。我们将一个简单的客户文档索引到客户索引中,ID为1,如下所示:

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

返回:

{
  "_index" : "customer",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

从上面可以看出,在客户索引中成功创建了一个新的客户文档。该文档还具有我们在索引时指定的内部标识1。

值得注意的是,Elasticsearch不需要在将文档编入索引之前先显式创建索引。在前面的示例中,如果客户索引事先尚未存在,则Elasticsearch将自动创建客户索引。

我们现在检索刚刚编入索引的文档:

GET /customer/_doc/1?pretty

返回:

{
  "_index" : "customer",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 25,
  "_primary_term" : 1,
  "found" : true,
  "_source" : { "name": "John Doe" }
}

这里有一个字段found,说明我们找到了一个ID为1的文档;另一个字段_source,该字段返回上一步索引的完整JSON文档。

删除索引

现在让我们删除刚刚创建的索引,然后再次列出所有索引:

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

返回:

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

这意味着索引已成功删除,现在我们回到了我们在集群中最开始的地方。

在我们继续之前,让我们再仔细看看到目前为止我们学到的一些API命令:

PUT /customer
PUT /customer/_doc/1
{
  "name": "John Doe"
}
GET /customer/_doc/1
DELETE /customer

如果我们仔细研究上述命令,我们实际上可以看到我们如何在Elasticsearch中访问数据的模式。该模式可归纳如下:

<HTTP Verb> /<Index>/<Endpoint>/<ID>

这种REST访问模式在所有API命令中都非常普遍,如果您能够简单地记住它,您将在掌握Elasticsearch方面有一个良好的开端。



添加新评论