美文网首页ElasticSearch实战笔记
08、mget批量查询,bulk批量语法

08、mget批量查询,bulk批量语法

作者: 众神开挂 | 来源:发表于2020-03-25 00:12 被阅读0次

    主要内容:mget批量查询,bulk批量语法

    1、mget批量查询

    查询方式01 :不同index下

    GET /_mget
    {
      "docs": [
        {
          "_index": "ecommerce",
          "_id": 1
        },
        {
          "_index": "test_index",
          "_id": 7
        }
      ]
    }
    

    查询方式02:适用于同一个index下

    GET /ecommerce/_mget
    {
      "docs": [
        {
          "_id": 1
        },
        {
          "_id": 2
        }
      ]
    }
    ##或者下面这种方式
    GET /ecommerce/_mget
    {
      "ids":["1","2"]
    }
    
    

    可以说mget是很重要的,一般来说,在进行查询的时候,如果一次性要查询多条数据的话,那么一定要用batch批量操作的api,尽可能减少网络开销次数,可能将性能提升数倍,甚至数十倍,非常之重要

    2、bulk批量语法

    语法说明:

    每一个操作要两个json串,语法如下:

    {"action": {"metadata"}}
    {"data"}
    

    举例,比如你现在要创建一个文档,放bulk里面,看起来会是这样子的:

    {"index": {"_index": "test_index", "_type", "test_type", "_id": "1"}}
    {"test_field1": "test1", "test_field2": "test2"}
    

    可以执行的操作类型:
    (1)delete:删除一个文档,只要1个json串就可以了
    (2)create:PUT /index/_create/id,强制创建
    (3)index:普通的put操作,可以是创建文档,也可以是全量替换文档
    (4)update:执行的partial update操作

    1. bulk api对json的语法,有严格的要求,每个json串不能换行,只能放一行,同时一个json串和一个json串之间,必须有一个换行
    2. bulk操作中,任意一个操作失败,是不会影响其他的操作的,但是在返回结果里,会告诉你异常日志
    2.1、删除操作
    POST /_bulk
    {"delete":{"_index":"ecommerce","_id":"8"}}
    
    2.2、创建操作
    POST /_bulk
    {"create":{"_index":"ecommerce","_id":"12"}}
    {"test_field":"test12"}
    
    2.3、创建或者批量更新
    POST /_bulk
    {"index":{"_index":"ecommerce","_id":"2"}}
    {"test_field":"replaced test2"}
    
    2.4、partial update
    POST /_bulk
    {"update":{"_index":"ecommerce","_id":"1"}}
    {"doc":{"test_field2":"bulk test1"}}
    
    2.5、 并联批量执行
    POST /_bulk
    {"delete":{"_index":"ecommerce","_id":"8"}}
    {"create":{"_index":"ecommerce","_id":"12"}}
    {"test_field":"test12"}
    {"index":{"_index":"ecommerce","_id":"2"}}
    {"test_field":"replaced test2"}
    {"update":{"_index":"ecommerce","_id":"1"}}
    {"doc":{"test_field2":"bulk test1"}}
    
    2.6、相同index的话
    POST ecommerce/_bulk
    {"delete":{"_id":"8"}}
    {"create":{"_id":"12"}}
    {"test_field":"test12"}
    {"index":{"_id":"2"}}
    {"test_field":"replaced test2"}
    {"update":{"_id":"1"}}
    {"doc":{"test_field2":"bulk test1"}}
    

    3、bulk size最佳大小

    bulk request会加载到内存里,如果太大的话,性能反而会下降,因此需要反复尝试一个最佳的bulk size。一般从10005000条数据开始,尝试逐渐增加。另外,如果看大小的话,最好是在515MB之间。

    阶段性总结和梳理

    
    Elasticsearch在跑起来以后,其实起到的第一个最核心的功能,就是一个分布式的文档数据存储系统。
    文档数据:es可以存储和操作json文档类型的数据,而且这也是es的核心数据结构。
    存储系统:es可以对json文档类型的数据进行存储,查询,创建,更新,删除,等等操作。其实已经起到了一个什么样的效果呢?其实ES满足了这些功能,就可以说已经是一个NoSQL的存储系统了。
    
    围绕着document在操作,其实就是把es当成了一个NoSQL存储引擎,一个可以存储文档类型数据的存储系统,在操作里面的document。
    
    es可以作为一个分布式的文档存储系统,所以说,我们的应用系统,是不是就可以基于这个概念,去进行相关的应用程序的开发了。
    
    适合什么类型的应用程序呢?
    
    (1)数据量较大,es的分布式本质,可以帮助你快速进行扩容,承载大量数据
    (2)数据结构灵活多变,随时可能会变化,而且数据结构之间的关系,非常复杂。
    (3)对数据的相关操作,较为简单,比如就是一些简单的增删改查
    (4)NoSQL数据库,适用的也是类似于上面的这种场景
    
    举个例子,比如说像一些网站系统,或者是普通的电商系统,博客系统,面向对象概念比较复杂,但是作为终端网站来说,没什么太复杂的功能,就是一些简单的CRUD操作,而且数据量可能还比较大。这个时候选用ES这种NoSQL型的数据存储,比传统的复杂的功能务必强大的支持SQL的关系型数据库,更加合适一些。无论是性能,还是吞吐量,可能都会更好。
    
    

    相关文章

      网友评论

        本文标题:08、mget批量查询,bulk批量语法

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