学习淘淘商城第四十六课(搜索服务Dao实现)

         我们先来看下上节课我们一起学习的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;

@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"));
			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层便写完了。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值