需求步骤
需求:利用BulkRequest批量将数据库数据导入到索引库中。
步骤如下:
-
利用mybatis-plus查询酒店数据。
-
将查询到的酒店数据(Hotel)转换为文档类型数据(HotelDoc)。
-
利用JavaRestClient中的BulkRequest批处理,实现批量新增文档。
语法说明
批量处理BulkRequest,其本质就是将多个普通的CRUD请求组合在一起发送。
其中提供了一个add方法,用来添加其他请求:
可以看到,能添加的请求包括:
-
IndexRequest,也就是新增
-
UpdateRequest,也就是修改
-
DeleteRequest,也就是删除
因此Bulk中添加了多个IndexRequest,就是批量新增功能了。
单元测试
1 /** 2 * 批量添加数据库的数据 3 * @throws IOException 4 */ 5 @Test 6 void testBulkRequest() throws IOException { 7 // 查询数据库中所有的酒店数据 8 List<Hotel> list = hotelService.list(); 9 10 // 1.准备Request 11 BulkRequest request = new BulkRequest(); 12 // 2.准备参数 13 for (Hotel hotel : list) { 14 // 2.1.转为HotelDoc 15 HotelDoc hotelDoc = new HotelDoc(hotel); 16 // 2.2.转json 17 String json = JSON.toJSONString(hotelDoc); 18 // 2.3.添加请求 19 request.add(new IndexRequest("hotel").id(hotel.getId().toString()).source(json, XContentType.JSON)); 20 } 21 22 // 3.发送请求 23 client.bulk(request, RequestOptions.DEFAULT); 24 }
其实还是三步走:
1)创建Request对象。这里是BulkRequest。
2)准备参数。批处理的参数,就是其它Request对象,这里就是多个IndexRequest。
3)发起请求。这里是批处理,调用的方法为client.bulk()方法。