(37)ElasticSearch基于groovy脚本执行partial update
Posted javasl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(37)ElasticSearch基于groovy脚本执行partial update相关的知识,希望对你有一定的参考价值。
1、准备数据
PUT /lib/user/1 { "first_name":"Jane", "last_name":"Smith", "age":32, "about":"I like to collect rock albums", "interests":[ "music" ] }
2、操作演示
(1)age增加1
GET /lib/user/1/_update { "script":"ctx._source.age+=1" }
查看结果:GET /lib/user/1
{ "_index": "lib", "_type": "user", "_id": "1", "_version": 2, "found": true, "_source": { "first_name": "Jane", "last_name": "Smith", "age": 33, "about": "I like to collect rock albums", "interests": [ "music" ] } }
(2)改变last_name的值
GET /lib/user/1/_update { "script":"ctx._source.last_name+=‘hehe‘" }
查看结果:GET /lib/user/1
{ "_index": "lib", "_type": "user", "_id": "1", "_version": 3, "found": true, "_source": { "first_name": "Jane", "last_name": "Smithhehe", "age": 33, "about": "I like to collect rock albums", "interests": [ "music" ] } }
3)增加一个interests
GET /lib/user/1/_update { "script":{ "source":"ctx._source.interests.add(params.tag)", "params":{ "tag":"football" } } }
查看结果:GET /lib/user/1
{ "_index": "lib", "_type": "user", "_id": "1", "_version": 4, "found": true, "_source": { "first_name": "Jane", "last_name": "Smithhehe", "age": 33, "about": "I like to collect rock albums", "interests": [ "music", "football" ] } }
4)删除一个interests
GET /lib/user/1/_update { "script":{ "source":"ctx._source.interests.remove(ctx._source.interests.indexOf(params.tag))", "params":{ "tag":"football" } } }
查看结果:GET /lib/user/1
{ "_index": "lib", "_type": "user", "_id": "1", "_version": 5, "found": true, "_source": { "first_name": "Jane", "last_name": "Smithhehe", "age": 33, "about": "I like to collect rock albums", "interests": [ "music" ] } }
5)删除该文档,删除年龄为33的文档
GET /lib/user/1/_update { "script":{ "source":"ctx.op=ctx._source.age==params.count?‘delete‘:‘none‘", "params":{ "count":33 } } }
查看结果:GET /lib/user/1
{ "_index": "lib", "_type": "user", "_id": "1", "found": false }
6)有该文档的话给age增加1,没有添加一个文档
GET /lib/user/1/_update { "script":"ctx._source.age+=1", "upsert":{ "first_name": "Jane", "last_name": "Smith", "age": 18, "about": "I like to collect rock albums", "interests": [ "music" ] } }
查看结果:GET /lib/user/1
{ "_index": "lib", "_type": "user", "_id": "1", "_version": 1, "found": true, "_source": { "first_name": "Jane", "last_name": "Smith", "age": 18, "about": "I like to collect rock albums", "interests": [ "music" ] } }
以上是关于(37)ElasticSearch基于groovy脚本执行partial update的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch的Groovy Script自定义评分检索
ElasticSearch:在禁用 Groovy 的 _score 字段上进行聚合
如何使用Elasticsearch groovy script脚本更新数据