学习淘淘商城第四十六课(搜索服务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
原创粉丝点击