本帖最后由 我是楠楠 于 2018-5-17 16:00 编辑
【郑州校区】Lucene的&Solr的(3)下
1. 案例实现 1.1。原型分析1.2。系统架构
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsBBCA.tmp.png 1.3。工程搭建创建一个网络工程导入的jar 包 [size=10.5000pt]1, springmvc的相关jar 包 [size=10.5000pt]2, solrJ的jar 包 [size=10.5000pt]3, Example \ lib \ ext下的jar 包
1.3.1。Springmvc.xml
1.3.2。在web.xml[mw_shl_code = applescript,true] <?xml version =“1.0”encoding =“UTF-8”?>
<web-app xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”xmlns =“http://java.sun.com/xml/ns/javaee”xsi:schemaLocation =“http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ ns / javaee / web-app_2_5.xsd “id =”WebApp_ID“version =”2.5“>
<display-name> solr-jd </ display-name>
<welcome-file-list>
<welcome-file> index.html <welcome-file>
<welcome-file> index.htm </ welcome-file>
<welcome-file> index.jsp </ welcome-file>
<welcome-file> default.html </ welcome-file>
<welcome -file>的default.htm </欢迎文件>
<welcome-file> default.jsp </ welcome-file>
</ welcome-file-list>
<! - 配置前段控制器 - >
<servlet>
<servlet-name> springmvc </ servlet-name>
<servlet-class> org.springframework.web.servlet.DispatcherServlet </ servlet-class>
<init-param>
<! - 指定springmvc配置文件的路径
如果不指定默认为:/ WEB-INF / $ {servlet-name} -servlet.xml
- >
<param-name> contextConfigLocation </ param-name>
<param-value> classpath:springmvc.xml </ param-值>
</ init-param>
</ servlet>
<servlet-mapping>
<servlet-name> springmvc </ servlet-name>
<url-pattern> * .action </ url-pattern>
</ servlet-mapping>
< !- 解决post乱码问题 - >
<filter>
<filter-name> CharacterEncodingFilter </ filter-name>
<filter-class> org.springframework.web.filter.CharacterEncodingFilter </ filter-class>
<init-param>
<param-name> encoding </ param-name>
<参数值> utf-8 </ param-value>
</ init-param>
</ filter>
<filter-mapping>
<filter-name> CharacterEncodingFilter </ filter-name>
<url-pattern> / * </ url -pattern>
</ filter-mapping>
</ web-app> [/ mw_shl_code] |
1.4。道功能:接收服务层传递过来的参数,根据参数查询索引库,返回查询结果。 参数: SolrQuery 对象 返回值:一个商品列表 <ProductModel> ,还需要返回查询结果的总数量。 返回: ResultModel 方法定义: ResultModel queryProduct(SolrQuery query)抛出Exception;
商品对象模型: 公共 类 ProductModel { // 商品编号 private String pid; // 商品名称 私人字符串名称; // 商品分类名称 私人字符串catalog_name; // 价格 私人 浮动价格; // 商品描述 私人字符串描述; // 图片名称 私人字符串图片; }
返回值对象模型 公共 类 ResultModel { // 商品列表 私人清单<ProductModel> productList; // 商品总数 私人长recordCount; // 总页数 private int pageCount; // 当前页 private int curPage; }
[mw_shl_code = applescript,true] @Repository
public class ProductDaoImpl实现ProductDao {
@Autowired
private SolrServer solrServer;
@覆盖
公共ResultModel queryProduct(SolrQuery查询)抛出异常{
ResultModel resultModel =新ResultModel();
//根据查询对象查询商品列表
QueryResponse queryResponse = solrServer.query(query);
SolrDocumentList solrDocumentList = queryResponse.getResults();
//取查询结果的总数量
resultModel.setRecordCount(solrDocumentList.getNumFound());
List <ProductModel> productList = new ArrayList <>();
// SolgeDocument
solrDocument:solrDocumentList {
//取商品信息
ProductModel productModel = new ProductModel();
productModel.setPid((String)solrDocument.get(“id”));
//取高亮显示
String productName =“”;
Map <String,Map <String,List <String >>> highlighting = queryResponse.getHighlighting();
List <String> list = highlighting.get(solrDocument.get(“id”))。get(“product_name”);
if(null!= list){
productName = list.get(0);
} else {
productName =(String)solrDocument.get(“product_name”);
}
productModel.setName(productName);
productModel.setPrice((float)solrDocument.get(“product_price”));
productModel.setCatalog_name((String)solrDocument.get(“product_catalog_name”));
productModel.setPicture((String)solrDocument.get(“
}
//商品列表添加到resultmodel中
resultModel.setProductList(productList);
返回resultModel;
}
} [/ mw_shl_code] |
1.5。服务功能:接收动作传递过来的参数,根据参数拼装一个查询条件,调用DAO 层方法,查询商品列表接收返回的商品列表和商品的总数量,根据每页显示的商品数量计算总页数。 参数: 1 ,查询条件:字符串 2 ,商品分类的过滤条件:商品的分类名称,字符串 3 ,商品价格区间:传递一个字符串,满足格式:“ 0-100 ,101-200 ,201- * ” 4 ,排序条件:页面传递过来一个升序或降序就可以,默认是价格排序。0 :升序1 :升序 5 ,分页信息:每页显示的记录条数创建一个常量60 条。传递一个当前页码就可以了。 业务逻辑 [size=10.5000pt]如图1所示,根据参数创建查询对象 [size=10.5000pt]2,调用道执行查询。 [size=10.5000pt]3,根据总记录数计算总页数。 返回值: ResultModel
方法定义: ResultModel queryProduct(String queryString,String caltalog_name,String price,String sort,Integer page)throws Exception; [mw_shl_code = applescript,true] @Service
public class ProductServiceImpl实现ProductService {
@Autowired
private ProductDao productDao;
@覆盖
公共ResultModel queryProduct(字符串的queryString,字符串caltalog_name,
字符串价格,字符串排序,整数页)抛出异常{
//拼装查询条件
SolrQuery查询=新SolrQuery();
//查询条件
if(null!= queryString &&!“”。equals(queryString)){
query.setQuery(queryString);
} else {
query.setQuery(“*:*”);
}
//商品分类名称过滤
if(null!= caltalog_name &&!“”。equals(caltalog_name)){
query.addFilterQuery(“product_catalog_name:”+ caltalog_name);
if(null!= price &&!“”。equals(price)){
String [] strings = price.split(“ - ”);
query.addFilterQuery(“product_price:[”+ strings [0] +“TO”+ strings [1] +“]”);
}
//排序条件
if(“1”.equals(sort)){
query.setSort(“product_price”,ORDER.desc);
} else {
query.setSort(“product_price”,ORDER.asc);
}
//分页处理
if(null == page){
page = 1;
}
//开始
int start =(page-1)* Commons.PAGE_SIZE;
query.setStart(启动);
query.setRows(Commons.PAGE_SIZE);
//设置默认搜索域
query.set(“df”,“product_keywords”);
//高亮设置
query.setHighlight(真);
query.setHighlightSimplePre(“<span style = \”color:red \“>”);
query.setHighlightSimplePost( “</跨度>”);
//查询商品列表
ResultModel resultModel = productDao.queryProduct(query);
//计算总页数
long recordCount = resultModel.getRecordCount();
int pages =(int)(recordCount / Commons.PAGE_SIZE);
if(recordCount%Commons.PAGE_SIZE> 0){
pages ++;
}
resultModel.setPageCount(pages);
resultModel.setCurPage(页);
返回resultModel;
}
} [/ mw_shl_code] |
1.6。调节器功能:接收页面传递过来的参数调用服务查询商品列表将查询结果返回给。JSP 页面,还需要查询参数的回显。
参数: 1 ,查询条件:字符串 2 ,商品分类的过滤条件:商品的分类名称,字符串 3 ,商品价格区间:传递一个字符串,满足格式:“ 0-100 ,101-200 ,201- * ” 4 ,排序条件:页面传递过来一个升序或降序就可以,默认是价格排序。0 :升序1 :升序 5 ,分页信息:每页显示的记录条数创建一个常量60 条。传递一个当前页码就可以了。 6 ,型号:相当于要求。
返回结果: String 类型,就是一个jsp 的名称。
String queryProduct(String queryString,String caltalog_name,String price,String sort,Integer page,Model model)throws Exception; [mw_shl_code = applescript,true] @Controller
public class ProductAction {
@Autowired
private ProductService productService;
@RequestMapping(“/ list”)
public String queryProduct(String queryString,String catalog_name,String price,
String sort,Integer page,Model model)throws Exception {
//查询商品列表
ResultModel resultModel = productService.queryProduct(queryString,catalog_name,price ,排序,页面);
//列表传递给jsp
model.addAttribute(“result”,resultModel);
//参数回显
model.addAttribute(“queryString”,queryString);
model.addAttribute(“caltalog_name”,catalog_name);
model.addAttribute(“price”,price);
model.addAttribute(“sort”,sort);
model.addAttribute(“page”,page);
返回“product_list”;
}
} [/ mw_shl_code] |
1.7。JSP参考资料。
更多 传智播客·黑马程序员郑州校区地址 河南省郑州市高新区长椿路11号大学科技园(西区)东门8号楼三层 联系电话0371-56061160 / 61/62 来校路线地铁一号线梧桐街站A口出
|