- 浏览: 61454 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (117)
- RPC相关 (4)
- mvc_controller (3)
- mvc_model (3)
- maven (4)
- mvc_view (5)
- IO (2)
- 业务相关 (2)
- MQ (7)
- 搜索引擎 (3)
- zookeeper (2)
- 工具相关 (4)
- 编辑错误 (1)
- tomcat (1)
- 单元测试 (1)
- 负载均衡 (1)
- ubuntu (1)
- nginx (1)
- dubbo (2)
- 网络站点分发 (1)
- 电商-支付相关 (10)
- 电商订单业务相关 (3)
- Core java1 (3)
- Core Java (12)
- 多线程高并发(并发包/线程/锁) (10)
- 数据库+缓存 (17)
- springcloud (2)
- jvm (5)
- 日志相关 (1)
- 算法 (3)
- spring (2)
- 分布式一致性算法 (1)
最新评论
pom.xml:
spring-mvc.xml:
Product.java
ResultModel.java
controller:
ProductService.java
ProductServiceImpl.java
ProductMapper.java
ProductMapperImpl.java
<!--solr搜索引擎--> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-core</artifactId> <version>4.10.3</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj --> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>4.10.3</version> </dependency>
spring-mvc.xml:
<!-- JSP视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> //返回jsp解析用 <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
Product.java
package org.xdemo.example.SpringActivemq.model; public class Product { // 商品编号 private String id; // 商品名称(发送solr请求用) private String product_name; // 商品分类名称 private String catalog_name; // 价格 private float product_price; // 商品描述 private String description; // 图片名称 private String product_picture; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getProduct_name() { return product_name; } public void setProduct_name(String product_name) { this.product_name = product_name; } public String getCatalog_name() { return catalog_name; } public void setCatalog_name(String catalog_name) { this.catalog_name = catalog_name; } public float getProduct_price() { return product_price; } public void setProduct_price(float product_price) { this.product_price = product_price; } public String getProduct_picture() { return product_picture; } public void setProduct_picture(String product_picture) { this.product_picture = product_picture; } }
ResultModel.java
package org.xdemo.example.SpringActivemq.model; import java.util.List; public class ResultModel<T> { // 商品列表 private List<T> list; // 商品总数 private Long recordCount; // 总页数 private Long pageCount; // 当前页 private Long curPage; public List<T> getList() { return list; } public void setList(List<T> 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; } }
controller:
package org.xdemo.example.SpringActivemq.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 org.springframework.web.bind.annotation.RequestMethod; import org.xdemo.example.SpringActivemq.model.Product; import org.xdemo.example.SpringActivemq.model.QueryVo; import org.xdemo.example.SpringActivemq.model.ResultModel; import org.xdemo.example.SpringActivemq.service.ProductService; @Controller @RequestMapping("/solrJD") public class ProductController { @Autowired private ProductService productService; @RequestMapping(value="/list", method = RequestMethod.GET) public String list(QueryVo queryVo, Model model) throws Exception { ResultModel<Product> 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"; } }
ProductService.java
package org.xdemo.example.SpringActivemq.service; import org.xdemo.example.SpringActivemq.model.Product; import org.xdemo.example.SpringActivemq.model.QueryVo; import org.xdemo.example.SpringActivemq.model.ResultModel; public interface ProductService { /** * 分页条件查询所有商品 * * @param solrQuery * @return * @throws Exception */ public ResultModel<Product> findAll(QueryVo queryVo) throws Exception; }
ProductServiceImpl.java
package org.xdemo.example.SpringActivemq.service.impl; 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 org.xdemo.example.SpringActivemq.mapper.ProductMapper; import org.xdemo.example.SpringActivemq.model.Product; import org.xdemo.example.SpringActivemq.model.QueryVo; import org.xdemo.example.SpringActivemq.model.ResultModel; import org.xdemo.example.SpringActivemq.service.ProductService; /** * 实现类 * @author Easong * */ @Service public class ProductServiceImpl implements ProductService { // 每页显示的条数 private final static Integer PAGE_SIZE = 32; @Autowired private ProductMapper productMapper; @Override public ResultModel<Product> findAll(QueryVo queryVo) throws Exception { // 创建solr查询对象 SolrQuery solrQuery = new SolrQuery(); // 设置查询关键字 if (queryVo.getQueryString() != null && !"".equals(queryVo.getQueryString())) { solrQuery.setQuery("product_name:" +queryVo.getQueryString()); } else { solrQuery.setQuery("*:*"); } // 设置过滤查询--商品类别 if (queryVo.getCatalog_name() != null && !"".equals(queryVo.getCatalog_name())) { solrQuery.setFilterQueries("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("<span style=\"color:red\">"); // 设置后缀 solrQuery.setHighlightSimplePost("</span>"); // 调用Mapper层 ResultModel<Product> resultModel = productMapper.findAll(solrQuery); // 设置当前页 resultModel.setCurPage(currPage.longValue()); // 设置总页数 Double pageSize = Math.ceil(resultModel.getRecordCount().doubleValue() / PAGE_SIZE); resultModel.setPageCount(pageSize.longValue()); return resultModel; } }
ProductMapper.java
package org.xdemo.example.SpringActivemq.mapper; import org.apache.solr.client.solrj.SolrQuery; import org.xdemo.example.SpringActivemq.model.Product; import org.xdemo.example.SpringActivemq.model.ResultModel; public interface ProductMapper { /** * 分页条件查询所有商品 * @param solrQuery * @return * @throws Exception */ public ResultModel<Product> findAll(SolrQuery solrQuery) throws Exception; }
ProductMapperImpl.java
package org.xdemo.example.SpringActivemq.mapper.impl; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.xml.soap.Text; 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 org.xdemo.example.SpringActivemq.mapper.ProductMapper; import org.xdemo.example.SpringActivemq.model.Product; import org.xdemo.example.SpringActivemq.model.ResultModel; @Repository public class ProductMapperImpl implements ProductMapper { @Override public ResultModel<Product> findAll(SolrQuery solrQuery) throws Exception { // 创建连接solr服务器对象 SolrServer solrServer = new HttpSolrServer("http://192.168.92.129:8080/solr/collection1"); // 创建ResultModel对象 ResultModel<Product> results = new ResultModel<Product>(); // 创建集合,存储Product List<Product> productList = new ArrayList<Product>(); // 执行查询 QueryResponse queryResponse = solrServer.query(solrQuery); // 获取Document结果集 SolrDocumentList solrDocumentList = queryResponse.getResults(); // 设置总记录数 results.setRecordCount(solrDocumentList.getNumFound()); // 高亮显示 Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting(); // 遍历结果集 for (SolrDocument doc : solrDocumentList) { // 创建Product对象 Product product = new Product(); // 设置商品的编号 product.setId((String) doc.get("id")); List<String> list = highlighting.get(doc.get("id")).get("product_name"); if (list == null) { // 设置商品的名称 product.setProduct_name(doc.get("product_name").toString()); } else { // 设置高亮显示名称 product.setProduct_name(list.get(0)); } // 设置商品分类名称 product.setCatalog_name((String) doc.get("catalog_name")); // 设置商品价格 product.setProduct_price((Float) doc.get("product_price")); // 设置商品图片名称 product.setProduct_picture((String) doc.get("product_picture")); // 将商品添加到集合中 product.setDescription((String) doc.get("description")); productList.add(product); } results.setList(productList); return results; } }
相关推荐
Solr搜索引擎的使用介绍 Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,基于Java开发,是一款高效、灵活且强大的全文检索服务引擎。它构建在Lucene库之上,提供了更高级别的企业级搜索功能,如...
Solr,全称为Apache Solr,是一款开源的全文搜索引擎,广泛应用于电商、新闻、文档检索等领域。它提供了高效、可扩展的搜索与分析能力。在电商领域,搜索结果的排序和打分对于用户体验至关重要,因为它直接影响到...
Solr是Apache Lucene项目的一个子项目,是一个高性能、基于Java的企业级全文搜索引擎。在电商领域,Solr常被用于构建商品搜索系统,提供高效、精准的搜索体验。本篇文章将详细阐述如何利用Solr实现京东搜索的功能。 ...
本资源是基于开源项目javashop的升级版b2c大型分布式电商项目,内容包括项目需求的分析、项目流程图绘制、电商分布式项目架构搭建、功能实现(涉及到的技术有:SSO单点登录,第三方支付平台对接,如支付宝等,solr...
分布式多店铺电商系统,使用技术:spring 、springmvc、mybatis、maven、html5、jquery、freemarker、Redis(缓存服务器)、Solr(搜索引擎)、Dubbo(调用系统服务)、Nginx(web服务器)、FastDFS(文件服务器)、...
商品搜索:用户可以通过 solr 搜索引擎对商品进行关键字搜索,以及按照类别、价格、销量等条件进行筛选。 商品详情:用户可以通过图形界面查看商品的详细信息,包括图片、描述、规格、评价等。 购物车:用户可以通过...
3. **商品展示**:商品信息的增删改查、分类、搜索等功能,通常借助于Solr或Elasticsearch进行全文搜索引擎搭建,提供高效的查询体验。前后端交互使用RESTful API设计原则,JSON格式交换数据。 4. **支付系统**:与...
Solr是一个基于Lucene的开源搜索引擎,它提供了一个企业级的搜索服务器,可以用来执行全文搜索、结构化搜索等多种功能。在电子商务网站中,搜索引擎扮演着至关重要的角色,因为它直接影响着用户体验和网站的运营效率...
标题中的“搜索引擎solr和elasticsearchJava开发J”提到了两个关键的开源搜索技术——Apache Solr和Elasticsearch,以及它们与Java的结合使用。这两个都是基于Lucene库的全文检索引擎,广泛应用于大数据量的全文搜索...
视频详细讲解,需要的小伙伴自行网盘下载,链接见附件,永久有效。 Solr它是一种开放源码的、基于 Lucene 的搜索服务器,可以...章节五:综合案例,电商网站搜索页面 1.关键字搜索 2.搜索面板展示 3.分页 4.排序 5.高亮
Java作为一种广泛应用的编程语言,被广泛用于构建搜索引擎,因为Java具有优秀的性能、跨平台性和丰富的库支持。在这个主题下,我们将深入探讨Java在搜索引擎开发中的核心概念、技术栈以及实际应用。 一、搜索引擎...
Apache SOLR是一款开源的企业级全文搜索引擎,它被广泛应用于网站内容检索、电商商品搜索、文档数据库搜索等领域。SOLR以其高效、可扩展性以及丰富的特性和配置选项而受到广大开发者的青睐。在这个“SOLR的学习资料...
Solr是一款基于Lucene的高性能全文搜索引擎,非常适合用于构建电商系统的搜索功能。其特点包括: - **强大的全文检索能力**:支持复杂的查询语法,能够快速返回精确匹配的结果。 - **高可用性**:Solr支持集群部署,...
Solr+IK分词集成Tomcat实现全文检索是构建高效搜索引擎的关键步骤,尤其在电子商务等大量数据检索场景中,这一技术的应用尤为重要。本教程将详细阐述如何通过Solr结合IK分词器,在Tomcat服务器上搭建一个功能完备的...
Lucene是Solr的核心搜索引擎库,它提供了基本的搜索功能,如倒排索引、TF-IDF评分等。而Solr则在其基础上增加了分布式搜索、集群管理、结果高亮、 faceting(分类浏览)、近实时搜索(NRT)等高级特性,使得Solr更...
在电商项目中,Solr可以搭建搜索引擎,方便用户快速查找商品。 6. **EasyUI**:EasyUI是一个基于jQuery的UI库,提供了一系列美观的前端组件,如表格、表单、对话框等,用于构建用户界面。在电商项目中,EasyUI可以...
“lucene”是Solr的核心搜索引擎库,是Java实现的一个全文检索库,提供了高效的索引和搜索功能。 在解压“solr-7.7.3.zip”后,你将得到一个名为“solr-7.7.3”的文件夹,里面包含了以下关键组件和目录: 1. **...
3. **Lucene库**:Solr是基于Lucene,一个强大的全文搜索引擎库。Solr在其之上添加了更多高级特性,如 faceting(分面搜索),highlighting(高亮显示),以及更复杂的查询语法。 4. **配置文件**:压缩包中的配置...
5. **Solr**: Apache Solr是一个企业级的全文搜索引擎,能够实现快速的全文检索、高可用性和伸缩性。在电商系统中,Solr可以用于商品搜索,提供高效的搜索体验,支持复杂的查询条件和排序功能。 6. **ZooKeeper**: ...
课程提供所有代码笔记素材以及答疑 1、Lucene框架的熟练应用实现类似百度、京东商城等应用的全文检索效果; 1、Solr简介 2、Solr下载安装以及目录结构介绍 3、Solr应用部署至Tomcat服务器 4、Solr后台管理界面...