`

solr搜索引擎_电商搜索(java代码实现)

 
阅读更多
pom.xml:
<!--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;
	}

}









  • 大小: 24.8 KB
  • 大小: 113.8 KB
  • 大小: 464.6 KB
  • 大小: 55 KB
分享到:
评论

相关推荐

    solr搜索引擎的使用介绍

    Solr搜索引擎的使用介绍 Solr,全称为Apache Solr,是Apache软件基金会的一个开源项目,基于Java开发,是一款高效、灵活且强大的全文检索服务引擎。它构建在Lucene库之上,提供了更高级别的企业级搜索功能,如...

    solr实现电商自定义打分

    Solr,全称为Apache Solr,是一款开源的全文搜索引擎,广泛应用于电商、新闻、文档检索等领域。它提供了高效、可扩展的搜索与分析能力。在电商领域,搜索结果的排序和打分对于用户体验至关重要,因为它直接影响到...

    solr实现京东搜索

    Solr是Apache Lucene项目的一个子项目,是一个高性能、基于Java的企业级全文搜索引擎。在电商领域,Solr常被用于构建商品搜索系统,提供高效、精准的搜索体验。本篇文章将详细阐述如何利用Solr实现京东搜索的功能。 ...

    大型B2c互联网分布式电商项目(javashop完整)内附数据库+详细技术讲解视频+每一步需求分析等等等

    本资源是基于开源项目javashop的升级版b2c大型分布式电商项目,内容包括项目需求的分析、项目流程图绘制、电商分布式项目架构搭建、功能实现(涉及到的技术有:SSO单点登录,第三方支付平台对接,如支付宝等,solr...

    Java分布式多店铺电商系统源码.zip

    分布式多店铺电商系统,使用技术:spring 、springmvc、mybatis、maven、html5、jquery、freemarker、Redis(缓存服务器)、Solr(搜索引擎)、Dubbo(调用系统服务)、Nginx(web服务器)、FastDFS(文件服务器)、...

    基于 SSM 框架实现 Java 电商项目

    商品搜索:用户可以通过 solr 搜索引擎对商品进行关键字搜索,以及按照类别、价格、销量等条件进行筛选。 商品详情:用户可以通过图形界面查看商品的详细信息,包括图片、描述、规格、评价等。 购物车:用户可以通过...

    java后台代码基于电商平台

    3. **商品展示**:商品信息的增删改查、分类、搜索等功能,通常借助于Solr或Elasticsearch进行全文搜索引擎搭建,提供高效的查询体验。前后端交互使用RESTful API设计原则,JSON格式交换数据。 4. **支付系统**:与...

    积分商城基于Solr的搜索引擎优化

    Solr是一个基于Lucene的开源搜索引擎,它提供了一个企业级的搜索服务器,可以用来执行全文搜索、结构化搜索等多种功能。在电子商务网站中,搜索引擎扮演着至关重要的角色,因为它直接影响着用户体验和网站的运营效率...

    搜索引擎solr和elasticsearchJava开发J

    标题中的“搜索引擎solr和elasticsearchJava开发J”提到了两个关键的开源搜索技术——Apache Solr和Elasticsearch,以及它们与Java的结合使用。这两个都是基于Lucene库的全文检索引擎,广泛应用于大数据量的全文搜索...

    java进阶Solr从基础到实战

    视频详细讲解,需要的小伙伴自行网盘下载,链接见附件,永久有效。 Solr它是一种开放源码的、基于 Lucene 的搜索服务器,可以...章节五:综合案例,电商网站搜索页面 1.关键字搜索 2.搜索面板展示 3.分页 4.排序 5.高亮

    搜索引擎-java

    Java作为一种广泛应用的编程语言,被广泛用于构建搜索引擎,因为Java具有优秀的性能、跨平台性和丰富的库支持。在这个主题下,我们将深入探讨Java在搜索引擎开发中的核心概念、技术栈以及实际应用。 一、搜索引擎...

    SOLR的学习资料

    Apache SOLR是一款开源的企业级全文搜索引擎,它被广泛应用于网站内容检索、电商商品搜索、文档数据库搜索等领域。SOLR以其高效、可扩展性以及丰富的特性和配置选项而受到广大开发者的青睐。在这个“SOLR的学习资料...

    java分布式电商教程视频,保证能看,有问题私聊

    Solr是一款基于Lucene的高性能全文搜索引擎,非常适合用于构建电商系统的搜索功能。其特点包括: - **强大的全文检索能力**:支持复杂的查询语法,能够快速返回精确匹配的结果。 - **高可用性**:Solr支持集群部署,...

    solr+IK分词集成tomcat实现全文检索

    Solr+IK分词集成Tomcat实现全文检索是构建高效搜索引擎的关键步骤,尤其在电子商务等大量数据检索场景中,这一技术的应用尤为重要。本教程将详细阐述如何通过Solr结合IK分词器,在Tomcat服务器上搭建一个功能完备的...

    solr(solr-9.0.0.tgz)

    Lucene是Solr的核心搜索引擎库,它提供了基本的搜索功能,如倒排索引、TF-IDF评分等。而Solr则在其基础上增加了分布式搜索、集群管理、结果高亮、 faceting(分类浏览)、近实时搜索(NRT)等高级特性,使得Solr更...

    电商项目-基于SSM框架的Java电商项目实战

    在电商项目中,Solr可以搭建搜索引擎,方便用户快速查找商品。 6. **EasyUI**:EasyUI是一个基于jQuery的UI库,提供了一系列美观的前端组件,如表格、表单、对话框等,用于构建用户界面。在电商项目中,EasyUI可以...

    solr-7.7.3.zip

    “lucene”是Solr的核心搜索引擎库,是Java实现的一个全文检索库,提供了高效的索引和搜索功能。 在解压“solr-7.7.3.zip”后,你将得到一个名为“solr-7.7.3”的文件夹,里面包含了以下关键组件和目录: 1. **...

    Apache Solr(solr-8.11.1.zip)

    3. **Lucene库**:Solr是基于Lucene,一个强大的全文搜索引擎库。Solr在其之上添加了更多高级特性,如 faceting(分面搜索),highlighting(高亮显示),以及更复杂的查询语法。 4. **配置文件**:压缩包中的配置...

    基于ssm redis solr dubbo zookeeper mysql等大型分布式电商系统.zip

    5. **Solr**: Apache Solr是一个企业级的全文搜索引擎,能够实现快速的全文检索、高可用性和伸缩性。在电商系统中,Solr可以用于商品搜索,提供高效的搜索体验,支持复杂的查询条件和排序功能。 6. **ZooKeeper**: ...

    Lucene全文检索框架+Solr+ElasticSearch搜索引擎(Java高级必备.ES)

    课程提供所有代码笔记素材以及答疑 1、Lucene框架的熟练应用实现类似百度、京东商城等应用的全文检索效果; 1、Solr简介 2、Solr下载安装以及目录结构介绍 3、Solr应用部署至Tomcat服务器 4、Solr后台管理界面...

Global site tag (gtag.js) - Google Analytics