淘淘商城23_在Linux上的操作_solrJ客戶端_02增刪改查
阿新 • • 發佈:2019-01-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釋出服務
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 解決亂碼:如上圖輸入手機
這是因為亂碼的問題,修改如圖:
測試