springMVC.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> <!-- 配置扫描 器 -->
<context:component-scan base-package="com.itheima.jd"/>
<!-- 配置处理器映射器 适配器 -->
<mvc:annotation-driven/> <!-- 配置视图解释器 jsp -->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- 配置SolrServer对象 -->
<bean id="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
<constructor-arg index="0" value="http://localhost:8080/solr/collection1"/>
</bean> </beans>

SearchDaoImpl:

@Repository
public class SearchDaoImpl implements SearchDao { @Autowired
private SolrServer solrServer; @Override
public SearchResult search(SolrQuery query) throws Exception {
// 1)根据Query对象进行查询
QueryResponse response = solrServer.query(query);
// 2)得到查询结果
SolrDocumentList solrDocumentList = response.getResults();
// 3)取查询结果的总记录数
long numFound = solrDocumentList.getNumFound();
// 4)取商品列表,包含高亮的结果
List<Product> products = new ArrayList<>();
//取高亮显示的结果
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
for (SolrDocument solrDocument : solrDocumentList) {
//创建一个Product对象
Product product = new Product();
product.setPid((String) solrDocument.get("id"));
product.setCatalog_name((String) solrDocument.get("product_catalog_name"));
//取高亮结果
List<String> list = highlighting.get(solrDocument.get("id")).get("product_name");
String productName = "";
if (list != null && list.size() > 0) {
productName = list.get(0);
} else {
productName = (String) solrDocument.get("product_name");
}
product.setName(productName);
product.setPicture((String) solrDocument.get("product_picture"));
product.setPrice((float) solrDocument.get("product_price"));
//添加到商品列表
products.add(product);
}
// 5)把结果封装到SearchResult对象中
SearchResult result = new SearchResult();
result.setRecordCount(numFound);
result.setProductList(products);
// 6)返回结果
return result;
} }

SearchServiceImpl:

@Service
public class SearchServiceImpl implements SearchService { @Autowired
private SearchDao searchDao; private static final int ROWS = 60; @Override
public SearchResult search(String queryString, String catalog_name, String price,
int sort, int page) throws Exception {
// 1、接收Controller传递过来的参数
// 2、创建一个SolrQuery对象
SolrQuery query = new SolrQuery();
// 3、根据参数设置查询条件。。。。
if (queryString != null && !"".equals(queryString)) {
query.setQuery(queryString);
} else {
//显示所有商品
query.setQuery("*:*");
}
//分类名称过滤条件
if (catalog_name != null && !"".equals(catalog_name)) {
query.addFilterQuery("product_catalog_name:" + catalog_name);
}
//价格区间过滤
if (price != null && !"".equals(price)) {
//取价格区间
String[] strings = price.split("-");
query.addFilterQuery("product_price:["+strings[0]+" TO "+strings[1]+"]");
}
//排序条件
//0:升序 1:降序 默认是升序
if (sort != 1) {
query.setSort("product_price", ORDER.asc);
} else {
query.setSort("product_price", ORDER.desc);
}
//设置分页信息
query.setStart((page -1) * ROWS);
query.setRows(ROWS);
//设置默认搜索域
query.set("df", "product_keywords");
//开启高亮显示
query.setHighlight(true);
query.addHighlightField("product_name");
query.setHighlightSimplePre("<em style=\"color:red\">");
query.setHighlightSimplePost("</em>");
// 4、调用dao执行查询
SearchResult searchResult = searchDao.search(query);
// 5、取查询结果
long recordCount = searchResult.getRecordCount();
// 6、计算查询结果的总页数
long pageCount = recordCount / ROWS;
if (recordCount % ROWS > 0) {
pageCount++;
}
searchResult.setPageCount(pageCount);
// 7、返回结果
return searchResult;
} }

SearchController:

@Controller
public class SearchController { @Autowired
private SearchService searchService; @RequestMapping("list")
public String search(String queryString, String catalog_name, String price,
@RequestParam(defaultValue="0")int sort, @RequestParam(defaultValue="1")int page, Model model) throws Exception {
//调用Service查询商品列表
SearchResult searchResult = searchService.search(queryString, catalog_name, price, sort, page);
//把结果传递给jsp
model.addAttribute("result", searchResult);
//查询参数回显
model.addAttribute("queryString", queryString);
model.addAttribute("catalog_name", catalog_name);
model.addAttribute("price", price);
model.addAttribute("sort", sort);
model.addAttribute("page", page);
//返回逻辑视图
return "product_list";
}
}

最新文章

  1. ZOJ 2674 Strange Limit
  2. python 代码片段13
  3. sprintf() in c
  4. 制作越狱版本的ipa文件
  5. CentOS防火墙操作实例(启动、停止、开、闭端口)
  6. 查看linux中的TCP连接数【转】
  7. Toast,AlertDialog的误解
  8. redis 高级配置
  9. chrome开发工具指南(五)
  10. java安全——BASE64
  11. Java基础5:抽象类和接口
  12. 粘包-socketserver实现并发
  13. UVA10129-Play on Words(欧拉路径)
  14. [T-ARA][남주긴 아까워][给别人可惜了]
  15. 018 spark on yarn (Job history)的配置,主要是yarn处跳转到历史聚合页面
  16. 2018面向对象程序设计(Java)第3周学习指导及要求
  17. 基于Spring Task的定时任务调度器实现
  18. 二叉树 Java 实现 前序遍历 中序遍历 后序遍历 层级遍历 获取叶节点 宽度 ,高度,队列实现二叉树遍历 求二叉树的最大距离
  19. Java泛型理解
  20. form表单元素中disabled的元素的值不会提交到服务器

热门文章

  1. angular中子组件通过@Output 触发父组件的方 法
  2. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_01-Eureka注册中心-Eureka介绍
  3. java的servlet执行过程是怎么样的?
  4. Python中列表,元组,字典,集合的区别
  5. Spring Boot学习笔记——Spring Boot与ActiveMQ的集成
  6. 【ARTS】01_35_左耳听风-201900708~201900714
  7. web-自动化测试流程
  8. 《Hadoop》大数据技术开发实战学习笔记(二)
  9. Docker容器中用户权限管理
  10. Windows Server 2012 R2蓝屏