ES 插入和修改

本文探讨了在Elasticsearch中更新文档的具体方式,并分析了不同更新方法导致的数据字段变化情况。文章对比了直接修改指定字段与通过Java Bean转换JSON进行更新的区别,指出了后者可能将未赋值的字段设置为null的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES中

 JSONObject jsonObject = new JSONObject();
        jsonObject.put("id", id);
        jsonObject.put("age", 25);
        jsonObject.put("name", "j-" + new Random(100).nextInt());
        jsonObject.put("createTime", DateUtil.formatDate(new Date()));
        String ids = ElasticsearchUtil.addData(jsonObject, indexName, esType, jsonObject.getString("id"));

当使用这个格式插入数据,

JSONObject jsonObject = new JSONObject();
            jsonObject.put("id", id);
            //jsonObject.put("age", 31);
            jsonObject.put("name", "wpfffff");
           // jsonObject.put("date", new Date());*/
            ElasticsearchUtil.updateDataById(jsonObject, indexName, esType, id);

这种格式修改数据时,

期望:ES中只有这两个字段有值

结果:age和createTime也是有值的

 

 EsDemo demo = new EsDemo();
            demo.setId(Long.parseLong(id));
            demo.setName("wpf111");

            JSONObject jsonObject = (JSONObject)JSONObject.toJSON(demo);
            ElasticsearchUtil.updateDataById(jsonObject, indexName, esType, id);

            System.out.println(jsonObject);

使用这种格式修改数据时,

其他字段也会被置为null(新增的时候插入的字段的值)

原因,bean再转jsonObject时,bean中未null的值也会被转,只是打印时没看到,但是遍历key时会发现还是有该key,

所以修改时,该key的值在ES中会被置为null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值