ElastaticSearch -- es批量插入数据

es批量插入数据的示例

复制代码
    /**
     * 批量插入数据
     * @param client  es客户端
     * 如果没有现成的client, 获取client的代码以及jar包,详情见 https://www.cnblogs.com/expiator/p/15735701.html
     * @param list 对象集合
     * @param index  es索引
     * @param type es索引的类型
     */
    public static void bulkInsert(TransportClient client , List<Person> list, String index, String type) {
        //通过client实例化 BulkRequestBuilder
        BulkRequestBuilder bulkRequest = client.prepareBulk();
        for (Person person : list) {
            String dataStr = JSON.toJSONString(person);
            //最好能保证id唯一,可以拼上时间戳或者主键之类的
            StringBuilder id = new StringBuilder(person.getName()).append("_").append(person.getAge()).append("_").append(person.getAddress());
            //往BulkRequestBuilder中添加数据            
            bulkRequest.add(client.prepareIndex(index, type, id.toString()).setSource(dataStr, XContentType.JSON));
        }
        //执行请求并回调
        BulkResponse bulkItemResponses = bulkRequest.get();
        log.info("es插入是否成功:{}, 插入条数:{}", bulkItemResponses.status().toString(), CollectionUtils.size(list));
    }

es批量插入数据

上面的例子使用的是具体的对象集合 List。

对象集合可以转换成 List,再批量插入es,就能统一成通用的方法了。

复制代码
    /**
     * 批量插入数据
     * @param client  es客户端
     * 如果没有现成的client, 获取client的代码以及jar包,详情见 https://www.cnblogs.com/expiator/p/15735701.html 
     * @param list java对象集合转换而成的json集合
     * @param index  es索引
     * @param type es索引的类型
     * @param idField 插入数据对应的id字段
     */
    public static void bulkInsertJsonList(TransportClient client, List<JSONObject> list, String index, String type, String idField) {
        if (CollectionUtils.isEmpty(list)) {
            return;
        }
        long start = System.currentTimeMillis();
        BulkRequestBuilder bulkRequest = client.prepareBulk();
        for (JSONObject json : list) {
            //根据字段获取对应的id,最好能保证id唯一
            String id = json.getString(idField);
            bulkRequest.add(client.prepareIndex(index, type, id).setSource(json));
        }
        BulkResponse bulkItemResponses = bulkRequest.get();
        log.info("es插入是否成功:{}, 插入条数:{}, 插入耗时时长:{}ms"
                , bulkItemResponses.status().toString(), CollectionUtils.size(list), System.currentTimeMillis() - start);
    }
相关推荐
编程令我快乐2 小时前
模型配置及使用ccSwich管理
大数据·elasticsearch·搜索引擎
Elasticsearch10 小时前
悦高软件带你体验 ES9.5 的性能跃升之路
elasticsearch
Elastic 中国社区官方博客11 小时前
跳过 mapping 爆炸:ES|QL 无需动态 mapping 即可查询无 schema JSON key
大数据·人工智能·sql·elasticsearch·搜索引擎·json·全文检索
Gavynlee12 小时前
Git 操作问题排查与解决方案记录(Gitee 实战)
git·elasticsearch·gitee
菠萝猫yena1 天前
【git】git 命令常用组合
大数据·git·elasticsearch
Sayai1 天前
Elasticsearch 压测利器 esrally 从安装到跑分全流程
大数据·elasticsearch·搜索引擎
Zach_菠萝侠1 天前
【DeepSeek Harness 研究】进化方向3:插件生态治理 思考、设计与实现
elasticsearch·deepseek
Elasticsearch1 天前
如何在 Workflow 里发送企业微信信息 - WeCom
elasticsearch
Elasticsearch1 天前
IT 领导者使用可观测性监控 AI 应用的 7 条经验
elasticsearch
哭哭啼1 天前
es ilm计算索引存在时间
大数据·elasticsearch·搜索引擎