ElasticSearch 条件更新 删除
ElasticSearch根据匹配某个条件,局部更新文档
首先声明版本为ES 6.0。
index中有很多文档,要更新这些文档中符合某个条件的所有documents,可以使用ES的_update_by_query的及脚本方式完成:POST请求:http://localhost:9200/indexName/typeName/_update_by_query
{
"script": {"source":"ctx._source['user_name']='LsiuLi';ctx._source['assignedto_id']='123';"},
"query": {"term": {"user_id": 60}}
}
执行上面的query,意思是把当前index/type下的所有符合user_id为 60的document,把这些document的user_name字段全部修改成LsiuLi,把assignedto_id 改成123。
如果增加数组元素:
http://localhost:9200/1909_user/user/15670260/_update
{
"script": {
"lang": "painless",
"source":"ctx._source['field_mult_value_7917'].add(params.hobby)",
"params" : {
"hobby" : "c"
}
}
}
script 删除index中的field:
http://localhost:9200/1542_case/case/_update_by_query?wait_for_completion=false&conflicts=proceed
{
"script": {"source":"ctx._source.remove('user_field_email_5613')"}
}
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,添加数据
- $ curl -XPOST "http://127.0.0.1:9200/ik_v2/chinese/3?pretty" -H "Content-Type: application/json" -d '
- {
- "id" : 3,
- "username" : "测试测试",
- "description" : "测试测试"
- }'
2,更新数据
2.1,部分数据更新
- $ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
- "doc" : {
- "username" : "testtest"
- }
- }
- }'
- $ curl -XGET "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"
- {
- "_index" : "ik_v2",
- "_type" : "chinese",
- "_id" : "3",
- "_version" : 1,
- "found" : true,
- "_source" : {
- "id" : 3,
- "username" : "testtest", //部分更新了
- "description" : "测试测试"
- }
- }
2.2,全部更新
- curl -XPOST "http://127.0.0.1:9200/ik_v2/chinese/3?pretty" -H "Content-Type: application/json" -d '
- {
- "id" : 4,
- "username" : "111111111",
- "description" : "222222222"
- }'
- //id为3的数据全部更新了
- $ curl -XGET "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"
- {
- "_index" : "ik_v2",
- "_type" : "chinese",
- "_id" : "3",
- "_version" : 1,
- "found" : true,
- "_source" : {
- "id" : 4,
- "username" : "111111111",
- "description" : "222222222"
- }
- }
2.3,拼接更新
- $ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
- "script" : {
- "inline" : "ctx._source.description += params.content", //因为description是string型,所以是拼
- "params" : {
- "content" : 333
- }
- }
- }'
- $ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
- "script" : {
- "inline" : "ctx._source.id += params.num", //因为id是int型,所以是加
- "params" : {
- "num" : 2
- }
- }
- }'
- $ curl -XGET "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"
- {
- "_index" : "ik_v2",
- "_type" : "chinese",
- "_id" : "3",
- "_version" : 3,
- "found" : true,
- "_source" : {
- "id" : 6, //加了2
- "username" : "111111111",
- "description" : "222222222333" //拼了333
- }
- }
2.4,添加字段,并更新数据
- //添加一个字段为sex值为1
- $ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
- "script" : "ctx._source.sex = 1"
- }'
- //删除sex这个字段
- $ curl -XPOST 'localhost:9200/ik_v2/chinese/3/_update?pretty' -H "Content-Type: application/json" -d '{
- "script" : "ctx._source.remove(\"sex\")"
- }'
在这里要注意,用这个方法,mapping结构会改变。
注:以上的更新操作都是单条数据更新
2.5,多条数据更新
- $ curl -XPOST 'localhost:9200/ik_v2/test/_update_by_query?pretty' -H "Content-Type: application/json" -d '{
- > "query": {
- > "bool": {
- > "should": {
- > "match": {
- > "username": "高铁"
- > }
- > }
- > }
- > },
- > "script" : {
- > "inline" : "ctx._source.username = \"666666\""
- > }
- > }'
- {
- "took" : 6,
- "timed_out" : false,
- "total" : 3,
- "updated" : 2, //更新了二条
- "deleted" : 0,
- "batches" : 1,
- "version_conflicts" : 0,
- "noops" : 0,
- "retries" : {
- "bulk" : 0,
- "search" : 0
- },
- "throttled_millis" : 0,
- "requests_per_second" : -1.0,
- "throttled_until_millis" : 0,
- "failures" : [ ]
- }
注意,这个条件字段,最好不要用分词字段,因为不可控。上面我只是为了测试用。
3,删除数据
3.1,单条删除
- $ curl -XDELETE "http://127.0.0.1:9200/ik_v2/chinese/3?pretty"
3.2,多条数据删除
- $ curl -XPOST 'http://127.0.0.1:9200/ik_v2/_delete_by_query?pretty' -H "Content-Type: application/json" -d '{
- > "query": {
- > "term": {
- > "username": "666666"
- > }
- > }
- > }'
- {
- "took" : 6,
- "timed_out" : false,
- "total" : 3,
- "deleted" : 2, //删除了二条
- "batches" : 1,
- "version_conflicts" : 0,
- "noops" : 0,
- "retries" : {
- "bulk" : 0,
- "search" : 0
- },
- "throttled_millis" : 0,
- "requests_per_second" : -1.0,
- "throttled_until_millis" : 0,
- "failures" : [ ]
- }
注意,这个条件字段,最好不要用分词字段,因为不可控。
4,查询
- $ curl -XPOST "http://127.0.0.1:9200/ik,ik_v2/chinese/_search?pretty" -H "Content-Type: application/json" -d '
- {
- "query": {
- "multi_match": {
- "query": "中国高铁",
- "fields": [ "username", "description"]
- }
- }
- }
- '
查询的操作,非常多,后面会单独的详细说。查询总的来说,支持多索引多字段查询。新版es不支持一个索引多个mapping,老版还支持多mapping查询。
ElasticSearch 条件更新 删除相关推荐
- Elasticsearch根据条件进行删除索引命令
以前都是按照索引中文档的id进行删除,其实Elasticsearch支持按照条件进行删除操作: 删除索引中某个type的符合条件记录: curl -XDELETE http://localhost:9 ...
- Elasticsearch 2.0以上版本根据条件批量删除Java如何实现
本文转载自:http://blog.csdn.net/u014039577/article/details/51802078,仅为了个人收藏,请支持原创作者. Elasticsearch在2.0以前版 ...
- 红橙Darren视频笔记 条件查询 删除 更新,数据库结合http做缓存机制(数据库操作)下
查询 更新 删除的实现 修改IDaoSupport接口部分 删除查询部分 增加返回查询支持类接口 增加删除更新的接口 // 获取专门查询的支持类 按照语句查询QuerySupport<T> ...
- Elasticsearch Java REST高级客户端 条件更新 updateQuery
Elasticsearch Java REST高级客户端 条件更新 updateQuery Elasticsearch 7.2.0 1.条件更新 2.客户端创建 3.maven配置-pom 对人工智能 ...
- 一文教会你Elasticsearch的更新操作(Updata与Updata by Query)
目录 前言 Update API 使用部分文档进行更新 Updata by Query API 前言 Elasticsearch操作中,最常用的就是搜索和更新操作了.之前介绍了Elasticsearc ...
- [WCF REST] 解决资源并发修改的一个有效的手段:条件更新(Conditional Update)
条件获取(Conditional Update)可以避免相同数据的重复传输,进而提高性能.条件更新(Conditional Update)用于解决资源并发操作问题.如果我们预先获取一个资源进行修改或者 ...
- ajax添加和删除数据,ajax 添加 更新 删除数据库
ajax 添加 更新 删除数据库 内容精选 换一换 云审计服务(Cloud Trace Service,CTS)记录了数据安全中心相关的操作事件,方便用户日后的查询.审计和回溯,具体请参见云审计服务用 ...
- PHP elasticsearch 条件过滤、排序、高亮实现
php在做搜索引擎时,进程要对结果进行筛选,所以我们这里记录一下elasticsearch 条件过滤.排序.高亮实现.在创建索引时如果使用了mapping映射,请将要过滤和排序的字段index设置为t ...
- PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆...
PHP中Cookie的使用---添加/更新/删除/获取Cookie 及 自动填写该用户的用户名和密码和判断是否第一次登陆 什么是cookie 服务器在客户端保存用户的信息,比如登录名,密码等 这些数 ...
最新文章
- 都在抢论文第一作者,怎么解决?
- 他们提出了一个大胆的猜想:GWT(深度学习)→通用人工智能
- TCP/IP 四次断开
- WinFormsUI(转xiaisidinen)
- springmvc执行流程(简述易懂)
- SpringBoot+Redis(实现处理热点数据)
- Stream流中的常用方法_count
- asp.net 2中的图片上传
- 入坑 Electron 开发跨平台桌面应用
- Javascript 调试技巧
- LeetCode 330. 按要求补齐数组(贪心)
- 错误: 非法字符: ‘\ufeff‘ 解决方案
- 三个流行MySQL分支的对比
- java pdfptable_java Itext PDF 导出 table | 学步园
- tika获取压缩文件内容
- 采用ArcGIS 10.6制作漂亮的点阵世界地图,完美!!!
- 快解析 : 管家婆A8远程访问解决方案
- 数据结构和算法的区别
- [转载]AI教师正来势汹汹,教师饭碗堪优
- 模型组合方法-boosting算法详解(机器学习面试必备)
热门文章
- Linux内核文件vmlinux 和压缩后的bzImage文件格式分析
- bluez 设置绑定pin码_国家工信部紧急提醒:一定要设置这个密码!
- 如何用Git拉取远程分支代码
- java调用百度推送详解,关于百度推送,请教一下大家
- java编译POSTGRESQL_Java连接PostgreSQL数据库(安装环境 + 简易测试代码)
- vba mysql odbc_使用VBA+ODBC+MySQL实现Excel网络版
- Android字体占有内存,android随意创建字体对象引发的应用程序运行时占用内存过大...
- log4j2的核弹漏洞是如何被发现的?
- Spring Boot 实现扫码登录,这种方式太香了!!
- 别再乱用 Prometheus 联邦了,分享一个 Prometheus 高可用新方案