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);
    }
相关推荐
不是笨小孩i6 小时前
Git常用指令
大数据·git·elasticsearch
+码农快讯+9 小时前
Git入门学习(1)
git·学习·elasticsearch
码爸13 小时前
java 执行es中的sql
java·sql·elasticsearch
学习使我快乐——玉祥15 小时前
es查询语法
大数据·elasticsearch·搜索引擎
徐*红18 小时前
Elasticsearch 8.+ 版本查询方式
大数据·elasticsearch
码爸18 小时前
flink 例子(scala)
大数据·elasticsearch·flink·scala
txtsteve19 小时前
es由一个集群迁移到另外一个集群es的数据迁移
大数据·elasticsearch·搜索引擎
工作中的程序员19 小时前
ES 索引或索引模板
大数据·数据库·elasticsearch
Lill_bin1 天前
深入理解ElasticSearch集群:架构、高可用性与数据一致性
大数据·分布式·elasticsearch·搜索引擎·zookeeper·架构·全文检索
RwTo1 天前
Elasticsearch 聚合搜索
大数据·elasticsearch·搜索引擎·全文检索