五分钟带你玩转Elasticsearch(二十)es导出时间段内的数据

举报
小鲍侃java 发表于 2021/09/10 00:57:34 2021/09/10
【摘要】 Elasticsearch导出两个时间段内.monitoring-logstash-7-*索引的数据 保存在text上 @ApiOperation(value = "导出详细日志接口", notes = "导出详细日志接口") @PostMapping("/exportDetailLog") public void exp...

Elasticsearch导出两个时间段内.monitoring-logstash-7-*索引的数据 保存在text


  
  1. @ApiOperation(value = "导出详细日志接口", notes = "导出详细日志接口")
  2. @PostMapping("/exportDetailLog")
  3. public void exportDetailLog(@ApiParam(name = "导出详细日志接口输入参数实体", value = "导出详细日志接口输入参数实体",
  4. required = false) @RequestBody HandleDetailLogVO handleDetailLogVO) throws IOException, ParseException {
  5. SimpleDateFormat sd = new SimpleDateFormat(DateFormatEnum.YYYY_MM_DD_HH_MM_SS.getFormat());
  6. String beginTime = handleDetailLogVO.getBeginTime() + DateFormatEnum.BEGIN_HH_MM_SS.getFormat();
  7. String endTime = handleDetailLogVO.getEndTime() + DateFormatEnum.END_HH_MM_SS.getFormat();
  8. String path = handleDetailLogVO.getPath() + "/" + handleDetailLogVO.getBeginTime() + "-"
  9. + handleDetailLogVO.getEndTime() + ".txt";
  10. // 根据时间查询
  11. NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
  12. BoolQueryBuilder bool = QueryBuilders.boolQuery();
  13. List<QueryBuilder> filters = bool.filter();
  14. filters.add(QueryBuilders.rangeQuery("time").gte(sd.parse(beginTime)).lte(sd.parse(endTime)));
  15. builder.withQuery(bool);
  16. NativeSearchQuery query = builder.build();
  17. IndexCoordinates indexCoordinates = IndexCoordinates.of(".monitoring-logstash-7-*");
  18. // 查询前1w条
  19. SearchScrollHits<DetailLogVO> scroll =
  20. elasticsearchTemplate.searchScrollStart(3000, query, DetailLogVO.class, indexCoordinates);
  21. List<SearchHit<DetailLogVO>> resultList = new ArrayList<>();
  22. while (scroll.hasSearchHits()) {
  23. List<SearchHit<DetailLogVO>> searchHitList = scroll.getSearchHits();
  24. resultList.addAll(searchHitList);
  25. scroll = elasticsearchTemplate.searchScrollContinue(scroll.getScrollId(), 3000, DetailLogVO.class,
  26. indexCoordinates);
  27. }
  28. // 导出为text
  29. Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path, true), "utf-8"));
  30. for (int i = 0; i < resultList.size(); i++) {
  31. out.write(resultList.get(i).getContent().getMessage());
  32. out.write("\r\n");
  33. }
  34. out.flush();
  35. out.close();
  36. // 删除索引
  37. elasticsearchTemplate.delete(query, DetailLogVO.class, indexCoordinates);
  38. }

实体


  
  1. public class HandleDetailLogVO {
  2. /**
  3. * 结束时间
  4. */
  5. @ApiModelProperty(value = "结束时间", name = "结束时间")
  6. private String endTime;
  7. /**
  8. * 开始时间
  9. */
  10. @ApiModelProperty(value = "开始时间", name = "开始时间")
  11. private String beginTime;
  12. /**
  13. * 导出路径
  14. */
  15. @ApiModelProperty(value = "导出路径", name = "导出路径")
  16. private String path;
  17. }

文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。

原文链接:baocl.blog.csdn.net/article/details/112984486

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。