开发者学堂课程【Lucene知识精讲与实战(下):综合案例(需求分析和准备工作)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/701/detail/12346
综合案例(需求分析和准备工作)
1、利用综合案例把关于 lucene 所有的知识进行整体的回顾并且在实际场景中使用
2、在页面头部部分有输入框,输入关键字,有搜索按钮,当输入需要查询的关键字之后,点击搜索按钮被搜寻出来,中间有价格,价格是区间范围,通过关键字查询的同时还要根据价格进行查询,右边有分页,上一页,下一页,展示总页数,当前页,一共查询到多少条数。
3、在 lucenedemo 小项目中完成,打开 pom.xml 配置文件,导入需要的 ja包,不用复制粘贴文档中的依赖,因为 pom.xml 中都有,
有 commons-io,lucene 核心包,lucene 分支器包,产品包,lucene 查询包,测试包,数据库驱动包,ik中文分词器包,有关于 springboot web 启动器,有thymeleaf 做页面的技术,json转换。
4、在 resources 中创建背景文件。
application.yml
5、创建完可以看到绿色小叶子图标。文件名必须是 application.yml,因为是springboot 项目。
6、关闭 thymeleaf 缓存。
spring:
thymeleaf:
cache:false
如果不关闭缓存,在查询时,查询一遍没问题,再查询一遍就会有问题,因为数据可能被缓存上。
7、java中有项目启动类,创建 class。
application
8、在Application.java中加spingboot注解,
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}
通过这个类可以启动项目。
9、有 pojo,dao再创建两个包,controller。
再创建一个包 service。
10、在 pojo 中创建一个实体类 ResultModel ,做分页用,用自己封装的ResultModel,skulist代表查询到的列表结果集,recordcount 代表查询到的商品总数,pagecount 总页数,curpage 当前页。
//商品列表
private List skuList;
//商品总数
private Long recordCount;
//总页数
private Long pageCount;
//当前页
private long curPage;
Out generate 设置键,生成 Generate Getters and Setters 方法。
自定义分页实体类,分页用的。
11、在 Controller 下创建 class,SearchController。
@controller加注解,返回页面
@RequestMapping("/list" )表明类上访问yl路径
12、在 service 中写具体查询业务,创建接口 SearchService。
13、在 service 中创建实现类 SearchServiceimpl,实现 SearchService。
表明它是 service 实现类。
@Service
public class SearchServiceimpl implements SearchService {
}
14、在 lucene 资源里面有页面。
点击页面和静态资源。
把两个包复制到项目 resources 下。
15、里面是它需要的 css.js,图片和页面。页面是 search.html。
16、打开 search.html 可以看到搜索框,from 表单中 post 请求的提交,提交的路径是list,输入关键字的输入框,name属性名是 querystring,${querystring} 表达式是做查询之后回显。当鼠标单机搜索按钮时触 发query 方法,在 query 方法中获取价格,获取当前页,清空。
//执行关键词查询时清空过滤条件
document . getEiementById("price").value="";
document . getEiementById( "page") . value="";
原因搜索关键字手机,出现结果,比如换关键字台灯,再搜索,搜索出的跟上一个搜索没有关系,所以要把价格和当前页都清空。
querlis t将 actionform 表单进行提交,
< input type= "button" value= "
搜索
" class= "button"
onclick="query()">
value 做上一个条件数据的条件回显。
查询价格根据范围进行查询,没点击某一个价格,它会触发filter方法,传进去两个参数,一个参数叫 price ,第二个是价格范围值
0-50e
500-1000
5000- 10000
10000- 50000
50000- 100000
找 filter,value 是价格范围,找到 key,key 传进来是 price,给隐藏域赋值 value参数,value 参数传进来。给 price 赋值0-500。
//key:price, value: 0-500
function filter(key, value) {
document . gwtEiementById(key) . value=value;
queryList(); actionform
方法,表单重新提交重新发送
}
17、${price} 参与条件回显,赋值的原因是在页面刚进来时,第一次输入关键字,点击搜索时,价格值是空的,再选择某一价格时,价格才会被选中,选中之后触发js方法给下面的域赋值,提交表单,价格值才会传到 controller 方法中,介绍到值并且查询结果返回到列表页面进行展示,对于查询条件在翻页时也要有,如果价格在500-1000,翻下一页,下一页查询出的数据也在500-1000内,所以查询条件要一直带着,所以通过${querystring}表达式进行回显,之后写 controller 和 service。