Elasticsearch 顶尖高手(19)—基于groovy脚本执行partial update
es,其实是有内置脚本支持的, 可以基于groovy脚本实现各种各样的复杂操作
基于groovy脚本,如何执行partial update
创建数据
PUT /test_index/test_type/11
{
"num":0,
"tags":[]
}
1.内置脚本
POST /test_index/test_type/11/_update
{
“script”:”cts._source.num+=1”
}
2.外部脚本
脚本存放路径 D:\elasticsearch-5.2.0\config\scripts
脚本内容
执行方式
POST /test_index/test_type/11/_update
{
"script": {
"lang": "groovy",
"file": "test-add-tags",
"params": {
"new_tag":"tag1"
}
}
}
返回结果
{
"_index": "test_index",
"_type": "test_type",
"_id": "11",
"_version": 3,
"found": true,
"_source": {
"num": 1,
"tags": [
"tag1"
]
}
}
3.用脚本删除文档
脚本内容:ctx.op = ctx._source.num == count?'delete':'none'
4.upsert操作
POST /test_index/test_type/11/_update
{
“script”:”ctx._source.num+=1”,
“upsert”:{
“num”:0
}
}
也就是,当更新的数据不存在时,update操作会报错。而upsert语句,当数据不存在时,初始化数据,并且更新数据