Day102 Java项目 (SSM+Dubbo)商城(十一) 搜索解决方案-2 过滤查询

1. 关键字搜索

一.需求分析

  1. 在首页或搜索页输入关键字,点击搜索

二.实现思路

  1. 后端使用匹配查询和布尔查询
  2. 前端使用thymeleaf模板渲染
  3. 前端向后端传递map(因为提交的不仅仅是关键字,还有品牌、规格、分类等信息)
  4. 后端向前端返回map(因为返回的不仅仅是列表,还有商品分类、品牌和规格列表等数据)

三.集成elasticsearch高级客户端

  1. qingcheng_service_goods工程pom.xml新增依赖
  2. qingcheng_service_goods工程新增工厂类
  3. qingcheng_service_goods工程applicationContext-service.xml新增配置

四.关键字搜索逻辑

  1. qingcheng_interface工程新增接口 SkuSearchService 服务接口新增方法定义
  2. qingcheng_service_goods工程新增服务实现类SkuSearchServiceImpl 实现此方法,实现关键字查询



  3. qingcheng_web_portal工程新增类

    WebUtil类是工具类,用于字符集转码

五.模板构建

  1. qingcheng_web_portal工程新增模板,将search.htm拷贝到WEB-INF下,并进行以下修改

    遍历查询结果
  2. 修改index.html的关键字搜索表单

2. 商品分类过滤

一.需求分析

  1. 以关键字作为查询条件,查询结果中包含的商品分类,在页面中显示出来
  2. 点击商品分类,按商品分类对结果进行过滤查询,并且在查询条件列表中添加已经选择的商品分类标签,隐藏搜索面板中的商品分类一行。点击条件标签的“×”,取消该过滤条件

二.实现思路

  1. 商品分类列表的显示使用聚合查询
  2. 使用过滤查询

三.商品分类列表

  1. 修改SkuSearchServiceImpl的search方法,在第一段代码(封装查询请求)的末尾处添加以下代码:

    在第二段代码中添加以下代码:
  2. 修改qingcheng_web_portal的search.html 商品分类列表

四.分类过滤查询

  1. 修改SkuSearchServiceImpl类的search方法,在第一段代码(封装查询请求)中添加如下代码:
  2. 修改SearchController的search方法,添加以下代码
  3. 修改changgou_web_search的search.html 商品分类列表

五.取消分类过滤

  1. 修改SearchController的search方法,添加以下代码
  2. 修改search.html的条件列表部分

    为商品分类的div添加条件 ,判断当查询条件中不存在category时显示商品分类

3. 品牌过滤

一.需求分析

  1. 根据关键字搜索得到的商品分类列表,按照第一个分类查询该分类下的品牌列表

二.实现思路

  1. 数据访问层添加方法,根据商品分类名称得到品牌列表
  2. 在搜索商品的方法中,添加按品牌过滤的逻辑。

三.品牌列表

  1. BrandMapper接口新增方法定义
  2. 修改 SkuSearchServiceImpl ,注入BrandMapper

    修改search方法,新增代码
  3. 修改search.html ,展现品牌列表

四.品牌过滤查询

  1. 修改SkuSearchServiceImpl类的search方法,添加以下代码
  2. 修改模板

五.取消品牌过滤

  1. 修改search.html的条件列表部分
  2. 在品牌列表的div上添加条件

    代码优化:修改SkuSearchServiceImpl类的search方法 ,当查询条件中包含品牌信息,则不查询品牌列表

4. 规格过滤

一.需求分析

  1. 根据关键字搜索得到的商品分类列表,按照第一个分类查询该分类下的规格和规格选项列表

    如果用户选择了商品分类,按照选择的商品分类查询该分类下的规格和规格选项列表
    点击某规格下的规格选项,按照该规格和规格选项对结果进行过滤。
    点击条件标签的“×”,取消该过滤条件

二.实现思路

  1. 数据访问层添加方法,根据商品分类名称得到规格列表
  2. 在搜索商品的方法中,添加按规格过滤的逻辑。

三.规格列表

  1. SpecMapper新增方法定义
  2. 修改SkuSearchServiceImpl ,引入specMapper

    修改search方法,新增代码
  3. 修改search.html

四.规格过滤查询

  1. 对于对象类型的查询语法:
    前后端约定:所有spec.开头的参数都是规格
    修改SkuSearchServiceImpl类的search方法,添加以下代码
  2. 修改模板

五.取消规格过滤

  1. 修改search.html 添加条件标签
  2. 在规格列表的div上添加条件

5. 价格过滤

一.需求分析

  1. 点击价格区间表现,按价格区间搜索

    点击条件标签的“×”,取消该过滤条件

二.实现思路

  1. 价格区间可以在模板中写成固定的。
  2. 使用范围查询。
    需求:查询价格大于等于10000并且小于等于20000的记录
    范围查询的语法如下:

    rest高级客户端 :

    比较神奇的是,我们可以传递字符串

    也是可以查询到结果,它会自动转换类型。

三.价格条件列表

  1. 修改search.html

四.价格过滤

  1. 修改SkuSearchServiceImpl类的buildBasicQuery方法,添加代码

五.取消价格过滤

  1. 修改search.html 添加条件标签
  2. 在搜索面板的价格一行添加条件

6. 品牌与规格列表缓存

一.需求分析

  1. 现在我们每次查询时都需要根据商品分类名称读取品牌和规格列表,这样对于数据库造成比较大的访问压力,所以我们需要将品牌和规格列表放入缓存。

二.实现思路

  1. 方式一:定时预热
    写一个定时任务,每天执行一次,查询所有的商品分类的品牌和规格列表,放入缓存
    以hash形式存储,以分类名称作为key,以品牌列表和规格列表作为值。
    启动时检测缓存中是否存在数据,如果不存在数据则立即执行缓存预热。
  2. 方式二:随机过期
    获取品牌和规格列表查询缓存中是否存在数据,如果缓存中有数据则返回缓存中的数
    据,如果没有则查询数据库并放入缓存并设置过期时间,为了避免缓存雪崩,我们将过
    期时间设置为一定范围内的随机数。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值