最近项目中用到了 es 搜索引擎 ,需求用到了 根据条件修改es 的字段数据 ,网上查了很久 很多都是 查询出要修改的id 然后再根据id 进行单个修改 这样太费事了
又看了看 es 是有批量修改的语法的

POST 索引名/_update_by_query
{
    "script": {
        "inline": "ctx._source['要修改的字段']='修改的值';"
    },
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "条件字段": "条件值"
                    }
                }
            ]
        }
    }
}

Java api 就这样写

     
     UpdateByQueryRequest request = new UpdateByQueryRequest("索引名");
                request.setQuery(new TermQueryBuilder("条件字段名","条件字段参数"));
                request.setScript(new Script("ctx._source['要修改的字段名']='要修改为的参数';"));
                restHighLevelClient.updateByQuery(request, RequestOptions.DEFAULT);

这样写 应该是有些缺陷的 但最总也实现了 类似于 sql 的 UPDATE 表名 set 字段 = 新数据 WHERE 条件字段 = 条件

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐