zoukankan      html  css  js  c++  java
  • 探索你的集群(翻译)

    来源:https://www.elastic.co/guide/en/elasticsearch/reference/6.4/getting-started-update-documents.html

    支持的API

    API可以实现的功能:

    1.检测集群、节点、索引健康、状态、统计信息

    2.管理集群、节点、索引数据、元数据

    3.执行高级查询操作类似:分页、排序、过滤、脚本、聚合和其他

    集群健康

    请求语句:

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

    返回:

    Green:一切正常(集群完全可用)

    Yellow:所有数据可用,但是一些副本没有分配完成(集群完全可用)

    Red:一些数据不可用,由于一些原因(集群部分可用)

    注意:

    当集群变红的时候,依然会有一些可用的分片响应查询请求,但是我们应该尽快处理这些未分配的分片

    请求语句:

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

    请求节点状态

    列出所有指标

    请求语句:

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

     

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

    创建索引

    举例:

    创建一个名为customer的索引,然后列出所有的索引

    curl -X PUT "localhost:9200/customer?pretty&pretty"
    curl -X GET "localhost:9200/_cat/indices?v&pretty"

    第一行是创建索引,用PUT方法 后缀加了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

    第二个请求是告诉我们现在有一个索引,并且有五个分片和一个副本,里面没有文档

    我们可以注意到这个索引被标注为Yellow的状态,原因是因为我们的集群只有一个节点,

    一个副本在只有一个节点的情况下不会被分配,如果再来一个节点可以被分配,然后变成Green的状态

    索引和查询一条文档:

    更新一条文档到customer索引中:

    curl -X PUT "localhost:9200/customer/_doc/1?pretty&pretty" -H 'Content-Type: application/json' -d'
    {
    "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
    }综上所述

    综上所述,我们可以看到一个新的文档成功写入到customer索引中,他的主键是1

    值得注意的是数据在写入的时候不需要事先创建索引,es可以在写入数据的时候自动创建索引

    接下来搜索一下刚才写入的数据:

    curl -X GET "localhost:9200/customer/_doc/1?pretty&pretty"

    返回如下:

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

    这跟写入的Json相比就多了一个found字段,标志我们是否搜索数据成功。_source存储我们事先写入的完整的json 

    删除索引

    删掉刚才建好的数据

    curl -X DELETE "localhost:9200/customer?pretty&pretty"
    curl -X GET "localhost:9200/_cat/indices?v&pretty"

    返回如下:

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

    这意味着索引被成功删除,我们又回到了集群开始啥也没有的状态

    在继续学习之前,我们来近距离观察一下刚才学的一些API

    curl -X PUT "localhost:9200/customer?pretty"
    curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: application/json' -d'
    {
    "name": "John Doe"
    }
    '
    curl -X GET "localhost:9200/customer/_doc/1?pretty"
    curl -X DELETE "localhost:9200/customer?pretty"

    如果我们学的认真的话,我们可以看到请求ES的一种模式,总结如下:

    <HTTP Verb> /<Index>/<Type>/<ID>

    这个请求模式在所有的API请求中都很普遍,如果你能记住它,就是在学习管理ES中起了个好头。

    更改你的数据

    es具有近实时的数据操作和搜索能力,默认情况下,你可以假设有1s的延时,操作情况:index/update/delete

    这是跟其他类似SQL这种操作之后就马上更新数据的平台的一个重要区别

    建立/替换文档:

    前面我们知道了如何插入一条数据,回顾一下:

    curl -X PUT "localhost:9200/customer/_doc/1?pretty&pretty" -H 'Content-Type: application/json' -d'
    {
    "name": "John Doe"
    }
    '

    上面的操作可以向customer索引中写入一条特定数据,主键是1,如果我们再执行一次上面的命令,es会替换一条新的文档到旧的文档中,主键还是1

    主键一致的情况下 内容会变化,主键是新的会生成新的数据

    当写入数据的时候,你可以指定主键,如果不指定,es就随机生成一个主键,请求的结果中会返回这个主键。

    下面示例一下如何不指定主键写入数据:

    curl -X POST "localhost:9200/customer/_doc?pretty&pretty" -H 'Content-Type: application/json' -d'
    {
    "name": "Jane Doe"
    }
    '

    注意以上的示例中,我们采用的是POST方法而不是PUT方法,在我们不指定主键的情况下。

    更新数据:

    除了能写入和替换文档之外,我们还需要更新文档,注意es的底层机制并不真正的更新文档,当我们更新数据的时候,

    es会删除旧的数据,然后写入一条新的数据。

    下面这个是更新示例:

    curl -X POST "localhost:9200/customer/_doc/1/_update?pretty&pretty" -H 'Content-Type: application/json' -d'
    {
    "doc": { "name": "Jane Doe" }
    }
    '

    这个示例表示了我们如何更新一个之前已有的主键是1的数据,将名字改了一下,还可以再加一个字段:

    curl -X POST "localhost:9200/customer/_doc/1/_update?pretty&pretty" -H 'Content-Type: application/json' -d'
    {
    "doc": { "name": "Jane Doe", "age": 20 }
    }
    '

    更新数据还可以用script方法,下面的示例是将age+5

    curl -X POST "localhost:9200/customer/_doc/1/_update?pretty&pretty" -H 'Content-Type: application/json' -d'
    {
    "script" : "ctx._source.age += 5"
    }
    '

    在上面的示例中。ctx._source这个方法表示了当前的source文档将被更新。

    es提供了同时更新多个文档的功能通过查询条件,类似SQL查询 update-where 参考:https://www.elastic.co/guide/en/elasticsearch/reference/6.4/docs-update-by-query.html

    删除数据:

    删除数据非常的直接,下面的这个示例展示了如何删除一个提前创建好的主键是2的数据

    curl -X DELETE "localhost:9200/customer/_doc/2?pretty&pretty"

    删除也可以用查询批量删除(delete_by_query API)删除符合条件的数据

     https://www.elastic.co/guide/en/elasticsearch/reference/6.4/docs-delete-by-query.html

    也可以采用下面方式删除:curl -XDELETE 'http://localhost:9200/index_name/_query?pretty' -d '{"query": {"bool": {"must":[{"range":{"modify_time":{"to":1562342400}}}]}}}'

    删除后附加查询条件

    批量处理:

    除了能写入,更新和删除个别数据之外,es还提供了_bulk API来批量操作,

    这个功能很重要,因为他提供了高效的机制来进行多种操作,尽可能快与少的网络消耗来操作。

    提供一个快速的例子,在Bulk操作中写入两条数据:

    curl -X POST "localhost:9200/customer/_doc/_bulk?pretty&pretty" -H 'Content-Type: application/json' -d'
    {"index":{"_id":"1"}}
    {"name": "John Doe" }
    {"index":{"_id":"2"}}
    {"name": "Jane Doe" }
    '

    这个是更新一个与删除一个的bulk操作:

    curl -X POST "localhost:9200/customer/_doc/_bulk?pretty&pretty" -H 'Content-Type: application/json' -d'
    {"update":{"_id":"1"}}
    {"doc": { "name": "John Doe becomes Jane Doe" } }
    {"delete":{"_id":"2"}}
    '

    注意上面的删除操作没有额外的文档输入,删除只需要主键

    Bulk API不会因为批量操作中的一次操作而失败,如果一条操作因为一些原因失败了,它之后的数据依然会继续处理,

    bulkAPI的返回操作中会提供每条数据的操作返回状态,这样就可以检查某些失败的特定数据。

  • 相关阅读:
    问题账户需求分析
    需求分析初学理解
    GitHub初步探索-1-使用本地代码管理工具,简化上传的过程
    软件工程概论-个人总结
    第二次冲刺-个人工作总结05
    第二次冲刺-个人工作总结04
    第二次冲刺-个人工作总结03
    第二次冲刺-个人工作总结02
    第二次冲刺-个人工作总结01
    第一次冲刺-个人工作总结10
  • 原文地址:https://www.cnblogs.com/supermanwx/p/11843865.html
Copyright © 2011-2022 走看看