您的位置:首页 > 游戏 > 游戏 > Elasticsearch 中 _update_by_query 和 _delete_by_query

Elasticsearch 中 _update_by_query 和 _delete_by_query

2025/2/12 21:00:35 来源:https://blog.csdn.net/qq_41694906/article/details/140696767  浏览:    关键词:Elasticsearch 中 _update_by_query 和 _delete_by_query

文章目录

  • _update_by_query
    • 更新数据
    • 高阶使用
      • 执行一个脚本来增加计数器
      • 给tags属性添加一个值
      • tags属性中删除一个元素
  • _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": {}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com