zoukankan      html  css  js  c++  java
  • 【ElasticSearch(四)】PUT&POST更新数据、DELETE删除数据、_bulk批量操作

    【ElasticSearch(四)】PUT/POST更新数据、DELETE删除数据、_bulk批量操作


    先查询下现在的情况GET http://localhost:9200/customer/external/1

    {
        "_index": "customer",
        "_type": "external",
        "_id": "1",
        "_version": 3,
        "_seq_no": 5,
        "_primary_term": 1,
        "found": true,
        "_source": {
            "name": 1
        }
    }
    

    一、PUT / POST追加更新数据

    要注意一点:

    更新操作时,如果URL带_update,更新前会比对新旧数据,如果新旧数据完全相同,将不会进行任何操作noop,不会影响序列号、版本号信息。

    如果URI不带_update,不会检查原数据,都会显示updated


    1.POST访问地址:(路径带_update)

    POST customer/external/1/_update

    Body数据:

    路径带_update ,要在参数外套一层doc

    {
        "doc":{
            "name":2
        }
    }
    

    返回结果:更新成功

    {
        "_index": "customer",
        "_type": "external",
        "_id": "1",
        "_version": 4,
        "result": "updated",
        "_shards": {
            "total": 2,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 7,
        "_primary_term": 2
    }
    

    当我们再次发送请求时(Body数据相同),会发现200请求成功,但是版本号没有发生变化,result变成了noop(no operation)表示没有发生变化。


    现在修改Body数据

    {
        "doc":{
            "name":3
        }
    }
    

    再次发送请求,返回结果。updated


    2.POST访问地址:(路径不带_update)

    POST customer/external/1


    返回结果:尽管name参数和原来一样,但还是会updated的。


    3.PUT访问地址:

    (注意PUT访问路径是不能加_update的)

    PUT customer/external/1

    这个测试结果和 POST customer/external/1 一样


    二、PUT / POST增加属性更新

    增加属性更新和上方规则相同,传参直接添加属性就可以保存。


    下面仅以PUT为例:

    PUT customer/external/1

    Body请求数据:

    {
        "name": "xiaoming",
        "age": 13
    }
    

    再次使用GET查询返回结果:

    {
        "_index": "customer",
        "_type": "external",
        "_id": "1",
        "_version": 8,
        "_seq_no": 11,
        "_primary_term": 2,
        "found": true,
        "_source": {
            "name": "xiaoming",
            "age": 13
        }
    }
    

    三、DELETE删除数据信息

    DELETE http://localhost:9200/customer/external/1/

    返回结果:result变为deleted

    {
        "_index": "customer",
        "_type": "external",
        "_id": "1",
        "_version": 9,
        "result": "deleted",
        "_shards": {
            "total": 2,
            "successful": 1,
            "failed": 0
        },
        "_seq_no": 12,
        "_primary_term": 2
    }
    

    再用GET方法查询,返回404没找到:found为false


    四、DELETE删除整个索引

    DELETE http://localhost:9200/customer
    返回200,结果:

    {
        "acknowledged": true
    }
    

    再用GET方法查询,返回404错误:找不到索引

    {
        "error": {
            "root_cause": [
                {
                    "type": "index_not_found_exception",
                    "reason": "no such index [customer]",
                    "resource.type": "index_or_alias",
                    "resource.id": "customer",
                    "index_uuid": "_na_",
                    "index": "customer"
                }
            ],
            "type": "index_not_found_exception",
            "reason": "no such index [customer]",
            "resource.type": "index_or_alias",
            "resource.id": "customer",
            "index_uuid": "_na_",
            "index": "customer"
        },
        "status": 404
    }
    

    注意:ES中并不能删除索引中的类型,只能删除整个索引和数据信息。


    五、_bulk批量操作

    批量操作中的每一个操作相互独立,可以独立成功或失败,彼此没有影响(不像mysql,批量操作中的一条执行失败,后面就不会执行了)。

    1.请求的语法格式

    这里有两条数据,数据之间可以没有空行。

    POST 索引/类型/_bulk
    {action:{metadata}}
    
    {request body}
    
    {action:{metadata}}
    
    {request body}
    
    

    action:操作,可以是create(创建),"index"(保存),update(更新),delete(删除)等

    metadata:元数据,可以写数据的"_id"

    request body:写数据本身

    2.测试工具

    由于PostMan无法完成本功能,会出现400错误,出错原因是由于PostMan自动优化了换行符号。

    我们需要采用Kibana测试。

    访问http://localhost:5601,选择Kibana,选择侧边栏的Dev Tools

    界面长这个样子。点击执行箭头,就可以发送请求

    3.测试案例

    【案例一】

    POST /customer/external/_bulk
    {"index":{"_id":"1"}}
    {"name": "JSON Doe"}
    {"index":{"_id":"2"}}
    {"name": "Jone Doe"}
    

    返回结果:

    took:完成请求花费的时间,毫秒

    errors:是否出现了错误

    items:返回的结果

    #! [types removal] Specifying types in bulk requests is deprecated.
    {
      "took" : 40,
      "errors" : false,
      "items" : [
        {
          "index" : {
            "_index" : "customer",
            "_type" : "external",
            "_id" : "1",
            "_version" : 1,
            "result" : "created",
            "_shards" : {
              "total" : 2,
              "successful" : 1,
              "failed" : 0
            },
            "_seq_no" : 0,
            "_primary_term" : 1,
            "status" : 201
          }
        },
        {
          "index" : {
            "_index" : "customer",
            "_type" : "external",
            "_id" : "2",
            "_version" : 1,
            "result" : "created",
            "_shards" : {
              "total" : 2,
              "successful" : 1,
              "failed" : 0
            },
            "_seq_no" : 1,
            "_primary_term" : 1,
            "status" : 201
          }
        }
      ]
    }
    

    【案例二】对整个ES进行批量操作

    POST /_bulk
    {"delete": {"_index": "website", "_type": "blog", "_id": "123"}}
    {"create": {"_index": "website", "_type": "blog", "_id": "123"}}
    {"title": "My first blog post"}
    {"index": {"_index": "website", "_type": "blog", "_id": "123"}}
    {"title": "My second blog post"}
    {"update": {"_index": "website", "_type": "blog", "_id": "123"}}
    {"doc": {"title": "My updated blog post"}}
    

    我这里不小心执行了两次这个批量操作

    返回结果:

    #! [types removal] Specifying types in bulk requests is deprecated.
    {
      "took" : 6,
      "errors" : false,
      "items" : [
        {
          "delete" : {
            "_index" : "website",
            "_type" : "blog",
            "_id" : "123",
            "_version" : 5,
            "result" : "deleted",
            "_shards" : {
              "total" : 2,
              "successful" : 1,
              "failed" : 0
            },
            "_seq_no" : 4,
            "_primary_term" : 1,
            "status" : 200
          }
        },
        {
          "create" : {
            "_index" : "website",
            "_type" : "blog",
            "_id" : "123",
            "_version" : 6,
            "result" : "created",
            "_shards" : {
              "total" : 2,
              "successful" : 1,
              "failed" : 0
            },
            "_seq_no" : 5,
            "_primary_term" : 1,
            "status" : 201
          }
        },
        {
          "index" : {
            "_index" : "website",
            "_type" : "blog",
            "_id" : "123",
            "_version" : 7,
            "result" : "updated",
            "_shards" : {
              "total" : 2,
              "successful" : 1,
              "failed" : 0
            },
            "_seq_no" : 6,
            "_primary_term" : 1,
            "status" : 200
          }
        },
        {
          "update" : {
            "_index" : "website",
            "_type" : "blog",
            "_id" : "123",
            "_version" : 8,
            "result" : "updated",
            "_shards" : {
              "total" : 2,
              "successful" : 1,
              "failed" : 0
            },
            "_seq_no" : 7,
            "_primary_term" : 1,
            "status" : 200
          }
        }
    
  • 相关阅读:
    CSS3权威指南 25.CSS3中的动画功能
    CSS3权威指南 24.CSS3中的变形处理
    CSS3权威指南 23.背景与边框相关样式
    CSS3权威指南 22.盒相关样式
    CSS3权威指南 20.使用选择器在页面中插入内容
    CSS3权威指南 19.选择器
    vivado中如何使用chipscope
    示波器X1探头和X10探头
    两个MMCM共享时钟输入时的严重警告和错误
    ZYNQ基础知识一
  • 原文地址:https://www.cnblogs.com/musecho/p/15179976.html
Copyright © 2011-2022 走看看