Elasticsearch 中 _update_by_query 和 _delete_by_query

_update_by_query

更新数据

将_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

  • 需要更新的字段在脚本source中罗列
  • 需要更新的值在params中罗列

高阶使用

执行一个脚本来增加计数器

POST test/_doc/1/_update
{
    "script" : {
        "source": "ctx._source.counter += params.count",    //表示给_source里面的counter属性赋值,并且可以使用params中的一些临时参数
        "lang": "painless",
        "params" : {            //临时参数
            "count" : 4
        }
    }
}

给tags属性添加一个值

{
    "script" : {
        "source": "ctx._source.tags.add(params.tag)",
        "lang": "painless",
        "params" : {
            "tag" : "blue"
        }
    }
}

tags属性中删除一个元素

我们可以从tags属性中删除一个元素。 请注意,为了避免运行时错误需要先判断是否存在待删除的元素。 请注意,如果tag在tags列表中出现的次数超过一次,则只会删除一次该标签:

{
    "script" : {
        "source": "if (ctx._source.tags.contains(params.tag)) { ctx._source.tags.remove(ctx._source.tags.indexOf(params.tag)) }",   //先判断是否存在
        "lang": "painless",
        "params" : {
            "tag" : "blue"   //删除blue,此时只剩下red了
        }
    }
}

_delete_by_query

POST wkl_test/_delete_by_query
{
  "query": {
    "match_all": {}
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

苍煜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值