博客的内容我希望对读者有用,如果哪些知识点不清楚,我们可以交流,共同学习。。。。
前提工作准备完毕,着手开发网站了。首先把环境搭建好,导入solr相关jar包和springmvc的jar包。
我今天讲的是一个网站商品显示功能,通过查询商品名称,价格区间,商品分类来显示。
springmvc.xml配置如下:
<!-- 包扫描 -->
<context:component-scan base-package="xxxxxxx"></context:component-scan>
<!-- 注解驱动 -->
<mvc:annotation-driven/>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<bean class="org.apache.solr.client.solrj.impl.HttpSolrServer">
<constructor-arg value="http://localhost:8080/solr/products"></constructor-arg> -----索引库在solr服务器的地址
</bean>
dao层代码:
@Repository
public class ProductDaoImpl implements ProductDao {
@Autowired
private HttpSolrServer solrServer;
@Override
public Page queryProduct(SolrQuery solrQuery) throws Exception {
Page page = new Page();
List<Products> pList = new ArrayList<Products>();
QueryResponse response = solrServer.query(solrQuery);
//获取文档集合
SolrDocumentList results = response.getResults();
//获取总命中数
Long numFound = results.getNumFound();
//设置总记录数
page.setRecordCount(numFound.intValue());
//保存数据到products
for (SolrDocument doc : results) {
Products products = new Products();
//设置商品pid
String pid = (String) doc.get("id");
products.setPid(pid);
//设置商品图片
String product_picture = (String) doc.get("product_picture");
products.setPicture(product_picture);
//设置商品价格
Float product_price = (Float) doc.get("product_price");
products.setPrice(product_price);
//设置商品名称
String product_name = (String) doc.get("product_name");
Map<String, Map<String, List<String>>> map = response.getHighlighting();
Map<String, List<String>> map2 = map.get(pid);
List<String> list = map2.get("product_name");
if(list!=null && list.size()>0){
product_name=list.get(0);
}
products.setName(product_name);
pList.add(products);
}
page.setProductList(pList);
return page;
}
service层:
@Autowired
private ProductDao productDao;
@Override
public Page queryProduct(String queryString, String catalog_name, String price, String sort, Integer page) throws Exception {
SolrQuery solrQuery = new SolrQuery();
//设置主查询
if(queryString!=null && !"".equals(queryString)){
solrQuery.setQuery(queryString);
}else{
//solrQuery.set();
solrQuery.setQuery("*:*");
}
//查询分类名称
if(catalog_name!=null && !"".equals(catalog_name)){
solrQuery.addFilterQuery("product_catalog_name:"+catalog_name);
}
//设置价格区间
if(price!=null && !"".equals(price)){
String[] split = price.split("-");
solrQuery.addFilterQuery("product_price:["+split[0]+" TO " +split[1]+"]");
}
//排序
if("1".equals(sort)){
solrQuery.addSort("product_price",ORDER.desc);
}else{
solrQuery.addSort("product_price",ORDER.asc);
}
// 设置分页
if(page==null){
page=1;
}
solrQuery.setStart((page-1)*Constants.pageSize);//设置起始值
solrQuery.setRows(Constants.pageSize);//设置每页数据大小
//设置默认查询字段
solrQuery.set("df","product_keywords");
// 9.设置高亮
// 开启高亮
solrQuery.setHighlight(true);
// 指定设置高亮字段
solrQuery.addHighlightField("product_name");
// 指定设置高亮显示前缀
solrQuery.setHighlightSimplePre("<font color='red'>");
//指定设置高亮显示后缀
solrQuery.setHighlightSimplePost("</font>");
Page pageBean = productDao.queryProduct(solrQuery);
//获取总记录数
Integer recordCount = pageBean.getRecordCount();
//总页数
Integer pageCount = (int) Math.floor(recordCount/Constants.pageSize);
pageBean.setPageCount(pageCount);
//s设置起始页
pageBean.setCurPage(page);
return pageBean;
}