文章目录
第 5 章 搜索解决方案 - 3 分页与排序
学习目标:
无新技术, 完成业务逻辑, 依旧 es
完成搜索分页功能
完成搜索排序功能
完成搜索高亮功能
1 搜索分页
1.1 需求分析
实现搜索分页功能,每页显示 30 条记录。实现商品列表下方分页栏。
1.2 分页语法与代码
1.2.1 分页语法
需求:每页显示 30 条记录,查询第 3 页内容。分页语法如下:
GET sku/_search
{
"from": 60,
"size": 30
}
1.2.2 分页代码
需求:每页显示 30 条记录,查询第 3 页内容。分页代码如下:
searchSourceBuilder.size(30);
searchSourceBuilder.from(60)
1.3 代码实现
1.3.1 分页查询逻辑
实现思路:前端向后端传递参数 pageNo (页码)
(1)修改 SkuSearchServiceImpl 的 search 方法,添加代码
(2)修改 SearchController 的 search 方法,添加代码
1.3.2 页码渲染
实现思路:后端逻辑根据总记录数和每页记录数计算总页数,模板根据总页数渲染生成页码。
(1)修改 SkuSearchServiceImpl 的 search 方法,添加代码
(2)修改 SearchController 的 search 方法,添加代码
(3)修改 search.html 页码部分
numbers.sequence(开始索引,截至索引)可以产生从开始索引到截至索引的数组
1.3.3 页码数量控制
我们刚才的代码显示页码会全部显示,如果页码很多,也不利于显示,所以,我们
可以显示当前页前后的 5 个页码即可
(1)修改 SearchController 的 search 方法,添加代码
(2)修改 search.html 的页码部分
1.3.4 上一页与下一页
修改 search.html 上一页
下一页
2 搜索排序
2.1 需求分析
实现按销量排序、新品排序、评论排序和价格排序
2.2 排序语法与代码
2.2.1 排序语法
需求:按价格升序排序,语法如下:
如果是降序,则指定 order 为 desc
2.2.2 排序代码
需求:按价格升序排序,代码如下:
如果是降序,则指定为 SortOrder.DESC
2.3 代码实现
2.3.1 销量排序
(1)修改 SearchController 的 search 方法,添加代码
(2)修改 SkuSearchServiceImpl 的 searchList 方法,添加代码
(3)修改 search.html 的排序标签
2.3.2 新品排序
2.3.3 评论排序
2.3.4 价格排序
修改 search.html
3 搜索高亮
3.1 需求分析
所谓高亮,就是使用特别的样式修饰某字段中包含的搜索关键字。
需求:实现搜索高亮,商品名称使用红色显示搜索关键字。
3.2 高亮语法与代码
3.2.1 高亮语法
使用默认高亮显示来获取每个搜索命中 title 字段的高亮显示,在指定 title 字段的查询请求中包含高亮显示对象。
执行查询
返回查询结果:可以看到关键字区域不同
自定义高亮 执行查询:
返回结果(高亮部分)
3.2.2 高亮代码
高亮设置:
获取高亮结果:
3.3 代码实现
(1)修改 SkuSearchServiceImpl 的 search 方法,在第一个代码块中添加高亮显示处理代
码
修改 //2.1 商品列表部分代码
(3)修改模板中商品名称部分