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>

 

posted @ 2021-11-09 18:58  oioele  阅读(147)  评论(0)    收藏  举报