博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lucene之solr京东案例
阅读量:4585 次
发布时间:2019-06-09

本文共 9428 字,大约阅读时间需要 31 分钟。

  • 新建web工程

  • 导入jar包

 

  • 编写springmvc配置文件

  • 编写web.xml

 

solrJD
spmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
5
spmvc
*.action
index.html
index.htm
index.jsp

 

  •  导入静态资源文件

  • 建立包结构

  • 创建pojo

商品实体类

package com.jd.pojo;public class Product {    // 商品编号    private String pid;    // 商品名称    private String name;    // 商品分类名称    private String catalog_name;    // 价格    private float price;    // 商品描述    private String description;    // 图片名称    private String picture;    public String getPid() {        return pid;    }    public void setPid(String pid) {        this.pid = pid;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getCatalog_name() {        return catalog_name;    }    public void setCatalog_name(String catalog_name) {        this.catalog_name = catalog_name;    }    public float getPrice() {        return price;    }    public void setPrice(float price) {        this.price = price;    }    public String getDescription() {        return description;    }    public void setDescription(String description) {        this.description = description;    }    public String getPicture() {        return picture;    }    public void setPicture(String picture) {        this.picture = picture;    }}

 

封装分页实体类

package com.jd.pojo;import java.util.List;public class ResultModel {    // 商品列表    private List
list; // 商品总数 private Long recordCount; // 总页数 private Long pageCount; // 当前页 private long curPage; public List
getList() { return list; } public void setList(List
list) { this.list = list; } public Long getRecordCount() { return recordCount; } public void setRecordCount(Long recordCount) { this.recordCount = recordCount; } public Long getPageCount() { return pageCount; } public void setPageCount(Long pageCount) { this.pageCount = pageCount; } public long getCurPage() { return curPage; } public void setCurPage(long curPage) { this.curPage = curPage; } }
  •  ProductMapper
package com.jd.mapper;import org.apache.solr.client.solrj.SolrQuery;import com.jd.pojo.Product;import com.jd.pojo.ResultModel;public interface ProductMapper {    /**     * 分页条件查询所有商品     * @param solrQuery     * @return     * @throws Exception      */    public ResultModel
findAll(SolrQuery solrQuery) throws Exception;}
  • ProductMapperImpl
package com.jd.mapper;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.impl.HttpSolrServer;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.common.SolrDocument;import org.apache.solr.common.SolrDocumentList;import org.springframework.stereotype.Repository;import com.jd.pojo.Product;import com.jd.pojo.ResultModel;@Repositorypublic class ProductMapperImpl implements ProductMapper {    @Override    public ResultModel
findAll(SolrQuery solrQuery) throws Exception { // 创建连接solr服务器对象 SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/collection1"); // 创建ResultModel对象 ResultModel
results = new ResultModel
(); // 创建集合,存储Product List
productList = new ArrayList
(); // 执行查询 QueryResponse queryResponse = solrServer.query(solrQuery); // 获取Document结果集 SolrDocumentList solrDocumentList = queryResponse.getResults(); // 设置总记录数 results.setRecordCount(solrDocumentList.getNumFound()); // 高亮显示 Map
>> highlighting = queryResponse.getHighlighting(); // 遍历结果集 for (SolrDocument doc : solrDocumentList) { // 创建Product对象 Product product = new Product(); // 设置商品的编号 product.setPid((String) doc.get("id")); List
list = highlighting.get(doc.get("id")).get("product_name"); if (list == null) { // 设置商品的名称 product.setName((String) doc.get("product_name")); } else { // 设置高亮显示名称 product.setName(list.get(0)); } // 设置商品分类名称 product.setCatalog_name((String) doc.get("product_catalog_name")); // 设置商品价格 product.setPrice((Float) doc.get("product_price")); // 设置商品图片名称 product.setPicture((String) doc.get("product_picture")); // 将商品添加到集合中 productList.add(product); } results.setList(productList); return results; }}
  • ProductService
package com.jd.service;import com.jd.pojo.Product;import com.jd.pojo.QueryVo;import com.jd.pojo.ResultModel;public interface ProductService {    /**     * 分页条件查询所有商品     *      * @param solrQuery     * @return     * @throws Exception     */    public ResultModel
findAll(QueryVo queryVo) throws Exception;}
  • ProductServiceImpl
package com.jd.service;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrQuery.ORDER;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.jd.mapper.ProductMapper;import com.jd.pojo.Product;import com.jd.pojo.QueryVo;import com.jd.pojo.ResultModel;/** * 实现类 * @author Easong * */@Servicepublic class ProductServiceImpl implements ProductService {    // 每页显示的条数    private final static Integer PAGE_SIZE = 32;    @Autowired    private ProductMapper productMapper;    @Override    public ResultModel
findAll(QueryVo queryVo) throws Exception { // 创建solr查询对象 SolrQuery solrQuery = new SolrQuery(); // 设置查询关键字 if (queryVo.getQueryString() != null && !"".equals(queryVo.getQueryString())) { solrQuery.setQuery(queryVo.getQueryString()); } else { solrQuery.setQuery("*:*"); } // 设置过滤查询--商品类别 if (queryVo.getCatalog_name() != null && !"".equals(queryVo.getCatalog_name())) { solrQuery.setFilterQueries("product_catalog_name:" + queryVo.getCatalog_name()); } // 设置价格排序 if ("1".equals(queryVo.getSort())) { // 升序 solrQuery.setSort("product_price", ORDER.asc); } else if("0".equals(queryVo.getSort())){ // 降序 solrQuery.setSort("product_price", ORDER.desc); } // 设置价格查询区间 if (queryVo.getPrice() != null && !"".equals(queryVo.getPrice())) { String[] split = queryVo.getPrice().split("-"); if (split != null && split.length > 1) { solrQuery.setFilterQueries("product_price:[" + split[0] + " TO " + split[1] + "]"); } } // 分页查询 if (queryVo.getPage() == null) { queryVo.setPage(1); } Integer currPage = queryVo.getPage(); // 开始索引 solrQuery.setStart((currPage - 1) * PAGE_SIZE); // 每页显示条数 solrQuery.setRows(PAGE_SIZE); // 设置默认搜索域 solrQuery.set("df", "product_keywords"); // 开启高亮显示 solrQuery.setHighlight(true); // 设置显示域名 solrQuery.addHighlightField("product_name"); // 设置前缀 solrQuery.setHighlightSimplePre("
"); // 设置后缀 solrQuery.setHighlightSimplePost(""); // 调用Mapper层 ResultModel
resultModel = productMapper.findAll(solrQuery); // 设置当前页 resultModel.setCurPage(currPage.longValue()); // 设置总页数 Double pageSize = Math.ceil(resultModel.getRecordCount().doubleValue() / PAGE_SIZE); resultModel.setPageCount(pageSize.longValue()); return resultModel; }}
  • ProductController
package com.jd.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import com.jd.pojo.Product;import com.jd.pojo.QueryVo;import com.jd.pojo.ResultModel;import com.jd.service.ProductService;@Controllerpublic class ProductController {    @Autowired    private ProductService productService;    @RequestMapping("/list")    public String list(QueryVo queryVo, Model model) throws Exception {        ResultModel
resultModel = productService.findAll(queryVo); // 将结果存入到model域中 model.addAttribute("list", resultModel); // 查询条件回显 model.addAttribute("queryString", queryVo.getQueryString()); model.addAttribute("catalog_name", queryVo.getCatalog_name()); model.addAttribute("price", queryVo.getPrice()); model.addAttribute("curPage", queryVo.getPage()); model.addAttribute("sort", queryVo.getSort()); return "product_list"; }}
    •  源码地址以及静态页面  链接: https://pan.baidu.com/s/1miLjfkc 密码: ysks

转载于:https://www.cnblogs.com/easong/p/6258280.html

你可能感兴趣的文章
《代码大全》学习之--使用变量的一般事项
查看>>
JS位操作符
查看>>
mongodb
查看>>
VC++使用socket进行TCP、UDP通信实例总结
查看>>
Docker 构建网络服务后本机不能访问
查看>>
element ui table单选框点击全选问题
查看>>
Prometheus+Grafana监控Kubernetes
查看>>
年假总述
查看>>
BIEE一些目录
查看>>
南阳97
查看>>
【LibreOJ 6278】 数列分块入门 2 (分块)
查看>>
利用Jmeter模拟Github登录
查看>>
解决mybatis空字段null字段不返回
查看>>
生命的意义
查看>>
Box-Muller 与 ziggurat
查看>>
zookeeper+dubbo问题
查看>>
dubbo zookeeper图解入门配置
查看>>
winform如何不卡界面
查看>>
Random随机库
查看>>
AFNetworking 3.0x版本最新特性
查看>>