SSM+solr 通过商品搜索学习solr的简单使用
学习了一下https://github.com/TyCoding/ssm-redis-solr这个github上的solr搜索功能,现在来记录一下。
我的理解就是solr有点类似于数据库,但它是有索引的数据库,按很多字段建立索引,可能是b+树或者散列索引,然后就能够实现海量数据的查找。solr通过导入jar包就可以对这个库就行增删改查了,后端逃不掉的增删改查。。。
1.配置tomcat
具体我就不说了,因为我是直接用了github上配置好的,毕竟站在巨人的肩膀上学习嘛
地址:https://github.com/TyCoding/solr-tomcat
2.访问solr并使用
访问端口:localhost:8080/solr/index.html
这里的new_core就是项目中配置的路径,就将商品的索引放在这里。

然后用Test测试它的使用,测试的时候要引入配置文件,不然会导致空指针错误,我居然现在才知道。怪不得以前只要用Autowired的时候就会空指针错误。。,而且还要@Runwith注解,引入包import org.springframework.test.context.junit4.*;eclipse点击不会有import提示,需要自己加上去。

这里新建了一个实体对象,然后把这个实体对象加入到索引库里,在solr索引库里面就可以找到这个字段

在new_core的schema里面就以Id建好了索引

以及很多的信息
@Test
public void testFindById() {
Goods goods = solrTemplate.getById(1, Goods.class);
System.out.println("--------" + goods.getTitle());
}
通过id查找,控制台会输出你刚刚插入的数据,也就是通过solrTemplate找到了你的数据。
@Test
public void testAddList() {
List<Goods> list = new ArrayList<Goods>();
//循环插入100条数据
for (int i = 0; i < 100; i++) {
BigDecimal price=new BigDecimal (2.3);
Goods goods = new Goods(i + 1L, "华为Mate" + i,price, "手机", "手机", "华为专卖店");
list.add(goods);
}
solrTemplate.saveBeans(list); //添加集合对象,调用saveBeans();添加普通对象类型数据,使用saveBean();
solrTemplate.commit(); //提交
}
还可以批量插入数据,或者分页查询
@Test
public void testPageQuery() {
Query query = new SimpleQuery("*:*");
query.setOffset(20); //开始索引(默认0)
query.setRows(20); //每页记录数(默认10)
ScoredPage<Goods> page = solrTemplate.queryForPage(query, Goods.class);
System.out.println("总记录数:" + page.getTotalElements());
List<Goods> list = page.getContent();
}
3.学习一下项目中怎么配置
注意要在web.xml加一个过滤,不然注入不了solrTemplate这个bean

spring-solr.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:solr="http://www.springframework.org/schema/data/solr"
xsi:schemaLocation="http://www.springframework.org/schema/data/solr
http://www.springframework.org/schema/data/solr/spring-solr-1.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- solr服务器地址 -->
<solr:solr-server id="solrServer" url="http://127.0.0.1:8080/solr/new_core"/> <!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
<constructor-arg ref="solrServer"/>
</bean> </beans>
就是加载一个solr的模板
SolrUtil.java
把数据库的数据库批量加入
@Component
public class SolrUtil { @Autowired
private GoodsMapper goodsMapper; @Autowired
private SolrTemplate solrTemplate; /**
* 实现将数据库中的数据批量导入到Solr索引库中
*/
public void importGoodsData() { List<Goods> list = goodsMapper.findAll();
System.out.println("====商品列表====");
for (Goods goods : list) {
System.out.println(goods.getTitle());
} solrTemplate.saveBeans(list);
solrTemplate.commit(); //提交
System.out.println("====结束====");
} public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/spring*.xml");
SolrUtil solrUtil = (SolrUtil) context.getBean("solrUtil");
solrUtil.importGoodsData();
}
}
这样就把数据加入索引库中。
实体类有一个Field标识这个实体字段在索引库里的名称
@Field
private Long id; //商品ID
@Field("item_title")
private String title; //商品标题
@Field("item_price")
private BigDecimal price; //商品价格
@Field("item_image")
private String image; //商品图片
@Field("item_category")
private String category; //商品类别
@Field("item_brand")
private String brand; //商品品牌
@Field("item_seller")
private String seller; //商品卖家
最后,搜索功能的实现
按价格查找
//按价格区间查询
if (searchMap.get("price") != null) {
if (!searchMap.get("price").equals("")) {
String[] price = ((String) searchMap.get("price")).split("-");
if (!price[0].equals("0")) {
//如果起点区间不等于0
Criteria filterCriteria = new Criteria("item_price").greaterThanEqual(price[0]);
FilterQuery filterQuery = new SimpleFilterQuery(filterCriteria);
query.addFilterQuery(filterQuery);
} if (!price[1].equals("*")) {
//如果区间重点不等于*
Criteria filterCriteria = new Criteria("item_price").lessThanEqual(price[1]);
FilterQuery filterQuery = new SimpleFilterQuery(filterCriteria);
query.addFilterQuery(filterQuery);
}
}
}
4.实现效果



SSM+solr 通过商品搜索学习solr的简单使用的更多相关文章
- 基于Solr的空间搜索
		如果需要对带经纬度的数据进行检索,比如查找当前所在位置附近1000米的酒店,一种简单的方法就是:获取数据库中的所有酒店数据,按经纬度计算距离,返回距离小于1000米的数据. 这种方式在数据量小的时候比 ... 
- 搞Solr这一年(本人QQ 282335345 群412268049 欢迎大家一起学习Solr 非诚勿扰)
		搞Solr这一年 去年6月份毕业到现在已经快一年半了,很庆幸从事了搜索引擎这份工作,虽然谈不上有多深入,但至少已经入门了.在这一年半里,搞了3个月的hbase和mapreduce,搞了一个月的nutc ... 
- SOLR搭建企业搜索平台
		一. SOLR搭建企业搜索平台 运行环境: 运行容器:Tomcat6.0.20 Solr版本:apache-solr-1.4.0 分词器:mmseg4j-1.6.2 词库:sogou-dic ... 
- 全文搜索技术—Solr
		1. 学习计划 1. Solr的安装及配置 a) Solr整合tomcat b) Solr后台管理功能介绍 c) 配置中文分析器 2. 使用Solr的后台管理索引库 a) ... 
- solr服务(搜索服务)
		1 Solr实现全文搜索 1.1 Solr是什么? Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的 ... 
- 【Solr】 solr对拼音搜索和拼音首字母搜索的支持
		问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢? 实现方式有2种,但是他们其实是对应的. 用lucene实现 1.建索引, 多建一个索引字段 ... 
- 利用SOLR搭建企业搜索平台 之——solr配置solrconfig.xml
		来源:http://blog.csdn.net/zx13525079024/article/details/25310781 solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括 ... 
- solr 搜索引擎及搜索推荐应用
		搜索框里输入关键字,从mongodb里搜索出关键字相关关键字记录.用户从相关关键字里选取一个作为最后关键字从solr里查询数据. 1创建索引:从sql里goodsinfo表查所有记录,solr.Add ... 
- Solr实现全文搜索
		1.1 Solr是什么? Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展 ... 
随机推荐
- DL_1_week2_神经网络基础
			二分类问题 在二分分类问题中,目标是训练出一个分类器,这里以图片特征向量x作为输入,预测输出的结果标签y是1还是0,也就是预测图片中是否有猫. 计算机保存一张图片(彩色),要保存三个 ... 
- js实现粒子特效,particles.js的使用
			今天偶然看到了一个比较炫酷的js网页.是粒子特效的,就试着用了用.一下是步骤,方便以后查看使用. 1.在网站下载源码https://github.com/VincentGarreau/particle ... 
- 虚拟机下Linux操作Ubuntu
			备忘Ubuntu虚拟机环境配置 目录 更新源修改 #支持https的下载 apt 源使用 HTTPS 以确保软件下载过程中不被篡改.因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书 ... 
- 4.BeanPostProcessor 后处理Bean
			Bean种类 普通bean:之前操作的都是普通bean.<bean id="" class="A"> ,spring直接创建A实例,并返回 Fac ... 
- Android 框架式编程 —— 起篇
			一般的,在开发的时候,写过的代码在需求变更后,发现需要改动非常多的地方,那么说明之前的代码的架构肯定是存在问题的. 下面我们结合面向对象的六大基本原则谈Android 框架式编程.首先先介绍一下面向对 ... 
- css 设计规范
			外部 div 设置 margin 和 padding: 内部每个元素只设计跟自己相关的属性,这样方便复用: 
- 被高通收购的CSR是一家怎样的公司
			CSR plc(LSE:CSR),原名剑桥硅晶无线电或英商剑桥无线电(英语:Cambridge Silicon Radio),是一间创立于 1998年的跨国无厂半导体公司,总部位于英国剑桥.早期技术主 ... 
- LeetCode: 106_Construct Binary Tree from Inorder and Postorder Traversal | 根据中序和后序遍历构建二叉树 | Medium
			要求:根据中序和后序遍历序列构建一棵二叉树 代码如下: struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int ... 
- [EXP]XAMPP 5.6.8 - SQL Injection / Persistent Cross-Site Scripting
			<!-- # Exploit Title: SQL injection (and previous) # Date: -- # Exploit Author: Rafael Pedrero # ... 
- 14-02 Java Math类,Random类,System类,BigDecimal类
			Math类 Math的方法 package cn.itcast_01; /* * Math:用于数学运算的类. * 成员变量: * public static final double PI * pu ... 
