es 版本为7.9.3
_update_by_query 的应用场景
- 1、修改一个字段的值
- 给es里某个字段增加一个子类型,要求之前的数据也能被查询到
造数据
POST test
{
"mappings" : {
"properties" : {
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
POST test/_doc/1
{
"name": "chb",
"age": "20"
}
POST test/_doc/2
{
"name": "ling",
"age": 18
}
POST test/_doc/3
{
"name": "旺仔",
"age": 1
}
POST test/_doc/4
{
"name": "李四"
}
1、修改一个字段的值
# 修改李四的年龄为44
POST test/_update_by_query
{
"script": {
"source": "ctx._source.age = 44",
"lang": "painless"
},
"query": {
"bool": {
"must_not": [
{
"exists": {
"field": "age"
}
}
]
}
}
}
2、 给es里某个字段增加一个子类型,要求之前的数据也能被查询到
修改mapping,添加一个子字段
POST test/_mapping
{
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
},
"ik_smart": {
"type": "text",
"analyzer": "ik_smart"
}
}
}
}
}
插入一条新的数据
PUT test/_doc/5
{
"name": "王五",
"age": 35
}
查询 李四,王五,发现查不到李四
GET test/_search
{
"query": {
"match": {
"name.ik_smart": "李四"
}
}
}
GET test/_search
{
"query": {
"match": {
"name.ik_smart": "王五"
}
}
}
因为李四是 更改mapping之前插入,新增字段没有在老数据上生效,导致查询不出
为了之前的数据也能被查询到,我们通过 _update_by_query文章来源:https://www.toymoban.com/news/detail-506433.html
POST test/_update_by_query
结果可以查询
文章来源地址https://www.toymoban.com/news/detail-506433.html
到了这里,关于ES: update by query的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!