ES: 数据增,删,改,批量操作

这篇具有很好参考价值的文章主要介绍了ES: 数据增,删,改,批量操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1> 指定id 新增

_id =1 新增一条.

此命令重复执行,就是更新id=1的数据

POST employee_zcy/_doc/1
{
    "uid" : "1234",
    "phone":"12345678909",
    "message" : "qq",
    "msgcode" : "1",
    "sendtime":"2019-03-14 01:57:04",
    "saymessage":"zcy11111111111"
}

2> 不指定id 新增

_id是随机的字符串

此命令重复执行,就是不断新增

POST projecy_zcy/_doc
{
  "projectCode":"31000012",
  "projectName":"xxxx12"
    
}
下面的示例不指定id,则返回的数据中id是随机的字符串;

3>  指定id更新

更新整个文档, 和新增一样

POST employee_zcy/_doc/1
{
    "uid" : "1234",
    "phone":"12345678909",
    "message" : "qq",
    "msgcode" : "1",
    "sendtime":"2019-03-14 01:57:04",
    "saymessage":"zcy11111111111"
}


POST employee_zcy/_doc/1
{
    "uid" : "1234567"
   
}

那么文档1的内容就:
{
    "uid" : "1234567"
   
}

4> 按照id,更新文档中部分字段

POST employee_zcy/_update/3
{
   "doc" : {
  "message":"qq456222",
  "age":13
   }
}

修改了id是3的 message,

结果:
修改了主键=3的中message 为 qq456111, 新增了age字段

5> 按照id, 使用脚本更新部分字段,支持参数param,支持拼接更新

POST projecy_zcy/_update/10
{
  "script": {
    "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName ",
    "params": {
      "personName":"zcy"
    }
  }
  
}

修改_id=10的, projectCode的值, 新增projectPerson的,可以用参数变量进行字符处理

POST projecy_zcy/_update/4
{

  "script": {
    "source": "ctx._source['message'] = '123'; ctx._source.age=14"
  }
}

6> 按照id, 使用脚本删除字段

POST projecy_zcy/_update/10
{
  "script": {
    "source": "ctx._source.remove('projectPerson')"
  }
  
}

7> 根据条件修改, 多条数据更新, 更改部分字段

POST employee_zcy/_update_by_query
{
  "query": {
    "term": {
      "phone": "12345678909"
    }
  } ,
  "script": {
    "source": "ctx._source['message'] = '1234566666'"
  }
}

-- 搜索projectName like 管理域 , 增加flag值
POST projecy_zcy/_update_by_query
{
   "query": {
   "match": {
     "projectName": "管理域"
   }
  },
  "script":{
    "source":"ctx._source.flag='abc'"
  }
 
}

8> 按照id, 更新不存在的

此id,不存在,会报错

POST projecy_zcy/_update/16
{
  "script": {
    "source": "ctx._source.projectCode=1234567 ",
    "params": {
      "personName":"zcy"
    }
  }
}

报错:
{
        "type" : "document_missing_exception",
        "reason" : "[_doc][16]: document missing",
        "index_uuid" : "P--CS2RRStmmvjoicjFnmw",
        "shard" : "0",
        "index" : "projecy_zcy"

如何不报错? 我们可以使用 upsert 参数,指定如果文档不存在就应该先创建它

POST projecy_zcy/_update/15
{
  "script": {
    "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName ",
    "params": {
      "personName":"zcy"
    }
  },
  "upsert": {"projectCode":234,"projectPerson":"345"}
  
}

id=15 不存在, 先初始化projectCode, projectPerson 
第一次执行:
{
        "_index" : "projecy_zcy",
        "_type" : "_doc",
        "_id" : "15",
        "_score" : 1.0,
        "_source" : {
          "projectCode" : 234,
          "projectPerson" : "345"
        }
 }

第二次执行:
{
        "_index" : "projecy_zcy",
        "_type" : "_doc",
        "_id" : "15",
        "_score" : 1.0,
        "_source" : {
          "projectCode" : 1234567,
          "projectPerson" : "345zcy"
        }
      }

9> 按照条件,无匹配的更新

不好报错, 没有任何数据更新, 和关系数据库一样

10> 统一脚本

POST projecy_zcy/_update/15
{
  "script": {
    "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName ",
    "params": {
      "personName":"zcy"
    }
  },
  "upsert": {"projectCode":234,"projectPerson":"345"}
  
}

优化: 
1.需要先将脚本post到es的库中,新建zcy_message,脚本名称
POST _scripts/zcy_script1
{
  "script":{
    "lang":"painless",
    "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName "
  }
}

lang: 必须有,否则报错
params: 不需要放, 放了也不生效

2.根据id来调用
POST projecy_zcy/_update/15
{
  "script": {
    "id": "zcy_script1",
    "params": {
      "personName":"aaa"
    }
  }, 
  "upsert": {"projectCode":234,"projectPerson":"345"}
  
}

11> 根据主键删除数据

DELETE employee_zcy/_doc/1

注意_doc 就是type的值, 插数据时候指定的 
POST employee_zcy/_doc/1

2>根据条件删除数据

POST employee_zcy/_delete_by_query
{
  "query":{
    "term":{
      "phone":"12345678909"
    }
  }
}

12>bulk的操作

  • create 如果文档不存在就创建,但如果文档存在就返回错误
  • index 如果文档不存在就创建,如果文档存在就更新
  • update 更新一个文档,如果文档不存在就返回错误
  • delete 删除一个文档,如果要删除的文档id不存在,就返回错误

 其实可以看得出来index是比较常用的。还有bulk的操作,某一个操作失败,是不会影响其他文档的操作的,它会在返回结果中告诉你失败的详细的原因。文章来源地址https://www.toymoban.com/news/detail-780777.html

>> 批量新增

POST projecy_zcy/_bulk
{"index":{"_id":1}}
{"id":1,"name":"admin","counter":"10","tags":["red","black"]}
{"index":{"_id":2}}
{"id":2,"name":"zcy"}

>> 批量修改

POST projecy_zcy/_bulk
{"update":{"_id":1}}
{"script":{"source":"ctx._source.name='www'"}}
{"update":{"_id":1}}
{"script":{"source":"ctx._source.name='zzzz'"}}

 >> 批量删除

POST projecy_zcy/_bulk
{"delete":{"_id":2}}
{"delete":{"_id":1}}

到了这里,关于ES: 数据增,删,改,批量操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES批量上传数据 - Python操作ES

    2024年02月11日
    浏览(31)
  • 解决在使用 Elasticsearch(ES)多线程批量操作时导致并发一致性的问题!!

    先说一下什么是数据库数据库中 并发一致性 问题! 1、在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。 数据丢失 T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。 读脏数据 T1 修改一个数据,T2 随后读取

    2024年02月04日
    浏览(45)
  • ES搜索引擎入门+最佳实践(九):项目实战(二)--elasticsearch java api 进行数据增删改查

            本篇是这个系列的最后一篇了,在这之前可以先看看前面的内容: ES搜索引擎入门+最佳实践(一)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(二)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(三)_flame.liu的博客-CSDN博客 ES搜索引擎入门+最佳实践(四)_flame.liu的博客

    2024年02月12日
    浏览(48)
  • ES: 数据增,删,改,批量操作

    1 指定id 新增 _id =1 新增一条. 此命令重复执行,就是更新id=1的数据 2 不指定id 新增 _id是随机的字符串 此命令重复执行,就是不断新增 3  指定id更新 更新整个文档, 和新增一样 4 按照id,更新文档中部分字段 5 按照id, 使用脚本更新部分字段,支持参数param,支持 拼接更新 6 按照id,

    2024年02月02日
    浏览(28)
  • 使用Logstash同步mysql数据到Elasticsearch(亲自踩坑)_将mysql中的数据导入es搜索引擎利用logstash(1)

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新大数据全套学习资料》,

    2024年04月28日
    浏览(43)
  • ElasticSearch内容分享(四):ES搜索引擎

    目录 ES搜索引擎 1. DSL设置查询条件 1.1 DSL查询分类 1.2 全文检索查询 1.2.1 使用场景 1.2.2 match查询 1.2.3 mulit_match查询 1.3 精准查询 1.3.1 term查询 1.3.2 range查询 1.4 地理坐标查询 1.4.1 矩形范围查询 1.4.2 附近(圆形)查询 1.5 复合查询 1.5.0 复合查询归纳 1.5.1 相关性算分 1.5.2 算分函数查

    2024年02月05日
    浏览(44)
  • elasticsearch(ES)分布式搜索引擎03——(RestClient查询文档,ES旅游案例实战)

    文档的查询同样适用昨天学习的 RestHighLevelClient对象,基本步骤包括: 1)准备Request对象 2)准备请求参数 3)发起请求 4)解析响应 我们以match_all查询为例 3.1.1.发起查询请求 代码解读: 第一步,创建 SearchRequest 对象,指定索引库名 第二步,利用 request.source() 构建DSL,DSL中可

    2024年02月07日
    浏览(44)
  • ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案

    本文是ElasticSearch第三讲,在了解ElaticSearch之后,我们还要了解Elastic背后的生态 即我们 常说的ELK ;与此同时,还会给你展示ElasticSearch的 案例场景 ,让你在学习ES前对它有个全局的印象。 Beats + Logstash + ElasticSearch + Kibana 如下是我从官方博客中找到图,这张图展示了ELK生态以

    2024年02月07日
    浏览(30)
  • 入门ElasticSearch :为什么选择ES作为搜索引擎?

    随着数据量的不断增长,搜索和分析大规模数据集变得越来越重要。传统数据库在面对这种需求时往往表现不佳,这时候就需要一种专门用于搜索和分析的引擎。ElasticSearch (简称ES)就是这样一款强大的搜索引擎,它具有许多优势,使得它成为许多企业和开发者的首选。 简

    2024年02月09日
    浏览(39)
  • 搜索引擎elasticsearch :安装elasticsearch (包含安装组件kibana、IK分词器、部署es集群)

    kibana可以帮助我们方便地编写DSL语句,所以还要装kibana 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: 这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大,接近1G。不建议大家自己pull。 课前资料提供了镜像的tar包: 大家将

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包