搜索功能的实现

效果图

模块划分

需要的我们自己写dao层mapper层

dao层存在我们搜索的结果

/*** 商品搜索dao*/
@Repository
public class SearchDao {@Autowiredprivate SolrServer solrServer;/*** 根据查询条件查询索引库* @param solrQuery* @return*/public SearchResult search(SolrQuery solrQuery) throws SolrServerException {//根据solrQuery查询索引库QueryResponse query = solrServer.query(solrQuery);//取查询结果SolrDocumentList results = query.getResults();//取查询结果总记录数long numFound = results.getNumFound();//创建一个SearchResullt对象SearchResult searchResult=new SearchResult();searchResult.setRecordCount(numFound);//取商品列表,需要取高亮的显示Map<String, Map<String, List<String>>> highlighting = query.getHighlighting();//创建一个存储商品列表的集合List<SearchItem> itemList =new ArrayList<>();//遍历文档列表,从域中去内容取高亮中的需要的字段id必须要有for (SolrDocument document :results) {//创建一个SearchItem对象SearchItem searchItem=new SearchItem();//设置需要SearchItem对象的属性searchItem.setId((String) document.get("id"));searchItem.setCategory_name((String) document.get("item_category_name"));searchItem.setImage((String) document.get("item_image"));searchItem.setPrice((Long) document.get("item_price"));searchItem.setSell_point((String) document.get("item_sell_point"));//取高亮显示List<String> list = highlighting.get(document.get("id")).get("item_title");//创建一个title空字符串String title="";//判断title数据中是否有高度数据if (list !=null && list.size()>0){//有高亮数据title=list.get(0);}else {//没有高亮数据就取文档中的数据title= (String) document.get("item_title");}//将标题添加到searchItem对象中searchItem.setTitle(title);//添加到商品列表itemList.add(searchItem);}//添加商品列表到SearchResullt对象searchResult.setItemList(itemList);//返回结果return searchResult;}
}

Itemmapper.xml配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.e3mall.search.mapper.ItemMapper"><!--查询商品信息--><select id="getItemList" resultType="com.e3mall.common.pojo.SearchItem">SELECTa.id,a.title,a.sell_point,a.price,a.image,b.name category_nameFROMtb_item aLEFT JOIN tb_item_cat bon a.cid=b.idWHERE a.status=1;</select><!--通过id查询SearchItem pojo中的属性数据--><select id="getItemById" resultType="com.e3mall.common.pojo.SearchItem" parameterType="long">SELECTa.id,a.title,a.sell_point,a.price,a.image,b.name category_nameFROMtb_item aLEFT JOIN tb_item_cat bon a.cid=b.idWHERE a.status=1 and a.id=#{itemId};</select></mapper>

依照我红色的字体写对应ItemMapper接口类即可附图依照

SearchItemServiceImpl.java

/*** 商品数据索引库Service*/
@Service
public class SearchItemServiceImpl implements SearchItemService {@Autowiredprivate ItemMapper itemMapper;@Autowiredprivate SolrServer solrServer;/*** 将删商品数据导入索引库* @return*/@Overridepublic E3Result importItems() {try {//查询商品列表List<SearchItem> itemList = itemMapper.getItemList();//导入到索引库for (SearchItem item :itemList) {//创建文档对象SolrInputDocument document=new SolrInputDocument();//向文档添加域document.addField("id",item.getId());document.addField("item_title",item.getTitle());document.addField("item_sell_point",item.getSell_point());document.addField("item_price",item.getPrice());document.addField("item_image",item.getImage());document.addField("item_category_name",item.getCategory_name());//写入索引库solrServer.add(document);}//提交solrServer.commit();//返回成功return E3Result.ok();}catch (Exception e){e.printStackTrace();return E3Result.build(500,"商品导入失败!");}}
}

applicationContent-service.xml配置

代码

<dubbo:service interface="com.e3mall.search.service.SearchItemService" ref="searchItemServiceImpl" timeout="600000"/>

表现层

/*** 商品搜索Controller*/
@Controller
public class SearchController {@Autowiredprivate SearchService searchService;@Value("${SEACHER_RESULT_ROWS}")private Integer SEACHER_RESULT_ROWS;/*** 分页查询功能* @param keyword 查询添加* @param page 结果从第几条记录开始显示这里我们设置了默认值1* @param model* @return*/@RequestMapping("/search")public  String search(String keyword, @RequestParam(defaultValue = "1") Integer page, Model model) throws Exception {keyword=new String(keyword.getBytes("ISO-8859-1"),"utf-8");//调用服务查询商品列表SearchResult result = searchService.search(keyword, page, SEACHER_RESULT_ROWS);//把结果传递给页面model.addAttribute("query",keyword);model.addAttribute("totalPages",result.getTotalPages());model.addAttribute("page",page);model.addAttribute("recourdCount",result.getRecordCount());model.addAttribute("itemList",result.getItemList());//返回逻辑页面return "search";}
}

springmvc.xml引入服务

<!-- 引用dubbo服务 -->
<dubbo:application name="e3-manager-web"/>
<dubbo:registry protocol="zookeeper" address="192.168.25.128:2181"/>
<!--调用搜索服务-->
<dubbo:reference interface="com.e3mall.search.service.SearchService" id="searchService" />

宜立方商城——搜索功能的实现相关推荐

  1. 淘淘商城宜立方商城第二天,关于查询商品,浏览器页面无法显示

    淘淘商城宜立方商城第二天,关于查询商品,浏览器页面无法显示 新手初学分布式集群和maven搭建容易遇到各种各样的错误,第一天项目就遇到个tomcat不报错但是启动不起来,停在log4j让我头疼了两天之 ...

  2. 宜立方商城 搭建Maven第一天心得

    1.0. 使用maven的好处 1.使用maven管理工程. 2.Jar包的管理 3.工程之间的依赖管理 4.自动打包 1.1. 后台工程搭建分析 Maven的常见打包方式:jar.war.pom P ...

  3. 宜立方商城—— 购物车增加、删除、修改数量、删除选中商品和清空购物车的实现

    1.  购物车的实现 1.1. 功能分析 1.购物车是一个独立的表现层工程. 2.添加购物车不要求登录.可以指定购买商品的数量. 3.展示购物车列表页面 4.修改购物车商品数量 5.删除购物车商品 模 ...

  4. 宜立方商城第二天心得

    1.将工程改造为SOA架构 1.1分析 聚合工程必须有个war包 需要拆工程 一个服务层和表现层     所有数据都是通过调用服务层获得的 需要把web层单独提取出来 提成一个独立的工程 也可以变成一 ...

  5. PHP商城的搜索功能

    大家好,今天分享一个商城的搜索功能,建立在上一篇文章的基础上实现的. 搜索功能简单的说就是通过sql语句在数据库中实现模糊查找 连接数据库,实现分页功能(可以参考上一篇文章) 定义一个变量接收传过来的 ...

  6. 淘淘商城第56讲——测试一下商品搜索功能

    到这里,我相信大家也是不容易,我自己也算是很不容易地写到这里了,希望自己能一直写下去.之前我们就差不多把商品搜索功能实现了,本文我们来一起测试下该商品搜索功能. 首先我们要确保Zookeeper服务器 ...

  7. 框架 day81 涛涛商城项目-实现首页搜索功能,商品详情,描述,规格展示

    淘淘商城第九天 讲师:入云龙 今天的内容: 1.在taotao-portal工程中调用taotao-search工程发布的服务.实现商品搜索功能. 2.点击商品的图片,打开商品详情页面 a)      ...

  8. (转)淘淘商城系列——商品搜索功能表现层实现

    http://blog.csdn.net/yerenyuan_pku/article/details/72913431 首先我们在taotao-search-web工程中需要添加对搜索服务的引用,如下 ...

  9. (转)淘淘商城系列——商品搜索功能Service实现

    http://blog.csdn.net/column/details/15737.html 首先我们在taotao-search-interface工程中新建一个SearchService接口,并在 ...

最新文章

  1. 基于Redis的服务治理平台!
  2. 浙江大学 | 深度域自适应和小目标检测挑战、技术和数据集:调研
  3. .Net运行时的相互关系
  4. mssql自定义函数中使用游标
  5. EditText 显示明文和密码
  6. php面试专题---MYSQL查询语句优化
  7. Chapter 4, FAQ about Master Theorm, exercises and problems
  8. 女生适合做程序员吗?
  9. 分页存储过程2005
  10. 后缀自动机线性构造方法
  11. vs2015ef链接mysql_【转载】VS2015 + EF6连接MYSQL5.6
  12. Percona XtraDB Cluster(PXC)原理
  13. 设置idea类注释模板
  14. 用Python画填色的中国分省地图(数据+源代码)
  15. 音频剪辑软件哪个好用
  16. nmds与mds的区别_通过ggplot2为NMDS的椭圆添加特定的形状和线型
  17. 安全测试(五)Android APK软件安全 APP应用安全 手机软件安全 apk安全 apk反编译 应用日志窃取 apk漏洞 应用软件本身功能漏洞 高危权限泄密风险等 移动应用常规安全讲解
  18. 微信小程序与内嵌网页交互实现支付功能
  19. 网络篇 谈谈对学习网络的看法
  20. api接口文档编辑工具-YApi安装部署(window版)

热门文章

  1. python为数组里的每一个元素加1的代码
  2. 短信验证码存在的威胁
  3. Visio中mathtype公式粘贴到word中模糊
  4. phaser运用中,dota战术板
  5. aspen求理论塔板数_Aspen中塔设计步骤
  6. HTML期末大作业 ~ 凤阳智慧旅游官方旗舰店(我的家乡)网页设计作业成品(HTML+CSS+JavaScript)
  7. 【AdaSeq基础】30+NER数据汇总,涉及多行业、多模态命名实体识别数据集收集
  8. redis基础超详细 思维导图
  9. Vue进阶(四十三):Vuex之Mutations详解
  10. 顺序表和单链表基本操作的实现