elasticsearch 文档更新操作:update和update_by_query
API:
(elasticsearch版本7.3)
POST /<index>/_update/<_id> POST /<index>/_update_by_query
1. POST /<index>/_update/<_id>
- 支持脚本,可以更新、删除或跳过修改文档。
- 更新文档部分内容,传递部分文档,将其合并到现有文档中。
#测试--post/update 脚本修改文档
POST /king_test_person/_update/223
{
"script" : {
"source": "ctx._source.birthday = params.birthday",
"lang": "painless",
"params" : {
"birthday" : "2023-10-01"
}
}
}

#测试--post/update 部分修改文档
POST /king_test_person/_update/223
{
"doc": {
"name": "王五6"
}
}

2. POST /<index>/_update_by_query
- 批量修改匹配到查询条件的文档
- 修改mapping结构
2.1 没有查询条件,全部修改
#测试--_update_by_query
POST /king_test_person/_update_by_query
{
"script": {
"source": "ctx._source.sex='女'",
"lang": "painless"
}
}
}
总共8条数据,更新8条数据

2.2 有查询条件,修改匹配的文档
只修改name=王五4 的数据。
#测试--_update_by_query
POST /king_test_person/_update_by_query
{
"script": {
"source": "ctx._source.sex='男'",
"lang": "painless"
},
"query":{
"term": {
"name": "王五4"
}
}
}

3. 修改mapping
3.1 按查询条件修改
给id=223的文档,添加地址
#测试--_update_by_query 修改mapping结构
POST /king_test_person/_update_by_query
{
"script": {
"source": "ctx._source['address'] = \"四川省成都市\"",
"lang": "painless"
},
"query":{
"term": {
"_id": 223
}
}
}

查询可以看到,只有id=223的文档有属性address

3.2 全部修改
不加查询限制,会更新所有文档
#测试--_update_by_query 修改mapping结构
POST /king_test_person/_update_by_query
{
"script": {
"source": "ctx._source['address'] = \"四川省成都市\"",
"lang": "painless"
}
}


浙公网安备 33010602011771号