学习淘淘商城第四十六课(搜索服务Dao实现)
来源:互联网 发布:淘宝培训学院 编辑:程序博客网 时间:2024/05/24 03:48
我们先来看下上节课我们一起学习的solrj查询测试代码,如下图所示,可以看到,代码的上半部分是比较灵活的,根据用户查询条件的不同而不同,但是红色圈住的那部分代码则是固定的,不论什么查询条件都要执行下面那段代码,因此我们可以考虑将下面那段代码封装起来,写到Dao层。
我们根据在公司的实际操作场景来写,在实际开发中一般都是要有接口和实现类的,因此我们在taotao-search-interface工程新建一个com.taotao.search.dao包,并在该包下新建一个接口类SearchDao,如下图所示。
我们在taotao-search-service工程添加一个com.taotao.search.dao.impl包并在该包下新建SearchDao的实现类SearchDaoImpl,如下图所示。
实现类代码如下:
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.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;@Repositorypublic class SearchDaoImpl implements SearchDao{@Autowiredprivate SolrServer solrServer;@Overridepublic 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"));searchItem.setImage((String)solrDocument.get("item_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;}}
这样,我们的Dao层便写完了。
0 0
- 学习淘淘商城第四十六课(搜索服务Dao实现)
- 学习淘淘商城第四十四课(首页跳转到搜索页面及搜索实现分析)
- 学习淘淘商城第四十九课(搜索功能测试)
- 学习淘淘商城第四十七课(搜索功能Service实现)
- 学习淘淘商城第四十八课(商品搜索功能Controller实现)
- 学习淘淘商城第三十八课(搜索服务搭建)
- 学习淘淘商城第二十六课(内容分类管理)
- 学习淘淘商城第三十六课(Solr集群搭建)
- 学习淘淘商城第七十六课(nginx负载均衡)
- 学习淘淘商城第六十六课(商品详情缓存的实现)
- 学习淘淘商城第八十六课(单点登录用户注册Controller层实现及测试)
- 学习淘淘商城第九十六课(购物车实现分析及工程搭建)
- 淘淘商城系列——商品搜索功能Dao实现
- 学习淘淘商城第四十三课(实现从数据库导入数据到索引库)
- 学习淘淘商城第三十九课(搜索系统搭建)
- 学习淘淘商城第十二课(发布dubbo服务)
- 学习淘淘商城第十三课(引用dubbo服务)
- 学习淘淘商城第十四课(服务调用测试)
- jq中的toggle和toggleClass
- RocketMQ源码解析:Message存储
- logistic回归
- java学习【知识点及代码10】
- HDU1698 Just a Hook(线段树+成段更新+lazy标记)
- 学习淘淘商城第四十六课(搜索服务Dao实现)
- 倒着打印单链表
- Perl调用shell命令方法小结
- 指针
- Javascript中对象深拷贝的应用
- Java 概述
- 联通sgip1.2接入笔记
- PAT1014. 福尔摩斯的约会 (20)
- react-router4 实现按需加载并利用withRouter传递props