学习了一下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的简单使用的更多相关文章

  1. 基于Solr的空间搜索

    如果需要对带经纬度的数据进行检索,比如查找当前所在位置附近1000米的酒店,一种简单的方法就是:获取数据库中的所有酒店数据,按经纬度计算距离,返回距离小于1000米的数据. 这种方式在数据量小的时候比 ...

  2. 搞Solr这一年(本人QQ 282335345 群412268049 欢迎大家一起学习Solr 非诚勿扰)

    搞Solr这一年 去年6月份毕业到现在已经快一年半了,很庆幸从事了搜索引擎这份工作,虽然谈不上有多深入,但至少已经入门了.在这一年半里,搞了3个月的hbase和mapreduce,搞了一个月的nutc ...

  3. SOLR搭建企业搜索平台

    一. SOLR搭建企业搜索平台  运行环境:  运行容器:Tomcat6.0.20  Solr版本:apache-solr-1.4.0  分词器:mmseg4j-1.6.2  词库:sogou-dic ...

  4. 全文搜索技术—Solr

    1.   学习计划 1. Solr的安装及配置 a)    Solr整合tomcat b)    Solr后台管理功能介绍 c)    配置中文分析器 2. 使用Solr的后台管理索引库 a)     ...

  5. solr服务(搜索服务)

    1   Solr实现全文搜索 1.1   Solr是什么? Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的 ...

  6. 【Solr】 solr对拼音搜索和拼音首字母搜索的支持

    问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢? 实现方式有2种,但是他们其实是对应的.  用lucene实现 1.建索引, 多建一个索引字段 ...

  7. 利用SOLR搭建企业搜索平台 之——solr配置solrconfig.xml

    来源:http://blog.csdn.net/zx13525079024/article/details/25310781 solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括 ...

  8. solr 搜索引擎及搜索推荐应用

    搜索框里输入关键字,从mongodb里搜索出关键字相关关键字记录.用户从相关关键字里选取一个作为最后关键字从solr里查询数据. 1创建索引:从sql里goodsinfo表查所有记录,solr.Add ...

  9. Solr实现全文搜索

    1.1 Solr是什么? Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展 ...

随机推荐

  1. 用Django ORM实现树状结构

    前言 之前看对于用关系数据库实现树状结构的方法就知道一直做自关联的表,但是感觉自关联查询太慢了,最近看到一篇文章,感觉视野开拓了好多,文章:数据库表设计,没有最好只有最适合来自:微信. 下面就针对这里 ...

  2. Beta阶段冲刺集合贴

    第零篇准备博客:https://www.cnblogs.com/coolgirls/p/9066239.html 第一篇冲刺博客:https://www.cnblogs.com/coolgirls/p ...

  3. first one

    我说一句话你就知道我是干什么的 hello world

  4. Java 实现删除文件工具类

    工具代码 package com.wangbo; import java.io.File; /** * 删除目录或文件工具类 * @author wangbo * @date 2017-04-11 1 ...

  5. antd在webpack里面的配置

    概述 antd是蚂蚁金服打造的一个react组件,真的非常棒,我看了下官方文档,感觉比bootstrap要好.唯一的缺点可能就是打包的时候要打包它的一些样式表,所以资源体积会很大,并且css可能会和自 ...

  6. ElasticSearch权威指南学习(排序)

    排序方式 相关性排序 默认情况下,结果集会按照相关性进行排序 -- 相关性越高,排名越靠前. 相关性分值会用_score字段来给出一个浮点型的数值,所以默认情况下,结果集以_score进行倒序排列. ...

  7. Windows系统CMD常用命令大全

    命令简介 cmd是command的缩写.即命令行 . 虽然随着计算机产业的发展,Windows 操作系统的应用越来越广泛,DOS 面临着被淘汰的命运,但是因为它运行安全.稳定,有的用户还在使用,所以一 ...

  8. live-server 快速搭建服务

    原因: 在2018年3月2日偶然情况下听到一个大佬提起“live-server”这东西, 我就研究一下,用过的人才知道live-server多么方便... 功能: 当启动live-server服务的文 ...

  9. python多线程获取子线程任务返回值

    今天想实现多线程更新资产信息,所以使用到了threading,但是我需要每个线程的返回值,这就需要我在threading.Thread的基础上进行封装 def auto_asset(node): re ...

  10. 【xsy1503】 fountain DP

    题目大意:给你$D$个格子,有$n$个喷水器,每个喷水器有一个喷水距离$r_i$. 现在你需要在这$D$个格子中选择$n$个位置按照任意顺序安装这$n$个喷水器,需要满足$n$个喷水器互相喷不到对方. ...