关于elasticsearch5.6版本的upsert文档操作总结

本文档详细介绍了Elasticsearch 5.6中的UPSEMPT操作,当文档存在时仅更新指定字段,不存在则新建。通过cURL命令和Java代码示例展示如何实现单条及批量更新。适用于需要部分更新且保持其他字段不变的场景,避免了错误操作。

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

关于elasticsearch5.6版本的upsert文档操作总结

一.upser在ealsticsearch中的概念

1.elasticsearch中upsert文档和其他数据库相同,当文档存在时只更新修改的数据,而做到不影响其他字段的值,索引中不存在该文档时就生成文档

二.curl请求直接操作elasticsearch中文档示例

curl --location --request POST 'http://ip:port/{indexName}/{type}/{id}/_update' \
--header 'Content-Type: application/json' \
--data-raw '{
    "doc": {
        "mobile-ngram": "13113605053",
        "userStatus": "APPLY",
        "nickName": "谭军",
        "userRealName": "谭军",
        "mobile": "13113605053",
        "userName": "谭军",
        "userId": "b8bd202b-add9-11e4-9273-dc8e3044c615",
        "network": "13568333",
        "createTime": "2015-02-06 16:55:16",
        "personId": "5ef2f78f9e2c49c8d3c24507",
        "id": "5ef2f78f9e2c49c8d3c24507",
        "userType": "COMMON",
        "networkType": "COMPAsNY",
        "status": "s44"
    },
    "doc_as_upsert": true
}'
ipelasticsearch集群地址中的一个
portelasticseasrch集群http端口
indexName索引名
type文档类型,elasticsearch7.0后默认_doc
id文档id
doc_as_upsert文档是否为存在更新,不存在修改

上述文档最重要的一点就是将操作的字段用doc封装起来,然后在请求体外标明是否存在更新,不存在修改。

三.单条upsert更新java代码示例

        1.创建一个indexRequest对象指定索引名,类型,和文档id
        IndexRequest indexRequest = new IndexRequest(index, type, id);
        2.将需要修改的字段放进source里面,这里的ma可以是map,json,string,以及xtContentBuilder对象
        indexRequest.source(map);
        3.创建一个updateRequest对象指定索引名,类型,id,然后将indexRequest传入upsert方法中
        UpdateRequest updateRequest = new UpdateRequest(index, type, id).upsert(indexRequest);
        4.再将indexRequest放入doc中,猜测实际做了两次修改
        updateRequest.doc(indexRequest);
        5.最后发送请求
        UpdateResponse updateResponse= esClient.update(updateRequest).get();

四.批量upsert更新java代码示例,此方法和http请求一致

          1.创建updateRequest请求,设置索引名和元素类型还有id,将修改的字段放进doc中,此处json为一map
            UpdateRequest updateRequest = new UpdateRequest(index, type, id).doc(json);
            2.设置updateRequest不存在创建,存在修改为true
            updateRequest.docAsUpsert(true);
         3.创建一个批量提交的执行器省略回调方法
           BulkProcessor bulkprocessor=BulkProcessor.builder(esClient, new BulkProcessor.Listener());
           4.向批量执行器中添加请求
            bulkprocessor.add(updateRequest);

五.总结

由于公司存在一种场景修改部分字段,但是不能影响到原有的字段,如果不存在的话就创建,存在就更新传递过来的字段,当时试错好多种没有找到合适的方式,老是报错,后面在google上搜索然后调试出来,由于资料较少,特编写文档,一起进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值