@IT·大数据玩转大数据程序员

ElasticSearch入门 官方文档翻译 - 2.Explo

2017-09-29  本文已影响17人  Jason__Ding

集群探索

REST API

现在,我们的节点(集群)已经跑起来了,下一步想着怎么跟它沟通。幸运的是,ES提供了广泛且强大的REST API用于与集群交互。下面是利用这个API,可以做的几件事情:

集群健康

让我们从一个基础的健康检查开始,查看我们的集群是怎么工作的。我们使用CURL来干这事,当然,你也可以用其他可以发起HTTP/REST请求的工具。首先,假设我们在启动ES的同一个节点上,然后打开另一个SHELL窗口。

我们用_cat API来作集群健康检查。

curl -XGET 'localhost:9200/_cat/health?v&pretty'

响应为:

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的集群是启动的,绿色状态。

当我们询问集群状态的时候,我们要么得到绿色、黄色或红色。绿色代表一切正常(集群功能齐全),黄色意味着所有的数据都是可用的,但是某些复制没有被分配(集群功能齐全),红色则代表因为某些原因,某些数据不可用。注意,即使是集群状态是红色的,集群仍然是部分可用的(它仍然会利用可用的分片来响应搜索请求),但是可能你需要尽快修复它,因为你有丢失的数据。

也是从上面的响应中,我们可以看到,一共有一个节点,由于里面没有数据,我们有0个分片。注意,由于我们使用默认的集群名字(elasticsearch),并且由于ES默认使用网络单播发现同台机器上的其它节点,如果你在你的网络中启动了多个节点,你就已经把她们加入到一个集群中了。在这种情形下,你可能在上面的响应中看到多个节点。

用以下命令可以获取集群中的节点列表:

curl -XGET 'localhost:9200/_cat/nodes?v&pretty'

响应为:

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                        mdi      *      PB2SGZY

可以看到,名为PB2SGZY的节点,是集群中唯一的一个节点。

查看所有的索引

让我们看看现在有什么索引:

curl -XGET 'localhost:9200/_cat/indices?v&pretty'

响应是:

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

这代表集群中目前还没有索引。

创建索引

现在,我们创建一个名为customer的索引,然后再次获取所有的索引:

curl -XPUT 'localhost:9200/customer?pretty'
curl -XGET 'localhost:9200/_cat/indices?v&pretty'

第一个命令使用PUT动词创建了名为customer的索引。我们简单地将pretty附加到调用的尾部,使其以美观的形式打印出JSON响应(如果有的话)。

响应如下:

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

第二个命令的结果告诉我们,我们现在有一个名为customer的索引,它有5个主分片和1个复制(默认),其中包括0个文档。

你也许发现了,customer索引的健康度被标记为黄色了。回想我们之前讨论的,黄色意味着某些复制没有(或者还未)被分配。这个索引之所以这样,是因为ES默认为这个索引创建一份复制。由于现在我们只有一个节点在运行,那一份复制就分配不了了(为了高可用),直到当另外一个节点加入到这个集群后,才能分配。一旦那份复制在第二个节点上被复制,这个节点的健康状态就会变成绿色。

索引并查询一个文档

现在让我们放一些东西到customer索引中。首先要知道的是,为了索引一个文档,我们必须告诉ES这个文档要到这个索引的哪个类型下。

让我们将一个简单的客户文档索引到customer索引,external类型中,这个文档的ID是1,操作如下:

curl -XPUT 'localhost:9200/customer/external/1?pretty&pretty' -H 'Content-Type: application/json' -d'
{
  "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, 这个id是我们在索引的时候指定的。

有一个关键点需要注意,ES在你想将文档索引到某个索引的时候,并不强制要求这个索引被显式地创建。在前面这个例子中,如果customer索引不存在,ES将会自动地创建这个索引。

现在,让我们把刚刚索引的文档取出来:

curl -XGET 'localhost:9200/customer/external/1?pretty&pretty'

响应为:

{
  "_index" : "customer",
  "_type" : "external",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : { "name": "John Doe" }
}

除了一个叫做found的字段来指明我们找到了一个ID为1的文档,和另外一个字段_source返回我们前一步中索引的完整JSON文档之外,其它的都没有什么特别之处。

删除索引

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

curl -XDELETE 'localhost:9200/customer?pretty&pretty'
curl -XGET 'localhost:9200/_cat/indices?v&pretty'

响应为:

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

这表明我们成功地删除了这个索引,现在我们回到了集群中空无所有的状态。

在更进一步之前,我们再细看一下一些我们学过的API命令:

curl -XPUT 'localhost:9200/customer?pretty'
curl -XPUT 'localhost:9200/customer/external/1?pretty' -H 'Content-Type: application/json' -d'
{
  "name": "John Doe"
}
'
curl -XGET 'localhost:9200/customer/external/1?pretty'
curl -XDELETE 'localhost:9200/customer?pretty'

如果我们仔细研究以上的命令,我们可以发现访问Elasticsearch中数据的一个模式。这个模式可以被总结为:

 curl -<REST Verb> <Node>:<Port>/<Index>/<Type><ID>

这个REST访问模式普遍适用于所有的API命令,如果你能记住它,你就会为掌握ES开一个好头。

上一篇下一篇

猜你喜欢

热点阅读