赵小忠
1 package com.jd.service;2
3 import org.apache.solr.client.solrj.SolrQuery;
4 import org.apache.solr.client.solrj.SolrQuery.ORDER;
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.stereotype.Service;
7 import com.jd.dao.ProductDao;
8 import com.jd.pojo.ResultModel;
9
10 /**
11* 商品模块Service层开发:
12* 核心功能:接收Controller传递过来的参数,根据参数拼装一个查询条件,调用dao层方法,查询商品数据。
13* 接收返回的商品列表和商品的总数量,根据每页显示的商品数量计算总页数。
14* @author zxz
15*
16*/
17 @Service
18 public>
19
20 //注入Dao:
21 @Autowired
22 private ProductDao productDao;
23
24 //定义常量,代表每页显示的商品条数:
25 private final static Integer PAGE_SIZE = 60;
26
27 //根据检索条件得到数据:
28 @Override
29 public ResultModel search(String queryString, String catalog_name, String price, Integer page, String sort)
30 throws Exception {
31 //1、封装查询条件对象,因为需要调用dao层的方法,dao层的检索方法就需要一个solr服务的查询条件对象:
32 SolrQuery solrQuery = new SolrQuery();
33
34 //2、设置默认查询的域(该默认的域已经在solrHome/collection1/conf/schema.xml配置文件中配置了业务域):
35 solrQuery.setQuery("product_keywords");
36
37 //3、设置查询的关键字:
38 if(queryString!=null && !"".equals(queryString)){
39 solrQuery.setQuery(queryString);
40 }else{
41 //如果没有查询的关键字,则默认查询所有商品数据:
42 solrQuery.setQuery("*:*");
43 }
44
45 //4、根据商品分类进行过滤:
46 if(catalog_name!=null && !"".equals(catalog_name)){
47 //注意查询语法:不要忽略":"号
48 solrQuery.addFilterQuery("product_catalog_name:" + catalog_name);
49 }
50
51 //5、根据商品价格进行过滤:
52 if(price!=null && !"".equals(price)){
53 //因为传递过来的的商品价格的格式为:100-300,所以需要切割并根据价格区间过滤商品数据:
54 String[] split = price.split("-");
55 if(split!=null && split.length>1){
56 //为什么判断长度必须大于1,因为根据价格过滤需要最小值和最大值,必须有俩个值才能过滤成功
57 solrQuery.addFilterQuery("product_price:["+split+" TO "+split+"]");
58 }
59 }
60
61 //6、按照商品价格排序展示商品数据:
62 if("1".equals(sort)){
63 solrQuery.setSort("product_price",ORDER.asc);
64 }else{
65 solrQuery.setSort("product_price",ORDER.desc);
66 }
67
68 //7、分页查询商品数据:
69 //首先校验数据合法性,如果当前页的值为空或小于1,则默认开始查询第一页数据:
70 if(page == null){
71 page = 1;
72 }
73 if(page < 1){
74 page = 1;
75 }
76 //计算起始索引:
77 Integer startIndex = (page-1) * PAGE_SIZE;
78 //设置起始索引:
79 solrQuery.setStart(startIndex);
80 //设置每页显示的商品记录数:
81 solrQuery.setRows(PAGE_SIZE);
82
83 //8、根据封装后的SolrQuery查询对象查询商品数据:
84 ResultModel resultModel = productDao.search(solrQuery);
85 //设置当前页数:
86 resultModel.setCurPage(page);
87 //计算总页数:
88 Long pageCount = (long) Math.ceil((resultModel.getRecordCount()*1.0) / PAGE_SIZE);
89 //设置总页数:
90 resultModel.setPageCount(pageCount);
91
92 return resultModel;
93 }
94 }
页:
[1]