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,来简化代码操作。
使用 SearchSourceBuilder 从 Elasticsearch 获取数据

原文地址: https://www.cveoy.top/t/topic/ol99 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录