solr案例
来源:互联网 发布:2016淘宝开店营业执照 编辑:程序博客网 时间:2024/06/07 16:57
1、原型分析
2、业务流程
3、索引库的更新
1、实时更新。商品修改后直接更新索引库。
2、定时更新。定时使用dataimport插件更新全部商品信息。
4、实体类
1、商品类对象
publicclass ProductModel {
// 商品编号
private String pid;
// 商品名称
private String name;
// 商品分类名称
private String catalog_name;
// 价格
privatefloatprice;
// 商品描述
private String description;
// 图片名称
private String picture;
public String getPid() {
returnpid;
}
2、返回实体类,根据上面的原型而来
publicclass ResultModel {
// 商品列表
private List<ProductModel> productList;
// 商品总数
private Long recordCount;
// 总页数
privateintpageCount;
// 当前页
privateintcurPage;
5、控制层Controller
1、参数配置(具体参数,请看jsp)
- 查询条件:String queryString (商品描述)
- 过滤条件,商品分类名称:String catalog_name
- 价格区间的过滤条件,价格区间格式:0-10,11-20,21-30,30-*:String price
- 排序条件,根据价格排序,可以只传递排序方式0:升序 1:降序:String sort
- 分页条件,只需要得到页码即可,每页显示商品的数量定义常量:Integer page
2、代码如下
@Controller
publicclass ProductController {
@Autowired
private ProductService service;
@RequestMapping("/list")
public String queryProduct(String queryString, String catalog_name, String price,
String sort, Integer page, Model model) {
//执行查询
ResultModel resultModel = null;
try {
resultModel = service.queryProduct(queryString, catalog_name, price, sort, page);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//把查询结果传递到页面
model.addAttribute("result", resultModel);
//参数回显
model.addAttribute("queryString", queryString);
model.addAttribute("catalog_name", catalog_name);
model.addAttribute("price", price);
model.addAttribute("sort", sort);
model.addAttribute("page", page);
//返回jsp的名称
///WEB-INF/jsp/ + product_list + .jsp
return"product_list";
}
}
6、service层
@Service
publicclass ProductServiceImpl implements ProductService {
@Autowired
private ProductDao productDao;
@Override
public ResultModel queryProduct(String queryString, String catalog_name,
String price, String sort, Integer page) throws Exception {
//拼装查询条件
SolrQuery query = new SolrQuery();
//查询条件
if (null != queryString && !"".equals(queryString)) {
query.setQuery(queryString);
} else {
query.setQuery("*:*");
}
//商品类别过滤
if (null != catalog_name && !"".equals(catalog_name)) {
query.addFilterQuery("product_catalog_name:" + catalog_name);
}
//价格过滤
if (null != price && !"".equals(price)) {
String[] strings = price.split("-");
query.addFilterQuery("product_price:["+strings[0]+" TO "+strings[1]+"]");
}
//排序条件
if ("1".equals(sort)) {
query.setSort("product_price", ORDER.desc);
} else {
query.setSort("product_price", ORDER.asc);
}
//分页处理
if (null == page) page = 1;
int start = (page - 1) * Global.PAGE_SIZE;
query.setStart(start);
query.setRows(Global.PAGE_SIZE);
//设置默认搜索域
query.set("df", "product_keywords");
//高亮设置
query.setHighlight(true);
query.addHighlightField("product_name");
query.setHighlightSimplePre("<span style=\"color:red\">");
query.setHighlightSimplePost("</span>");
//执行查询
ResultModel resultModel = productDao.queryProduct(query);
//计算总页数
Long recordCount = resultModel.getRecordCount();
int pages = (int) (recordCount / Global.PAGE_SIZE);
if (recordCount % Global.PAGE_SIZE > 0) {
pages++;
}
resultModel.setPageCount(pages);
resultModel.setCurPage(page);
return resultModel;
}
}
7、Dao层,查询结果
@Repository
publicclass ProductDaoImpl implements ProductDao {
@Autowired
private SolrServer solrServer;
@Override
public ResultModel queryProduct(SolrQuery query) throws Exception {
//执行查询
QueryResponse queryResponse = solrServer.query(query);
//取商品列表
SolrDocumentList solrDocumentList = queryResponse.getResults();
//商品列表
List<ProductModel> productList = new ArrayList<>();
//遍历商品列表
for (SolrDocument solrDocument : solrDocumentList) {
ProductModel productModel = new ProductModel();
productModel.setPid((String) solrDocument.get("id"));
//取高亮显示
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
List<String> list = highlighting.get(solrDocument.get("id")).get("product_name");
String productName = "";
if (null != list && list.size() > 0) {
productName = list.get(0);
} else {
productName = (String) solrDocument.get("product_name");
}
productModel.setName(productName);
productModel.setCatalog_name((String) solrDocument.get("product_catalog_name"));
productModel.setPrice((float) solrDocument.get("product_price"));
productModel.setPicture((String) solrDocument.get("product_picture"));
//添加到商品列表
productList.add(productModel);
}
//返回值对象
ResultModel resultModel = new ResultModel();
resultModel.setProductList(productList);
resultModel.setRecordCount(solrDocumentList.getNumFound());
return resultModel;
}
8、jsp不介绍
9、springmvc.xml,需要配置solr,HttpSolrServer
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd ">
<!-- 配置扫描包 -->
<context:component-scanbase-package="com.itheima.jd"/>
<!-- 配置注解驱动 -->
<mvc:annotation-driven/>
<!-- jsp视图解析器 -->
<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<propertyname="prefix"value="/WEB-INF/jsp/"></property>
<!-- 后缀 -->
<propertyname="suffix"value=".jsp"></property>
</bean>
<beanclass="org.apache.solr.client.solrj.impl.HttpSolrServer">
<constructor-argvalue="http://localhost:8080/solr/"></constructor-arg>
</bean>
</beans>
10、可以访问,结果未实现,但是代码很简单,我也看懂了。相信大家也都看懂了
11、代码位置
- solr案例
- solr实际案例
- Solr优化案例分析
- solr检索案例
- ElasticSearch+Solr几个案例笔记
- solr的修改操作案例
- Solr之入门案例-yellowcong
- Lucene/Solr/ElasticSearch搜索问题案例分析
- Solr单集代码调用案例
- 【SOLR集群】分布式搜索部署SOLRCLOUD案例图文
- 全文检索solr在商城案例中的使用
- Solr
- solr
- solr
- solr
- solr
- solr
- Solr
- Wamp搭建的服务器网页在局域网内无法访问
- 摩尔定律还有效吗
- 编程第二课 编程概述
- 推荐系统不相信眼泪,但此算法会给你些安慰
- java 教学视频
- solr案例
- string的总结
- 中断的上半部分和下半部分
- UVA 10618
- javase
- 重建二叉树
- Loadrunner的简介
- ccf201312-2
- 反汇编——结构体作为局部变量的传参和返回值的本质测试