美文网首页@IT·大数据玩转大数据程序员
ElasticSearch入门 官方文档翻译 - 2.Explo

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

作者: Jason__Ding | 来源:发表于2017-09-29 20:49 被阅读17次

    集群探索

    REST API

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

    • 检查你的集群、节点和索引的健康状态和各种统计信息
    • 管理你的集群、节点、索引数据和元数据
    • 对你的索引进行CRUD(创建、读取、更新和删除)和搜索操作
    • 执行高级的查询操作,像是分页、排序、过滤、脚本编写(scripting)、聚合(aggregations)和许多其它操作

    集群健康

    让我们从一个基础的健康检查开始,查看我们的集群是怎么工作的。我们使用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开一个好头。

    相关文章

      网友评论

        本文标题:ElasticSearch入门 官方文档翻译 - 2.Explo

        本文链接:https://www.haomeiwen.com/subject/qddwextx.html