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
/**
* 批量插入數據
* @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);
}