学习淘淘商城第四十九课(搜索功能测试)

        经过前面几节的学习,我们把搜索相关代码写完了,这节我们一起测试下搜索功能。

        首先我们要保证zookeeper、redis、image、solr服务都开启。

        接着,我们把taotao-common工程重新打包到本地maven仓库,然后把taotao-search工程也打包到本地maven仓库。

        下面我们依次启动taotao-manager、taotao-content、taotao-search三个服务,然后启动taotao-manager-web、taotao-portal-web、taotao-search-web三个系统。

        启动完之后,我们到淘淘商城首页,如下图所示,我们在搜索框中输入"手机"并按回车进行搜索。


           搜索结果如下图,可以看到,搜索结果乱码了。


          那么,我们怎么解决乱码问题呢?我们可以直接在Controller当中解决,如下图所示。工程默认的编码是"iso8859-1",现在需要把它修改为"utf-8"。


       修改完之后,我们重启taotao-search-web工程,然后我们再在淘淘商城首页的搜索框中输入"手机"然后回车进行查询,便可以看到如下图所示界面,可以看到搜索出结果了,只是由于数据库中存储的图片地址都是测试数据,是无法访问的,因此都没有图片。


          我们可以在淘淘商城后台添加一个关于手机的商品,如下图所示,输入完商品信息后点击"提交"。


        我们到数据库最后一页,可以看到我们刚才添加的手机信息,如下图所示。


        我们到搜索工程,在搜索框中输入"小米"然后回车即可搜索小米的商品,如下图所示,可以看到并没有我们刚才添加的手机,这是什么原因呢?其实很简单,是因为我们刚才添加的商品并没有在索引库中,因此我们需要把数据库中的商品与索引库重新同步一下。


             我们到淘淘商城后台进行同步数据库数据到索引库,如下图所示。点击"导入数据到索引库。由于数据量较大,导入需要几十秒的时间。


            导入成功后,我们再到搜索工程进行搜索,发现这时成功搜索出该手机了!


          但是到这里依然会有个问题,我们在后台添加商品的时候可以指定多张图片,我们试下多张图片的情况下,还能不能正常搜索出带图片的手机。如下图所示,我们添加一款金立手机并上传了三张图片。


        添加完金立M2017手机之后,我们还需要重新将数据库中的数据与索引库进行同步,这里就不啰嗦怎么操作了。同步之后,我们在搜索工程输入"金立M2017"然后回车进行搜索,发现搜索到了结果但是图片无法正常显示。如下图所示。


          这是什么原因造成的呢?其实也很简单,我们看下数据库中存储的数据格式,我们刚添加的手机image字段存储的信息如下所示,可以看到是三张图片地址中间以","分隔拼成的字符串,这样的字符串在页面是无法正常显示的,我们需要把图片进行拆分,显示其中的一张才行。

http://192.168.156.13:8888/group1/M00/00/00/wKicDVkHzTiAVCl3AADZzN2RODM244.jpg,http://192.168.156.13:8888/group1/M00/00/00/wKicDVkHzTiAVZaFAABmf6hpOQM129.jpg,http://192.168.156.13:8888/group1/M00/00/00/wKicDVkHzTiAMvRzAAADTv6ZwbQ551.jpg

           我们到SearchDaoImpl当中进行处理,如下图所示。


          修改后的SearchDaoImpl.java类的代码如下

package com.taotao.search.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
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 org.springframework.stereotype.Repository;

import com.taotao.common.pojo.SearchItem;
import com.taotao.common.pojo.SearchResult;
import com.taotao.search.dao.SearchDao;

@Repository
public class SearchDaoImpl implements SearchDao{
	@Autowired
	private SolrServer solrServer;

	@Override
	public SearchResult search(SolrQuery query) throws Exception {
		//根据query对象进行查询
		QueryResponse response = solrServer.query(query);
		//取查询结果
		SolrDocumentList solrDocumentList = response.getResults();
		//取查询结果总记录数
		long numFound = solrDocumentList.getNumFound();
		//初始化一个SolrResult对象并把总数属性进行赋值
		SearchResult searchResult = new SearchResult();
		searchResult.setTotalNumber(numFound);
		List<SearchItem> itemList = new ArrayList<>();
		//把查询结果封装到SearchItem当中
		for (SolrDocument solrDocument : solrDocumentList) {
			SearchItem searchItem = new SearchItem();
			searchItem.setId((String)solrDocument.get("id"));
			String image = (String)solrDocument.get("item_image");
			if(!StringUtils.isBlank(image)){
				image = image.split(",")[0];
			}
			searchItem.setImage(image);
			searchItem.setItem_category_name((String)solrDocument.get("item_category_name"));
			searchItem.setItem_desc((String)solrDocument.get("item_desc"));
			searchItem.setPrice((long)solrDocument.get("item_price"));
			searchItem.setSell_point((String)solrDocument.get("item_sell_point"));
			//取高亮显示
			Map<String,Map<String,List<String>>> highlighting = response.getHighlighting();
			List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
			String title = "";
			if(list != null && list.size() > 0){
				title = list.get(0);
			} else {
				title = (String)solrDocument.get("item_title");
			}
			searchItem.setTitle(title);
			itemList.add(searchItem);
		}
		//把结果添加到SearchResult当中
		searchResult.setItemList(itemList);
		//返回
		return searchResult;
	}

}

          修改了taotao-search-service,我们便要重启taotao-search工程,重启之后,我们重新搜索"金立M2017"便可以看到图片了,如下图所示。


        下面还有功能没有完善,那就是下一页、上一页,当我们点击上图的下一页时,会看到如下图所示界面,说明请求就不正确,因为它默认访问的端口是8082,而我们的搜索工程的端口是8085,因此我们需要找到控制下一页、上一页功能的js并做下修改。


           我们在search.jsp页面当中可以看到引用了脚本search_main.js,这个js就控制了我们的上一页、下一页的操作。


        我们打开search_main.js文件,在文件中搜索8082,只有一处,我们把8082,修改为8085,如下图所示。


       下面我们到搜索工程再点击"下一页",会看到如下图所示界面,发现已经正常到第2页了,说明上一页、下一页功能也正常了!我们的搜索完成了!!!



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值