Elasticsearch 更新之update_by_query

我们可能会有更新文档的需求:

  • 更新记录中的某个字段值
  • 更新记录中的多个字段值

以下示例为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中罗列

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FightingFreedom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值