淘淘商城23_在Linux上的操作_solrJ客户端_02增删改查

一、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]);

测试 :

9.2 解决乱码:如上图输入手机

这是因为乱码的问题,修改如图:

测试

猜你喜欢

转载自blog.csdn.net/fjz_lihuapiaoxiang/article/details/85236282