使用 SearchSourceBuilder 从 Elasticsearch 获取数据
private <T> List<T> getDataFromElasticSearchBySearchSourceBuilder(SearchSourceBuilder searchSourceBuilder, String alias, Class<T> clazz) {
// 搞个方法计时器看看查询的耗时
StopWatch stopWatch = new StopWatch();
// 开始计时
stopWatch.start();
// 创建请求 别名查询
SearchRequest searchRequest = new SearchRequest(alias);
log.info(' = = = >>> 别名{} 条件查询', alias);
// 查询条件设置完毕
searchRequest.source(searchSourceBuilder);
// 获取查询的返回值
SearchResponse response;
try {
response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
} catch (IOException e) {
throw new ServiceException('获取es数据时发生异常', CustomStatusCode.ELASTIC_SEARCH_ERROR);
}
// 获取结果
SearchHit[] searchHits = response.getHits().getHits();
// 转成对象返回
List<T> list = Arrays.stream(searchHits)
// 获取每个JSON对象字符串
.map(hit -> JSON.parseObject(hit.getSourceAsString(), clazz))
.collect(Collectors.toList());
// 计时结束
stopWatch.stop();
// 总耗时
TimeValue timeValue = stopWatch.totalTime();
log.info(' = = = >>> 别名 {} 条件查询的条数: {} , 耗时: {}', alias, list.size(), timeValue);
// 返回此结果
return list;
}
该代码使用 SearchSourceBuilder 从 Elasticsearch 获取数据,并使用 StopWatch 记录查询耗时。代码还包含错误处理机制,如果查询失败会抛出 ServiceException 异常。
方法名解释:
getDataFromElasticSearchBySearchSourceBuilder:更清晰地描述了方法的功能,即使用SearchSourceBuilder从 Elasticsearch 获取数据。
优化建议:
- 可以将
StopWatch和日志记录部分封装成一个独立的工具类,方便代码复用。 - 可以考虑使用更强大的日志库,例如 SLF4J,来进行日志记录。
- 可以使用更专业的 Elasticsearch 客户端库,例如
elasticsearch-rest-high-level-client,来简化代码操作。
原文地址: https://www.cveoy.top/t/topic/ol99 著作权归作者所有。请勿转载和采集!