赞
踩
注意:我的版本是elasticsearch7.6.2、spring-boot-starter-data-elasticsearch-2.5.6
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
ES分页查询接口实现,直接通过ES索引别名查询
@Override public Page<AlarmHistoryVO> alarmHistoryPage(PageParams<FindHistoryDTO> pageParams, Boolean flag) { SearchRequest searchRequest = new SearchRequest("alarm_history_search"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); //使用BoolQueryBuilder进行复合查询 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); // boolQueryBuilder.must(QueryBuilders.termQuery("companyId", SecurityUtils.getCompanyId())); if (StrUtil.isNotBlank(pageParams.getModel().getDeviceIp())){ boolQueryBuilder.must(QueryBuilders.termQuery("deviceIp",pageParams.getModel().getDeviceIp())); } if (StrUtil.isNotBlank(pageParams.getModel().getAlarmName())){ boolQueryBuilder.must(QueryBuilders.matchPhraseQuery("alarmName",pageParams.getModel().getAlarmName())); } if (pageParams.getModel().getAlarmLevel() != null && pageParams.getModel().getAlarmLevel() != -1){ boolQueryBuilder.must(QueryBuilders.termQuery("alarmLevel",pageParams.getModel().getAlarmLevel())); } if (flag) { boolQueryBuilder.must(QueryBuilders.termQuery("status", StaticConstant.ZERO)); } else { if (pageParams.getModel().getStatus() != null && pageParams.getModel().getStatus() != -1) { boolQueryBuilder.must(QueryBuilders.termQuery("status", pageParams.getModel().getStatus())); } } //时间区间查询 时间段 一定要有头有尾 不然会出现慢查询 if (StrUtil.isNotBlank(pageParams.getModel().getStartTime()) && StrUtil.isNotBlank(pageParams.getModel().getEndTime())){ boolQueryBuilder.filter(QueryBuilders.rangeQuery("createTime").from(pageParams.getModel().getStartTime()).to(pageParams.getModel().getEndTime())); } /*if (StrUtil.isNotBlank(pageParams.getModel().getStartTime())) { boolQueryBuilder.must(QueryBuilders.rangeQuery("createTime").gte(pageParams.getModel().getStartTime())); } if (StrUtil.isNotBlank(pageParams.getModel().getEndTime())) { boolQueryBuilder.must(QueryBuilders.rangeQuery("createTime").lte(pageParams.getModel().getEndTime())); }*/ // NativeSearchQueryBuilder searchQueryBuilder = new NativeSearchQueryBuilder().withTrackTotalHits(true) // .withQuery(boolQueryBuilder) // .withPageable(PageRequest.of((int) pageParams.getCurrent() - 1, (int) pageParams.getSize())); // //时间 // searchQueryBuilder.withSort(SortBuilders.fieldSort("createTime").order(SortOrder.DESC)); // // NativeSearchQuery searchQuery = searchQueryBuilder.build(); // SearchHits<EsAlarmHistoryVO> search = elasticsearchRestTemplate.search(searchQuery, EsAlarmHistoryVO.class); NativeSearchQuery build = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder).withTrackTotalHits(true) .withPageable(PageRequest.of((int) pageParams.getCurrent() - 1, (int) pageParams.getSize())) .withSort(SortBuilders.fieldSort("createTime").order(SortOrder.DESC)).build(); searchRequest.source(sourceBuilder); SearchHits<EsAlarmHistoryVO> search = elasticsearchRestTemplate.search(build, EsAlarmHistoryVO.class); List<EsAlarmHistoryVO> list = search .stream() .map(SearchHit::getContent) .collect(Collectors.toList()); Page<AlarmHistoryVO> page = new Page(); //封装最终返回前端数据 List<AlarmHistoryVO> alarmHistoryVOS = BeanUtilPlus.toBeanList(list, AlarmHistoryVO.class); if (list.size()>0) { List<String> ids = list.stream().map(EsAlarmHistoryVO::getId).collect(Collectors.toList()); List<AlarmHistoryVO> voList = alarmHistoryService.getPageListByIds(ids); for (AlarmHistoryVO historyVO : alarmHistoryVOS) { for (AlarmHistoryVO vo : voList) { if (historyVO.getId().equals(vo.getId())) { historyVO.setAlarmDescriptionId(vo.getAlarmDescriptionId()); historyVO.setAlarmDescription(vo.getAlarmDescription()); alarmHistoryService.addAlarmInfo(historyVO); break; } } } } page.setRecords(alarmHistoryVOS); page.setPages(pageParams.getSize()); page.setCurrent(pageParams.getCurrent()); page.setTotal(search.getTotalHits()); return page; }
实体中无需添加ES索引名信息
@Data
public class EsAlarmHistoryVO implements Serializable {
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。