You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flexible Search查询DAO返回空结果HAC正常,需适配多国家站点

问题分析与解决方案

核心问题排查

  1. 参数绑定错误:原代码中使用qar.addQueryParameter(params)传递参数集合是错误的,该方法用于添加单个参数而非整个参数Map,导致查询的时间条件未生效,这是代码返回0结果但HAC执行正常的核心原因。
  2. 异常日志无效:原异常日志的格式化字符串缺少占位符,无法记录具体错误信息,不利于问题排查。
  3. 查询语句可读性差:原查询语句排版混乱,参数命名易引发混淆。

多站点适配说明

当前从BaseSiteModel的UID中提取后缀的逻辑(如从uk-site提取uk)是可行的,只需确保所有站点的ProductAvailabilityGroup和UserPriceGroup遵循统一命名规则:

  • 可用性组:[小写站点后缀]-availability(如fi-availability)
  • 价格组:[大写站点后缀] Price Group(如FI Price Group)

修复后的完整代码

public List<ProductModel> getProductsByDateTimeRange(Date fromModifiedDate, Date toModifiedDate, BaseSiteModel site) {
    List<ProductModel> result = Collections.emptyList();
    try {
        // 提取站点后缀,适配多站点规则
        String siteSuffix = site.getUid().split("-", 2)[1];
        String upperSiteSuffix = siteSuffix.toUpperCase();

        // 构建格式化的Flexible Search查询语句
        String query = "SELECT {" + ProductModel.PK + "} FROM {" 
                + ProductModel._TYPECODE + " AS prod "
                + "JOIN CatalogVersion AS cv ON {cv:pk} = {prod:catalogVersion} "
                + "JOIN Catalog AS cat ON {cv:catalog} = {cat:pk} "
                + "JOIN ArticleApprovalStatus AS st ON {prod:approvalstatus} = {st:pk} "
                + "JOIN ProductAvailabilityAssignment AS paa ON {paa:product} = {prod:pk} "
                + "JOIN ProductAvailabilityGroup AS pag ON {paa:availabilityGroup} = {pag:pk} "
                + "JOIN PriceRow AS pricerow ON {pricerow:product} = {prod:pk} "
                + "JOIN UserPriceGroup AS upg ON {pricerow:ug} = {upg:pk} "
                + "} WHERE {prod:" + ProductModel.MODIFIEDTIME + "} >= ?fromModifiedDate "
                + "AND {cat:name} = 'ResMed Product Catalog' "
                + "AND {cv:version} = 'Online' "
                + "AND {st:code} = 'approved' "
                + "AND {pag:id} = '" + siteSuffix + "-availability' "
                + "AND {upg:name} = '" + upperSiteSuffix + " Price Group'";

        FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery(query);
        
        // 正确绑定查询参数
        Map<String, Object> params = new HashMap<>();
        params.put("fromModifiedDate", fromModifiedDate);
        flexibleSearchQuery.setQueryParameters(params);

        // 执行查询并返回结果
        SearchResult<ProductModel> searchResult = flexibleSearchService.search(flexibleSearchQuery);
        result = searchResult.getResult();

        // 日志输出查询到的产品信息
        for (ProductModel product : result) {
            LOG.info("Product Code: {}, Modified Time: {}", product.getCode(), product.getModifiedtime());
        }
    } catch (Exception e) {
        // 修复日志格式,记录完整错误信息
        LOG.error("Exception in flexible search query: {}", e.getMessage(), e);
    }
    return result;
}

关键修改点

  • 参数传递修复:将错误的qar.addQueryParameter(params)替换为flexibleSearchQuery.setQueryParameters(params),确保时间参数正确生效。
  • 日志优化:修正异常日志的格式化逻辑,添加占位符并传入异常对象,便于定位问题。
  • 代码健壮性提升:初始化返回结果为空列表,避免返回null引发空指针异常。
  • 可读性优化:调整查询语句的换行格式,提升代码维护性。

内容的提问来源于stack exchange,提问作者Swathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:23:18