Elastic Search 7.12.0 批量导入走 Java API
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map.Entry; import org.apache.http.Header; import org.apache.http.HttpHost; import org.apache.http.message.BasicHeader; import org.elasticsearch.action.bulk.BulkItemResponse; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.xcontent.XContentType; import org.junit.Test; public class Elasticsearch { @Test public void test () throws Exception{ BufferedReader train = new BufferedReader(new InputStreamReader(new FileInputStream("E:/temp/leak2000.txt"), "UTF-8")); String line = null; long start = System.currentTimeMillis(); RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("121.5.156.140", 9200, "http"))); String[] values = null; String[] keys = null; HashMap<String, Object> names = null; List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>(); int count = 0; int total = 0; int length = 0; if((line = train.readLine()) != null) { keys = line.split(";"); length = keys.length; } while( (line = train.readLine()) != null){ names = new HashMap<String, Object>(); values = line.split(";"); for (int i = 0; i < length; i++) { names.put(keys[i], values[i]); } list.add(names); total++; count ++; if(count > 10000){ this.bulk(client, "travel", "record", list); list = new ArrayList<HashMap<String, Object>>(); count = 0; } } if(count > 0){ this.bulk(client, "travel", "record", list); } train.close(); try { client.close();//关闭高级客户端实例,以便它所使用的所有资源以及底层 的http客户端实例及其线程得到正确释放 } catch (IOException e) { e.printStackTrace (); } long end = System.currentTimeMillis(); long cost = end - start; System.out.println("Done !!!" + total +" cost " + cost); } public void bulk(RestHighLevelClient client, String index, String type, List<HashMap<String, Object>> sources) { BulkRequest request = new BulkRequest(); HashMap<String, Object> source = null; for (int i = 0, j = sources.size(); i < j; i++) { source = sources.get(i); int size = source.size() * 2; Object[] objects = new Object[size]; size = 0; for (Entry<String, Object> entry : source.entrySet()) { objects[size] = entry.getKey(); size++; objects[size] = entry.getValue(); size++; } request.add(new IndexRequest("posts").index(index).type(type).source(XContentType.JSON,objects)); } try { Header[] headers = {new BasicHeader("Accep", "*/*"),new BasicHeader("Connection", "keep-alive")}; BulkResponse bulkResponse = client.bulk(request, headers); BulkItemResponse[] bulkItemResponse = bulkResponse.getItems(); if(bulkItemResponse.length > 0) { System.out.println("----bulkItemResponse[0].isFailed() ----" + bulkItemResponse[0].isFailed()); } } catch (IOException e1) { e1.printStackTrace(); } } }
Maven 依赖
<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>6.2.3</version> </dependency>

浙公网安备 33010602011771号