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

/**
     * 滚动输出
     */
    @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();
        }
    }

欢迎关注我的微信公众号,会同步更新python、java、算法等相关内容!!!

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值