当前位置:   article > 正文

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

es更新数据

1> 指定id 新增

_id =1 新增一条.

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

  1. POST employee_zcy/_doc/1
  2. {
  3. "uid" : "1234",
  4. "phone":"12345678909",
  5. "message" : "qq",
  6. "msgcode" : "1",
  7. "sendtime":"2019-03-14 01:57:04",
  8. "saymessage":"zcy11111111111"
  9. }

2> 不指定id 新增

_id是随机的字符串

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

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

3>  指定id更新

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

  1. POST employee_zcy/_doc/1
  2. {
  3. "uid" : "1234",
  4. "phone":"12345678909",
  5. "message" : "qq",
  6. "msgcode" : "1",
  7. "sendtime":"2019-03-14 01:57:04",
  8. "saymessage":"zcy11111111111"
  9. }
  10. POST employee_zcy/_doc/1
  11. {
  12. "uid" : "1234567"
  13. }
  14. 那么文档1的内容就:
  15. {
  16. "uid" : "1234567"
  17. }

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

  1. POST employee_zcy/_update/3
  2. {
  3. "doc" : {
  4. "message":"qq456222",
  5. "age":13
  6. }
  7. }
  8. 修改了id是3的 message,
  9. 结果:
  10. 修改了主键=3的中message 为 qq456111, 新增了age字段

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

  1. POST projecy_zcy/_update/10
  2. {
  3. "script": {
  4. "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName ",
  5. "params": {
  6. "personName":"zcy"
  7. }
  8. }
  9. }
  10. 修改_id=10的, projectCode的值, 新增projectPerson的,可以用参数变量进行字符处理
  11. POST projecy_zcy/_update/4
  12. {
  13. "script": {
  14. "source": "ctx._source['message'] = '123'; ctx._source.age=14"
  15. }
  16. }

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

  1. POST projecy_zcy/_update/10
  2. {
  3. "script": {
  4. "source": "ctx._source.remove('projectPerson')"
  5. }
  6. }

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

  1. POST employee_zcy/_update_by_query
  2. {
  3. "query": {
  4. "term": {
  5. "phone": "12345678909"
  6. }
  7. } ,
  8. "script": {
  9. "source": "ctx._source['message'] = '1234566666'"
  10. }
  11. }
  12. -- 搜索projectName like 管理域 , 增加flag值
  13. POST projecy_zcy/_update_by_query
  14. {
  15. "query": {
  16. "match": {
  17. "projectName": "管理域"
  18. }
  19. },
  20. "script":{
  21. "source":"ctx._source.flag='abc'"
  22. }
  23. }

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

此id,不存在,会报错

  1. POST projecy_zcy/_update/16
  2. {
  3. "script": {
  4. "source": "ctx._source.projectCode=1234567 ",
  5. "params": {
  6. "personName":"zcy"
  7. }
  8. }
  9. }
  10. 报错:
  11. {
  12. "type" : "document_missing_exception",
  13. "reason" : "[_doc][16]: document missing",
  14. "index_uuid" : "P--CS2RRStmmvjoicjFnmw",
  15. "shard" : "0",
  16. "index" : "projecy_zcy"

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

  1. POST projecy_zcy/_update/15
  2. {
  3. "script": {
  4. "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName ",
  5. "params": {
  6. "personName":"zcy"
  7. }
  8. },
  9. "upsert": {"projectCode":234,"projectPerson":"345"}
  10. }
  11. id=15 不存在, 先初始化projectCode, projectPerson
  12. 第一次执行:
  13. {
  14. "_index" : "projecy_zcy",
  15. "_type" : "_doc",
  16. "_id" : "15",
  17. "_score" : 1.0,
  18. "_source" : {
  19. "projectCode" : 234,
  20. "projectPerson" : "345"
  21. }
  22. }
  23. 第二次执行:
  24. {
  25. "_index" : "projecy_zcy",
  26. "_type" : "_doc",
  27. "_id" : "15",
  28. "_score" : 1.0,
  29. "_source" : {
  30. "projectCode" : 1234567,
  31. "projectPerson" : "345zcy"
  32. }
  33. }

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

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

10> 统一脚本

  1. POST projecy_zcy/_update/15
  2. {
  3. "script": {
  4. "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName ",
  5. "params": {
  6. "personName":"zcy"
  7. }
  8. },
  9. "upsert": {"projectCode":234,"projectPerson":"345"}
  10. }
  11. 优化:
  12. 1.需要先将脚本post到es的库中,新建zcy_message,脚本名称
  13. POST _scripts/zcy_script1
  14. {
  15. "script":{
  16. "lang":"painless",
  17. "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName "
  18. }
  19. }
  20. lang: 必须有,否则报错
  21. params: 不需要放, 放了也不生效
  22. 2.根据id来调用
  23. POST projecy_zcy/_update/15
  24. {
  25. "script": {
  26. "id": "zcy_script1",
  27. "params": {
  28. "personName":"aaa"
  29. }
  30. },
  31. "upsert": {"projectCode":234,"projectPerson":"345"}
  32. }

11> 根据主键删除数据

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

2>根据条件删除数据

  1. POST employee_zcy/_delete_by_query
  2. {
  3. "query":{
  4. "term":{
  5. "phone":"12345678909"
  6. }
  7. }
  8. }

12>bulk的操作

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

 其实可以看得出来index是比较常用的。还有bulk的操作,某一个操作失败,是不会影响其他文档的操作的,它会在返回结果中告诉你失败的详细的原因。

>> 批量新增

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

>> 批量修改

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

 >> 批量删除

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/67915
推荐阅读
相关标签
  

闽ICP备14008679号