solr整合springmvc开发(二)

博客的内容我希望对读者有用,如果哪些知识点不清楚,我们可以交流,共同学习。。。。大笑

前提工作准备完毕,着手开发网站了。首先把环境搭建好,导入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;
    }

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值