Dao:
@Repository
public class SearchDao {
@Autowired
private SolrServer solrServer;
public SearchResult search(SolrQuery query) throws Exception{
//根据查询条件查询索引库
QueryResponse queryResponse = solrServer.query(query);
//取查询结果总记录数
SolrDocumentList results = queryResponse.getResults();
long numFound = results.getNumFound();
//创建一个返回结果对象
SearchResult searchResult = new SearchResult();
searchResult.setRecordCount(numFound);
//创建一个商品列表对象
List<SearchItem> itemList = new ArrayList<>();
//取商品列表
//取高亮后的结果
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
for (SolrDocument solrDocument : results) {
//获取商品信息
SearchItem searchItem = new SearchItem();
searchItem.setCategory_name(solrDocument.get("XXXX"));
searchItem.setId(solrDocument.get("XXX"));
searchItem.setImage(solrDocument.get("XXX"));
searchItem.setPrice(solrDocument.get("XXX"));
searchItem.setSell_point(solrDocument.get("XXX"));
//取高亮结果
List<String> list = highlighting.get(solrDocument.get("id")).get("XXX");
String itemTitle = "";
if (list != null && list.size() > 0) {
itemTitle = list.get(0);
} else {
itemTitle = (String) solrDocument.get("XXX");
}
searchItem.setTitle(itemTitle);
//添加到商品列表
itemList.add(searchItem);
}
//将List set 到结果
searchResult.setItemList(itemList);
return searchResult;
}
}
Service:
@Service
public class SearchServiceImpl implements SearchService {
@Autowired
private SearchDao searchDao;
@Override
public SearchResult search(String keyWord, int page, int rows) throws Exception {
//创建一个SolrQuery对象
SolrQuery query = new SolrQuery();
//设置查询条件
query.setQuery(keyWord);
//设置分页条件
query.setStart((page - 1) * rows);
//设置rows
query.setRows(rows);
//设置默认搜索域
query.set("df", "title");
//设置高亮显示
query.setHighlight(true);
query.addHighlightField("item_title");
query.setHighlightSimplePre("<em style=\"color:red\">");
query.setHighlightSimplePost("</em>");
//执行查询
SearchResult searchResult = searchDao.search(query);
//计算总页数
int recourdCount = searchResult.getRecourdCount();
int pages = recourdCount / rows;
if (recourdCount % rows > 0) pages++;
//设置到返回结果
searchResult.setTotalPages(pages);
return searchResult;
}
}