一、dao层的编写SearchItemDao.java
package com.taotao.search.dao;
import java.util.List;
import org.apache.solr.client.solrj.SolrQuery;
import com.taotao.utils.SearchItem;
public interface SearchItemDao {
//从索引库中查询数据
public List<SearchItem> getSearchItem(SolrQuery solrQuery);
}
二、daoImpl层的编写SearchItemDaoImpl.java
package com.taotao.search.dao.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.springframework.beans.factory.annotation.Autowired;
import com.taotao.search.dao.SearchItemDao;
import com.taotao.utils.ExceptionUtil;
import com.taotao.utils.SearchItem;
@Repository
public class SearchItemDaoImpl implements SearchItemDao {
@Autowired
private SolrServer solrServer;
/**
* 从索引库查询数据
*/
@Override
public List<SearchItem> getSearchItem(SolrQuery solrQuery) {
//1.连接 索引库
//2.根据查询条件执行查询
//3.把查询到的数据封装到SearchItem中
//4.返回集合
try {
QueryResponse response = solrServer.query(solrQuery);
SolrDocumentList document = response.getResults();
List<SearchItem> list = new ArrayList<>();
for (SolrDocument solrDocument : document) {
SearchItem item = new SearchItem();
item.setId(solrDocument.get("id").toString());
item.setCatName(solrDocument.get("item_category_name").toString());
item.setImage(solrDocument.get("item_image").toString());
item.setPrice((long) solrDocument.get("item_price"));
item.setSell_point(solrDocument.get("item_sell_point").toString());
item.setTitle(solrDocument.get("item_title").toString());
//将item_title高亮显示
Map<String, Map<String, List<String>>> map = response.getHighlighting();
if (map !=null) {
List<String> resultList = map.get(solrDocument.get("id")).get("item_title");
if (resultList !=null && resultList.size() >0) {
item.setTitle(resultList.get(0));
} else {
item.setTitle(solrDocument.get("item_title").toString());
}
} else {
item.setTitle(solrDocument.get("item_title").toString());
}
list.add(item);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
三、创建分页工具类SearchResult.java在common工程
package com.taotao.utils;
import java.io.Serializable;
import java.util.List;
public class SearchResult implements Serializable{
//商品列表
private List<SearchItem> itemList;
//总记录数
private long recordCount;
//总页数
private long pageCount;
//当前页
private long curPage;
public List<SearchItem> getItemList() {
return itemList;
}
public void setItemList(List<SearchItem> itemList) {
this.itemList = itemList;
}
public long getRecordCount() {
return recordCount;
}
public void setRecordCount(long recordCount) {
this.recordCount = recordCount;
}
public long getPageCount() {
return pageCount;
}
public void setPageCount(long pageCount) {
this.pageCount = pageCount;
}
public long getCurPage() {
return curPage;
}
public void setCurPage(long curPage) {
this.curPage = curPage;
}
}
四、SearchService.java
package com.taotao.search.service;
import com.taotao.utils.SearchResult;
public interface SearchService {
//对应页面上的参数
public SearchResult getSearch(String q, Integer page, Integer pagesize);
}
五、SearchServiceImpl.java
package com.taotao.search.service.impl;
import java.util.List;
import org.apache.solr.client.solrj.SolrQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.taotao.search.dao.SearchItemDao;
import com.taotao.search.service.SearchService;
import com.taotao.utils.SearchItem;
import com.taotao.utils.SearchResult;
@Service
public class SearchServiceImpl implements SearchService {
@Autowired
private SearchItemDao searchItemDao;
@Override
public SearchResult getSearch(String q, Integer page, Integer pagesize) {
//添加查询条件
SolrQuery solrQuery = new SolrQuery();
solrQuery.set("df", "item_keywords");//设置默认的搜索域
if(q!=null && !"".equals(q)){
solrQuery.setQuery(q);
}else{
solrQuery.setQuery("*:*");
}
//设置高亮显示
solrQuery.setHighlight(true);//打开
solrQuery.addHighlightField("item_title");
solrQuery.setHighlightSimplePre("<font color='red'>");
solrQuery.setHighlightSimplePost("</font>");
SearchResult result = new SearchResult();
if(page ==0) page=1;
if(page < 0) page = 1;
int offset = (page -1)*pagesize;//计算第几条开始显示
solrQuery.setStart(offset);
solrQuery.setRows(pagesize);
List<SearchItem> list = searchItemDao.getSearchItem(solrQuery);
result.setItemList(list);//将list添加到SearchResult
//计算总条数
int total = list.size();
//计算总页数
int totalPage = (total+pagesize-1)/pagesize;
result.setCurPage(page);//当前页
result.setPageCount(totalPage);//总页数
result.setRecordCount(total);//总条数
return result;
}
}
六、创建taotao-search-web工程
1. pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.taotao</groupId>
<artifactId>taotao-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.taotao</groupId>
<artifactId>taotao-search-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.taotao</groupId>
<artifactId>taotao-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.taotao</groupId>
<artifactId>taotao-search-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- dubbo相关 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>netty</artifactId>
<groupId>org.jboss.netty</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- 配置插件 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<port>8085</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
2. 添加web.xml
<?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>taotao-search-web</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>taotao-search-web</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>taotao-search-web</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
3. 效果图(将portal里面的东西复制过来,做修改)
4. 修改springmvc.xml
5. controller层编写 SearchController.java
search.jsp
package com.taotao.search.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.taotao.search.service.SearchService;
import com.taotao.utils.SearchResult;
@Controller
public class SearchController {
@Autowired
private SearchService searchService;
/**
* 因为返回的是search.jsp页面,所以用的是String
* @param q
* @param page
* @param model
* @return
*/
@RequestMapping("/search")
public String search(String q, Integer page, Model model){
SearchResult result = searchService.getSearch(q, page, 60);//设置每页的条数为60
model.addAttribute("itemList", result.getItemList());//数据
model.addAttribute("page", result.getCurPage());//当前页
model.addAttribute("totalPages",result.getPageCount());//总页数
return "search";
}
}
6. 修改js/base-v1.js (taotao-portal)
7. taotao-search-service工程applicationContext-service.xml发布服务
扫描二维码关注公众号,回复:
4752839 查看本文章
8. 测试
8.1 在浏览器输入:localhost:8082
出现如下图错误:
修改错误:
8.2 再次测试
出现如图所示:
出现错误:图片未展示出来
8.3 再次输入手机,会出现如图所示:
9. 修复bug
9.1 首页图片未展示
SearchItemDaoImpl.java
//因为数据库中是多张图片,以,分割
//1.现获取图片
String images = solrDocument.get("item_image").toString();
//2.以,分割
String[] imagesArr = images.split(",");
//3.获取第一张图片,我们设定在页面展示的是第一张图片
item.setImage(imagesArr[0]);