您的位置:首页 > 其它

从es中查询数据滚动写入excel中

2018-08-02 17:15 92 查看
/**
* 滚动输出
*/
@Test
public void scroll() throws IOException {

int size = 10000;  //设置每次滚动输出条数
String path = "E:\\outputTest\\scrollOutputTest.xls";
long startTime = System.currentTimeMillis();    //获取开始时间
SearchResponse response = client.prepareSearch("twitter").setTypes("tweet")
.addSort(SortBuilders.fieldSort("_doc"))
.setSize(size).setScroll(new TimeValue(2000)).execute()
.actionGet();
//获取总数量
long totalCount = response.getHits().getTotalHits();
int page = (int) totalCount / size;
System.out.println("totalCount:" + totalCount);

HSSFWorkbook workbook = new HSSFWorkbook(); //创建表
HSSFSheet sheet = workbook.createSheet("test");//创建sheet页
//把第一行字段行写入sheet
createFirstRow(response,sheet);
//把数据写入sheet
createOtherRow(response,sheet);

for (int i = 0; i < page-1; i++) {
//再次发送请求,并使用上次搜索结果的ScrollId
response = client.prepareSearchScroll(response.getScrollId())
.setScroll(new TimeValue(20000)).execute()
.actionGet();
createOtherRow(response,sheet);
}
writeData(workbook,path);
long endTime = System.currentTimeMillis();    //获取结束时间
System.out.println("运行时间:"+(endTime-startTime)+"ms");
}
/**
*构造首行的结构,未设置字段类型
*/
private void createFirstRow(SearchResponse response,HSSFSheet sheet){
if(response.getHits().getTotalHits() !=0){
HSSFRow row = sheet.createRow(0); //创建行

Map<String,Object> map = response.getHits().getAt(0).getSourceAsMap();
int k=0;
HSSFCell cell;
for (Map.Entry<String, Object> entry : map.entrySet()) {
cell = row.createCell(k); //创建单元格
cell.setCellValue(entry.getKey());
k++;
}
}
}
/**
*把数据写入sheet
*/
private void createOtherRow(SearchResponse response,HSSFSheet sheet) throws IOException {

for(int i = 0;i<response.getHits().getHits().length;i++){
Map<String,Object> map = response.getHits().getAt(i).getSourceAsMap();
HSSFRow row1 = sheet.createRow(i + 1);
int k = 0;
for (Map.Entry<String, Object> entry : map.entrySet()) {
row1.createCell(k).setCellValue(entry.getValue().toString());
k++;
}
}
}
/**
*导出数据到本地
*/
private void writeData(HSSFWorkbook workbook,String path){
try {
FileOutputStream fos = new FileOutputStream(path);
workbook.write(fos);
System.out.println("写入成功");
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: