我们可能会有更新文档的需求:
- 更新记录中的某个字段值
- 更新记录中的多个字段值
以下示例为update_by_query的用法
1. 创建索引并提交mapping:
PUT /test1
PUT /test1/_mapping
{
"properties" : {
"userid" : {
"type" : "long"
},
"nickname" : {
"type" : "keyword"
},
"address" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
注:
- text类型:最大支持的字符长度无限制,支持分词、全文检索、支持模糊、精确查询、不支持聚合、排序操作 ;
- keyword类型:不进行分词,直接索引,支持模糊、精确匹配,支持聚合、排序等操作
导入数据:
POST _bulk
{"index" : { "_index" : "test1", "_id": "1"}}
{"userid":1,"nickname":"张一","address":"福建省厦门市思明区"}
{"index" : { "_index" : "test1", "_id": "2"}}
{"userid":2,"nickname":"张二","address":"福建省厦门市湖里区"}
{"index" : { "_index" : "test1", "_id": "3"}}
{"userid":3,"nickname":"张二","address":"福建省厦门市集美区"}
{"index" : { "_index" : "test1", "_id": "4"}}
{"userid":4,"nickname":"张四","address":"福建省厦门市海沧区"}
将_id 为 1的记录 userid 更新为5
POST /test1/_update_by_query
{
"query": {
"match": {
"_id": "1"
}
},
"script": {
"source": "ctx._source.userid = params.userid",
"params": {
"userid": 5
}
}
}
查询结果
将_id 为 2的记录 userid 更新为6,nickname更新为 "王二"
POST /test1/_update_by_query
{
"query": {
"match": {
"_id": "2"
}
},
"script": {
"source": "ctx._source.userid = params.userid;ctx._source.nickname = params.nickname",
"params": {
"userid": 6,
"nickname": "王二"
}
}
}
查询结果:
小结:
可以使用脚本在update API中用来改变_source字段的内容,它在更新脚本中称为:ctx._source
1. 需要更新的字段在脚本source中罗列
2. 需要更新的值在params中罗列