美文网首页Elasticsearch 搜索之路
【Elasticsearch 7 探索之路】(二)文档的 CRU

【Elasticsearch 7 探索之路】(二)文档的 CRU

作者: 隐峯 | 来源:发表于2019-11-14 17:22 被阅读0次

    上一篇,我们介绍了什么是 Elasticsearch,它能做什么用以及基本概念(索引 Index、文档 Document、类型 Type)理解。这篇主要对文档的基本 CRUD 以及如何批量操作讲解。下面让我们进入正题。

    一、文档的 CRUE

    Create 文档

    支持自动生成文档 Id 和指定文档 Id 两种方法

    #create document. 自动生成 Id
    POST songs/_doc
    {
      "name":"说好不哭",
      "author":"周杰伦",
      "price":3
    }
    
    #create document. 指定Id。如果 Id 已经存在,报错
    PUT songs/_create/1
    {
      "name":"说好不哭",
      "author":"周杰伦",
      "price":3
    }
    

    Get 文档

    #找到文档
    Get songs/_doc/1
    
    result:
    {
      "_index" : "songs",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 1,
      "_seq_no" : 0,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "name" : "说好不哭",
        "author" : "周杰伦",
        "price" : 3
      }
    }
    
    • 找到文档,返回 HTTP 200
      • 文档元信息
        • _index/_type/,_type 在版本7中只有 _doc 类型
        • _version 版本信息,同一个 Id 的文档被删除了,版本号也会增加
        • _source 中默认包含文档的原始信息
    • 找不到,返回 HTTP 404

    Index 文档

    Index 也是用于创建文档的方法,和 Create 不同有一些不同,如果文档不存在情况,直接创建新文档,否则删除原来的文档,新文档被索引,_version 版本加一。

    PUT songs/_doc/1
    {
      "name":"说好不哭",
      "author":"周杰伦",
      "price":0
    }
    
    result:
    {
      "_index" : "songs",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 2,//+1
      "result" : "updated",
      "_shards" : {
        "total" : 2,
        "successful" : 2,
        "failed" : 0
      },
      "_seq_no" : 1,
      "_primary_term" : 1
    }
    

    Update 文档

    • Update 不会删除原来文档,而是实现真正更新
    • Post 方法和 Payload 需要包含在 "doc" 中
    #在原文档上增加字段
    POST songs/_update/1
    {
        "doc":{
            "update" : "2019-05-15T14:12:12"
        }
    }
    
    GET songs/_doc/1
    {
      "_index" : "songs",
      "_type" : "_doc",
      "_id" : "1",
      "_version" : 3,
      "_seq_no" : 2,
      "_primary_term" : 1,
      "found" : true,
      "_source" : {
        "name" : "说好不哭",
        "author" : "周杰伦",
        "price" : 0,
        "update" : "2019-05-15T14:12:12"
      }
    }
    

    Delete 文档

    #Delete by Id
    #删除文档
    DELETE users/_doc/1
    

    Bulk 批量操作

    • Bulk 支持在一次调用中,对不同索引进行操作
    • 支持 Index、Create、Update、Delete 类型操作
    • 单条错误不影响其他操作进行
    • 每一条操作都会有对应的执行的结果显示
    POST _bulk
    { "index" : { "_index" : "test1", "_id" : "1" } }
    { "field1" : "value1" }
    { "delete" : { "_index" : "test1", "_id" : "2" } }
    { "create" : { "_index" : "test2", "_id" : "3" } }
    { "field3" : "value3" }
    { "update" : { "_index" : "test1","_id" : "1"} }
    { "doc" : {"field2" : "value2"} }
    

    mget 批量读取

    顾名思义就是可以对不同索引的文档进行批量读取,只需要提供索引名称和 Id 就可以在一次 API 中全部读取,减少网络开销。

    GET /test1/_mget
    {
        "docs" : [
            {
                "_id" : "1"
            },
            {
                "_id" : "2"
            }
        ]
    }
    

    msearch 批量查询

    同样 ES 也提供了 msearch 对不同索引进行批量查询。

    # msearch 操作
    POST kibana_sample_data_ecommerce/_msearch
    {}
    {"query" : {"match_all" : {}},"size":1}
    {"index" : "kibana_sample_data_flights"}
    {"query" : {"match_all" : {}},"size":2}
    
    注:kibana_sample_data_ecommerce 可以在 kibana 的样例数据,需要手动点击添加。
    

    本篇主要对文档的 CRUD 以及批量操作 API 进行讲解。在这里提一点,批量操作可以帮助我们提高对 API 调用性能,但如果一次提交过多数据,也是有可能会导致 ES 过大的压力,反而造成性能下降。

    系列文章

    【Elasticsearch 7 搜索之路】(一)什么是 Elasticsearch?

    相关文章

      网友评论

        本文标题:【Elasticsearch 7 探索之路】(二)文档的 CRU

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