ElasticSearch根据匹配某个条件,局部更新文档

首先声明版本为ES 6.0。

index中有很多文档,要更新这些文档中符合某个条件的所有documents,可以使用ES的_update_by_query的及脚本方式完成:POST请求:http://localhost:9200/indexName/typeName/_update_by_query

  1. {

  2. "script": {"source":"ctx._source['user_name']='LsiuLi';ctx._source['assignedto_id']='123';"},

  3. "query": {"term": {"user_id": 60}}

  4. }

执行上面的query,意思是把当前index/type下的所有符合user_id为 60的document,把这些document的user_name字段全部修改成LsiuLi,把assignedto_id 改成123。

如果增加数组元素:

http://localhost:9200/1909_user/user/15670260/_update

  1. {

  2. "script": {

  3. "lang": "painless",

  4. "source":"ctx._source['field_mult_value_7917'].add(params.hobby)",

  5. "params" : {

  6. "hobby" : "c"

  7. }

  8. }

  9. }

script 删除index中的field:

http://localhost:9200/1542_case/case/_update_by_query?wait_for_completion=false&conflicts=proceed

  1. {

  2. "script": {"source":"ctx._source.remove('user_field_email_5613')"}

  3. }

wait_for_completion=false可以直接返回http请求,哪怕index中的field还没删完。

参考链接:

https://www.elastic.co/guide/en/elasticsearch/reference/6.0/modules-scripting-using.html

https://www.cnblogs.com/rodge-run/p/7760308.html

elasticsearch 数据 添加,更新,删除,查询

上篇文章说了,elasticsearch mapping字段的增,删,更新。如果把mapping的修改理解成对数据结构的修改,那这篇文章就可以理解成对数据的修改。

1,添加数据

  1. $ curl -XPOST "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"  -H "Content-Type: application/json" -d '
  2. {
  3. "id" : 3,
  4. "username" :  "测试测试",
  5. "description" :  "测试测试"
  6. }'

2,更新数据

2.1,部分数据更新

  1. $ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
  2. "doc" : {
  3. "username" : "testtest"
  4. }
  5. }
  6. }'
  7. $ curl -XGET "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"
  8. {
  9. "_index" : "ik_v2",
  10. "_type" : "chinese",
  11. "_id" : "3",
  12. "_version" : 1,
  13. "found" : true,
  14. "_source" : {
  15. "id" : 3,
  16. "username" : "testtest",  //部分更新了
  17. "description" : "测试测试"
  18. }
  19. }

2.2,全部更新

  1. curl -XPOST "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"  -H "Content-Type: application/json" -d '
  2. {
  3. "id" : 4,
  4. "username" :  "111111111",
  5. "description" :  "222222222"
  6. }'
  7. //id为3的数据全部更新了
  8. $ curl -XGET "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"
  9. {
  10. "_index" : "ik_v2",
  11. "_type" : "chinese",
  12. "_id" : "3",
  13. "_version" : 1,
  14. "found" : true,
  15. "_source" : {
  16. "id" : 4,
  17. "username" : "111111111",
  18. "description" : "222222222"
  19. }
  20. }

2.3,拼接更新

  1. $ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
  2. "script" : {
  3. "inline" : "ctx._source.description += params.content", //因为description是string型,所以是拼
  4. "params" : {
  5. "content" : 333
  6. }
  7. }
  8. }'
  9. $ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
  10. "script" : {
  11. "inline" : "ctx._source.id += params.num",   //因为id是int型,所以是加
  12. "params" : {
  13. "num" : 2
  14. }
  15. }
  16. }'
  17. $ curl -XGET "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"
  18. {
  19. "_index" : "ik_v2",
  20. "_type" : "chinese",
  21. "_id" : "3",
  22. "_version" : 3,
  23. "found" : true,
  24. "_source" : {
  25. "id" : 6,   //加了2
  26. "username" : "111111111",
  27. "description" : "222222222333"   //拼了333
  28. }
  29. }

2.4,添加字段,并更新数据

  1. //添加一个字段为sex值为1
  2. $ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
  3. "script" : "ctx._source.sex = 1"
  4. }'
  5. //删除sex这个字段
  6. $ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
  7. "script" : "ctx._source.remove(\"sex\")"
  8. }'

在这里要注意,用这个方法,mapping结构会改变。

注:以上的更新操作都是单条数据更新

2.5,多条数据更新

  1. $ curl -XPOST 'localhost:9200/ik_v2/test/_update_by_query?pretty' -H "Content-Type: application/json" -d '{
  2. >  "query": {
  3. >         "bool": {
  4. >             "should": {
  5. >                 "match": {
  6. >                     "username": "高铁"
  7. >                 }
  8. >             }
  9. >         }
  10. >     },
  11. >     "script" : {
  12. >         "inline" : "ctx._source.username = \"666666\""
  13. >     }
  14. > }'
  15. {
  16. "took" : 6,
  17. "timed_out" : false,
  18. "total" : 3,
  19. "updated" : 2,  //更新了二条
  20. "deleted" : 0,
  21. "batches" : 1,
  22. "version_conflicts" : 0,
  23. "noops" : 0,
  24. "retries" : {
  25. "bulk" : 0,
  26. "search" : 0
  27. },
  28. "throttled_millis" : 0,
  29. "requests_per_second" : -1.0,
  30. "throttled_until_millis" : 0,
  31. "failures" : [ ]
  32. }

注意,这个条件字段,最好不要用分词字段,因为不可控。上面我只是为了测试用。

3,删除数据

3.1,单条删除

  1. $ curl -XDELETE "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"

3.2,多条数据删除

  1. $ curl -XPOST 'http://127.0.0.1:9200/ik_v2/_delete_by_query?pretty' -H "Content-Type: application/json" -d '{
  2. > "query": {
  3. >         "term": {
  4. >             "username": "666666"
  5. >         }
  6. >     }
  7. > }'
  8. {
  9. "took" : 6,
  10. "timed_out" : false,
  11. "total" : 3,
  12. "deleted" : 2,  //删除了二条
  13. "batches" : 1,
  14. "version_conflicts" : 0,
  15. "noops" : 0,
  16. "retries" : {
  17. "bulk" : 0,
  18. "search" : 0
  19. },
  20. "throttled_millis" : 0,
  21. "requests_per_second" : -1.0,
  22. "throttled_until_millis" : 0,
  23. "failures" : [ ]
  24. }

注意,这个条件字段,最好不要用分词字段,因为不可控。

4,查询

  1. $ curl -XPOST "http://127.0.0.1:9200/ik,ik_v2/chinese/_search?pretty"  -H "Content-Type: application/json"  -d '
  2. {
  3. "query": {
  4. "multi_match": {
  5. "query": "中国高铁",
  6. "fields": [ "username", "description"]
  7. }
  8. }
  9. }
  10. '

查询的操作,非常多,后面会单独的详细说。查询总的来说,支持多索引多字段查询。新版es不支持一个索引多个mapping,老版还支持多mapping查询。

ElasticSearch 条件更新 删除相关推荐

  1. Elasticsearch根据条件进行删除索引命令

    以前都是按照索引中文档的id进行删除,其实Elasticsearch支持按照条件进行删除操作: 删除索引中某个type的符合条件记录: curl -XDELETE http://localhost:9 ...

  2. Elasticsearch 2.0以上版本根据条件批量删除Java如何实现

    本文转载自:http://blog.csdn.net/u014039577/article/details/51802078,仅为了个人收藏,请支持原创作者. Elasticsearch在2.0以前版 ...

  3. 红橙Darren视频笔记 条件查询 删除 更新,数据库结合http做缓存机制(数据库操作)下

    查询 更新 删除的实现 修改IDaoSupport接口部分 删除查询部分 增加返回查询支持类接口 增加删除更新的接口 // 获取专门查询的支持类 按照语句查询QuerySupport<T> ...

  4. Elasticsearch Java REST高级客户端 条件更新 updateQuery

    Elasticsearch Java REST高级客户端 条件更新 updateQuery Elasticsearch 7.2.0 1.条件更新 2.客户端创建 3.maven配置-pom 对人工智能 ...

  5. 一文教会你Elasticsearch的更新操作(Updata与Updata by Query)

    目录 前言 Update API 使用部分文档进行更新 Updata by Query API 前言 Elasticsearch操作中,最常用的就是搜索和更新操作了.之前介绍了Elasticsearc ...

  6. [WCF REST] 解决资源并发修改的一个有效的手段:条件更新(Conditional Update)

    条件获取(Conditional Update)可以避免相同数据的重复传输,进而提高性能.条件更新(Conditional Update)用于解决资源并发操作问题.如果我们预先获取一个资源进行修改或者 ...

  7. ajax添加和删除数据,ajax 添加 更新 删除数据库

    ajax 添加 更新 删除数据库 内容精选 换一换 云审计服务(Cloud Trace Service,CTS)记录了数据安全中心相关的操作事件,方便用户日后的查询.审计和回溯,具体请参见云审计服务用 ...

  8. PHP elasticsearch 条件过滤、排序、高亮实现

    php在做搜索引擎时,进程要对结果进行筛选,所以我们这里记录一下elasticsearch 条件过滤.排序.高亮实现.在创建索引时如果使用了mapping映射,请将要过滤和排序的字段index设置为t ...

  9. PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆...

    PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆  什么是cookie 服务器在客户端保存用户的信息,比如登录名,密码等 这些数 ...

最新文章

  1. 都在抢论文第一作者,怎么解决?
  2. 他们提出了一个大胆的猜想:GWT(深度学习)→通用人工智能
  3. TCP/IP 四次断开
  4. WinFormsUI(转xiaisidinen)
  5. springmvc执行流程(简述易懂)
  6. SpringBoot+Redis(实现处理热点数据)
  7. Stream流中的常用方法_count
  8. asp.net 2中的图片上传
  9. 入坑 Electron 开发跨平台桌面应用
  10. Javascript 调试技巧
  11. LeetCode 330. 按要求补齐数组(贪心)
  12. 错误: 非法字符: ‘\ufeff‘ 解决方案
  13. 三个流行MySQL分支的对比
  14. java pdfptable_java Itext PDF 导出 table | 学步园
  15. tika获取压缩文件内容
  16. 采用ArcGIS 10.6制作漂亮的点阵世界地图,完美!!!
  17. 快解析 : 管家婆A8远程访问解决方案
  18. 数据结构和算法的区别
  19. [转载]AI教师正来势汹汹,教师饭碗堪优
  20. 模型组合方法-boosting算法详解(机器学习面试必备)

热门文章

  1. Linux内核文件vmlinux 和压缩后的bzImage文件格式分析
  2. bluez 设置绑定pin码_国家工信部紧急提醒:一定要设置这个密码!
  3. 如何用Git拉取远程分支代码
  4. java调用百度推送详解,关于百度推送,请教一下大家
  5. java编译POSTGRESQL_Java连接PostgreSQL数据库(安装环境 + 简易测试代码)
  6. vba mysql odbc_使用VBA+ODBC+MySQL实现Excel网络版
  7. Android字体占有内存,android随意创建字体对象引发的应用程序运行时占用内存过大...
  8. log4j2的核弹漏洞是如何被发现的?
  9. Spring Boot 实现扫码登录,这种方式太香了!!
  10. 别再乱用 Prometheus 联邦了,分享一个 Prometheus 高可用新方案