执行部分更新(partial update)

创建一条初始数据

PUT /test_index/test_type/12
{
  "num": 0,
  "tags": []
}

内置脚本方式

更新

POST /test_index/test_type/12/_update
{
   "script" : "ctx._source.num+=1"
}

查询

GET  /test_index/test_type/12

返回结果

{
  "_index": "test_index",
  "_type": "test_type",
  "_id": "12",
  "_version": 2,
  "found": true,
  "_source": {
    "num": 1,
    "tags": []
  }
}

外置脚本方式

建立脚本文件,在elasticsearch的\xxxx\config\scripts\目录下创建名字为test-add-tags.groovy的文件

并加入一下内容

执行更新:

返回结果

查询

返回结果:

脚本方式:删除文档

建立脚本文件,在elasticsearch的\xxxx\config\scripts\目录下创建名字为test-delete-document.groovy的文件

并加入一下内容

执行更新:

返回结果 (successful = 1 删除成功)

查询

返回结果:

脚本方式:更新文档

由于经过上一步的文档删除,id=12 的文档已经被删除.所以使用原始的部分更新(partial update)操作将会报错

返回结果:

进一步使用脚本方式改进:如果指定的document不存在,就执行upsert中的初始化操作;如果指定的document存在,就执行doc或者script指定的partial update操作

返回结果:

Last updated

Was this helpful?