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);
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM