谷粒商城9:检索业务逻辑

1.检索使用框架

在这里插入图片描述

2.封装传入参数和封装结果思想

  1. controller(将参数封装到param中,结果封装到result中)
@Data
public class SearchParam {
    /**
     * 前端页面-》全文检索,三级分类
     * 检索页面-》销量排序,热度评分排序,价格排序
     *          -》
     */
    private String keyword;//页面传递过来的全文匹配关键字

    private Long catalog3Id;//三级分类id

    /**
     * sort=saleCount_asc/desc
     * sort=skuPrice_asc/desc
     * sort=hotScore_asc/desc
     */
    private String sort;//排序条件

    /**
     * 好多的过滤条件
     * hasStock(是否有货)、skuPrice区间、brandId、catalog3Id、attrs
     * hasStock=0/1
     * skuPrice=1_500 1到500的价格
     */
    private Integer hasStock;//是否只显示有货

    private String skuPrice;//价格区间查询

    private List<Long> brandId;//按照品牌进行查询,可以多选

    private List<String> attrs;//按照属性进行筛选

    private Integer pageNum = 1;//页码

}
@Data
public class SearchResult {

    /**
     * 查询到的商品信息
     */
    private List<SkuEsModel> products;

    /**
     * 分页信息
     */
    private Integer pageNum;//当前页码
    private Long total;//总记录数
    private Integer totalPages;//总页码
    private List<Integer> pageNavs;//导航页

    private List<BrandVo> brands;//当前查询到的结果,所有涉及到的品牌
    private List<CatalogVo> catalogs;//当前查询到的结果,所有涉及到的分类
    private List<AttrVo> attrs;//当前查询到的结果,所有涉及到的属性

    //=====================以上是返给页面的信息==========================


    //面包屑导航

    @Data
    public static class BrandVo{
        private Long brandId;

        private String brandName;

        private String brandImg;
    }

    @Data
    public static class CatalogVo{
        private Long catalogId;

        private String catalogName;

        private String brandImg;
    }

    @Data
    public static class AttrVo{
        private Long attrId;
        private String attrName;
        private List<String> attrValue;
    }

}
    @GetMapping("/list.html")
    public String listPage(SearchParam param,Model model){

        //1.根据查询参数,去es中检索商品
        SearchResult result = mallSearchService.search(param);

        Model result1 = model.addAttribute("result", result);

        return "list";
   }
  1. service(传入)
//去es进行检索
    @Override
    public SearchResult search(SearchParam param) {
        //动态构建出查询需要的DSL语句
        SearchResult result = null;
        //1、准备检索请求
        SearchRequest searchRequest = buildSearchRequest(param);
        try {
            //2、执行检索请求
            SearchResponse response = restHighLevelClient.search(searchRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);
            //3.分析响应数据封装我们需要的格式
            result = buildSearchResult(response,param);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
  1. html中利用对象.属性即可

  2. 分析
    将传入参数封装为类
    然后通过该类的属性去构建ES语句
    通过ES语句返回的值封装为对象
    通过该对象回显到html中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值