我是elasticsearch Java API的新手。我知道有两种方法可以运行批量:
1.构建批量请求,使用客户端对象。
2.构建批量处理器,向其添加请求。
我模拟了一大批模拟数据(大约1M个),并使用Java高级休息客户端将它们索引到elasticsearch(5.6.3)。
但是,如果我使用批量请求来索引大批量,
java.lang.OutOfMemoryError: nullexception
。
然后我尝试使用批量处理器,它可以工作。 这是代码:
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
时一样。我需要更新一批数据中的一些数据。
答案 0 :(得分:0)
BulkResponse bulkResponse = bulkProcessor.execute().actionGet();