如何使用批量处理器捕获批量响应?(Java高级休息客户端)

时间:2017-11-08 06:28:54

标签: java elasticsearch

我是elasticsearch Java API的新手。我知道有两种方法可以运行批量:

1.构建批量请求,使用客户端对象。

2.构建批量处理器,向其添加请求。

我模拟了一大批模拟数据(大约1M个),并使用Java高级休息客户端将它们索引到elasticsearch(5.6.3)。

但是,如果我使用批量请求来索引大批量,

java.lang.OutOfMemoryError: nullexception

当我使用client.bulk()方法时会发生

然后我尝试使用批量处理器,它可以工作。 这是代码:

    RestHighLevelClient client = initESclient();
    BulkProcessor bulkProcessor = initES(client);

    logger.info("Use bulk request to load data:");
    logger.info("start to generate random data...");
    String bossMockIndex = customSetting.getMockIndex();
    String soapMockType = customSetting.getSoapType();
    Long start = System.currentTimeMillis();
    Integer batch = customSetting.getMockBatch();
    logger.info("Batch:"+batch);
    List<IndexRequest> indexRequesList = bossMockDataService.indexRequestGenerator(batch, bossMockIndex, soapMockType);
    Long endCreateData = System.currentTimeMillis();
    logger.info("Consumption for creating "+batch+" pieces of mock data:"+(endCreateData-start)/1000.0d+"s");

    for (IndexRequest indexRequest : indexRequesList) {
        bulkProcessor.add(indexRequest);
    }

我想知道的是:如何使用BulkProcessor获得此批量响应,就像我使用BulkRequest时一样。我需要更新一批数据中的一些数据。

1 个答案:

答案 0 :(得分:0)

BulkResponse bulkResponse = bulkProcessor.execute().actionGet();