導出兩個時間段内.monitoring-logstash-7-*索引的資料 儲存在text上
@ApiOperation(value = "導出詳細日志接口", notes = "導出詳細日志接口")
@PostMapping("/exportDetailLog")
public void exportDetailLog(@ApiParam(name = "導出詳細日志接口輸入參數實體", value = "導出詳細日志接口輸入參數實體",
required = false) @RequestBody HandleDetailLogVO handleDetailLogVO) throws IOException, ParseException {
SimpleDateFormat sd = new SimpleDateFormat(DateFormatEnum.YYYY_MM_DD_HH_MM_SS.getFormat());
String beginTime = handleDetailLogVO.getBeginTime() + DateFormatEnum.BEGIN_HH_MM_SS.getFormat();
String endTime = handleDetailLogVO.getEndTime() + DateFormatEnum.END_HH_MM_SS.getFormat();
String path = handleDetailLogVO.getPath() + "/" + handleDetailLogVO.getBeginTime() + "-"
+ handleDetailLogVO.getEndTime() + ".txt";
// 根據時間查詢
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
BoolQueryBuilder bool = QueryBuilders.boolQuery();
List<QueryBuilder> filters = bool.filter();
filters.add(QueryBuilders.rangeQuery("time").gte(sd.parse(beginTime)).lte(sd.parse(endTime)));
builder.withQuery(bool);
NativeSearchQuery query = builder.build();
IndexCoordinates indexCoordinates = IndexCoordinates.of(".monitoring-logstash-7-*");
// 查詢前1w條
SearchScrollHits<DetailLogVO> scroll =
elasticsearchTemplate.searchScrollStart(3000, query, DetailLogVO.class, indexCoordinates);
List<SearchHit<DetailLogVO>> resultList = new ArrayList<>();
while (scroll.hasSearchHits()) {
List<SearchHit<DetailLogVO>> searchHitList = scroll.getSearchHits();
resultList.addAll(searchHitList);
scroll = elasticsearchTemplate.searchScrollContinue(scroll.getScrollId(), 3000, DetailLogVO.class,
indexCoordinates);
}
// 導出為text
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path, true), "utf-8"));
for (int i = 0; i < resultList.size(); i++) {
out.write(resultList.get(i).getContent().getMessage());
out.write("\r\n");
}
out.flush();
out.close();
// 删除索引
elasticsearchTemplate.delete(query, DetailLogVO.class, indexCoordinates);
}
實體
public class HandleDetailLogVO {
/**
* 結束時間
*/
@ApiModelProperty(value = "結束時間", name = "結束時間")
private String endTime;
/**
* 開始時間
*/
@ApiModelProperty(value = "開始時間", name = "開始時間")
private String beginTime;
/**
* 導出路徑
*/
@ApiModelProperty(value = "導出路徑", name = "導出路徑")
private String path;
}