Spring Data Solr 就是为了方便 solr 的开发研制的一个框架,其底层是对 SolrJ(官方 API)的封装

一、环境搭建


第一步:创建 Maven 项目(springdatasolrDemo 打包方式为 jar 类型)
第二步:pom.xml 文件中引入项目相关的依赖:

 1 <dependencies>
2 <dependency>
3 <groupId>org.springframework.data</groupId>
4 <artifactId>spring-data-solr</artifactId>
5 <version>1.5.5.RELEASE</version>
6 </dependency>
7 <dependency>
8 <groupId>org.springframework</groupId>
9 <artifactId>spring-test</artifactId>
10 <version>4.2.4.RELEASE</version>
11 </dependency>
12 <dependency>
13 <groupId>junit</groupId>
14 <artifactId>junit</artifactId>
15 <version>4.9</version>
16 </dependency>
17 </dependencies>

第三步:在 src/main/resources 目录下添加 applicationContext-solr.xml 配置文件,配置 Solr 服务器的地址。

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
4 xmlns:context="http://www.springframework.org/schema/context"
5 xmlns:solr="http://www.springframework.org/schema/data/solr"
6 xsi:schemaLocation="http://www.springframework.org/schema/data/solr
7 http://www.springframework.org/schema/data/solr/spring-solr-1.0.xsd
8 http://www.springframework.org/schema/beans
9 http://www.springframework.org/schema/beans/spring-beans.xsd
10 http://www.springframework.org/schema/context
11 http://www.springframework.org/schema/context/spring-context.xsd">
12
13 <!-- solr服务器地址 -->
14 <solr:solr-server id="solrServer" url="http://127.0.0.1:8080/solr" />
15
16
17 <!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
18 <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
19 <constructor-arg ref="solrServer" />
20 </bean>
21 </beans>

第四步:构建与 Solr 中配置的 Field 对应的实体类字段(@Filed 注解:如果属性与配置文件定义的域名名称不一致,需要在注解中指定域名的名称),简单举两种例子:

 1 @Field
2 private Long id;
3
4 @Field("item_title")
5 private String title;
6
7 //动态域设置方式
8 @Dynamic
9 @Field("item_spec_*")
10 private Map<String, String> specMap;

二、Solr 数据添加与修改


创建测试类:solrTemplate.saveBean(item) 及 solrTemplate.commit() 方法进行数据的增加和修改(只要主键 id 相同 Solr 会自动进行修改,不会添加相同的主键内容,这一点与数据库相同)

 1 package springdatasolrDemo;
2
3 import java.math.BigDecimal;
4
5 import org.junit.Test;
6 import org.junit.runner.RunWith;
7 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.data.solr.core.SolrTemplate;
9 import org.springframework.test.context.ContextConfiguration;
10 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
11
12 import com.itcast.demo.TbItem;
13
14 @RunWith(SpringJUnit4ClassRunner.class)
15 @ContextConfiguration(locations="classpath:applicationContext-solr.xml")
16 public class SolrTest {
17
18 @Autowired
19 private SolrTemplate solrTemplate;
20
21 @Test
22 public void add() {
23 TbItem item=new TbItem();
24 item.setId(1L);
25 item.setBrand("华为");
26 item.setCategory("手机");
27 item.setGoodsId(1L);
28 item.setSeller("华为2号专卖店");
29 item.setTitle("华为Mate9");
30 item.setPrice(new BigDecimal(2000));
31 //直接传入我们创建的带有@Field 的实体类
32 solrTemplate.saveBean(item);
33 //Solr 是支持事务的 因此需要条用 commit 进行提交
34 solrTemplate.commit();
35 }
36 }

效果图展示:

三、根据主键进行查询和删除


 1 //根据主键进行查询和删除
2 @Test
3 public void findById() {
4 //传入 ID 和 返回值类型
5 TbItem item = solrTemplate.getById("1", TbItem.class);
6 //输出结果:华为Mate9
7 System.out.println(item.getTitle());
8 }
9
10 @Test
11 public void deleteById() {
12 //会自动转化为 Long 类型
13 solrTemplate.deleteById("1");
14 solrTemplate.commit();
15 }

四、分页查询


Solr 页面上就可以进行分页查询:start(起点),rows(每页记录数),程序中只需要调用 solrTemplate.queryForPage(query, TbItem.class) 将 start 与 rows 封装仅 query 对象的 offset 与 rows 属性中即可

 1 @Test
2 public void findByPage() {
3 //创建查询对象(属性:条件)
4 Query query = new SimpleQuery("*:*");
5 //开始值 与 每页记录数
6 query.setOffset(20);
7 query.setRows(20);
8 //调用 Solr 服务器进行查询
9 ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
10 System.out.println("总记录数:"+page.getTotalElements());
11 List<TbItem> list = page.getContent();
12 showList(list);
13 }
14 //显示记录数据
15 private void showList(List<TbItem> list){
16 for(TbItem item:list){
17 System.out.println(item.getTitle() +item.getPrice());
18 }
19 }

五、条件查询


Criteria 用于对条件的封装

 1 @Test
2 public void testPageQueryMutil(){
3 Query query=new SimpleQuery("*:*");
4 Criteria criteria=new Criteria("item_title").contains("2");
5 criteria=criteria.and("item_title").contains("5");
6 query.addCriteria(criteria);
7 //query.setOffset(20);//开始索引(默认0)
8 //query.setRows(20);//每页记录数(默认10)
9 ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
10 System.out.println("总记录数:"+page.getTotalElements());
11 List<TbItem> list = page.getContent();
12 showList(list);
13 }

六、删除全部记录


1 @Test
2 public void testDeleteAll(){
3 Query query=new SimpleQuery("*:*");
4 solrTemplate.delete(query);
5 solrTemplate.commit();
6 }

Spring Data Solr 对 Solr 的增删改查实例的更多相关文章

  1. yii2.0增删改查实例讲解

    yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `textur ...

  2. python链接oracle数据库以及数据库的增删改查实例

    初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节. 1.首先,python链接oracle数据库需要配置好环境. 我的相关环境 ...

  3. java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)

    1.JSP的配置: <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  4. Spring Boot 使用Mybatis注解开发增删改查

    使用逆向工程是遇到的错误 错误描述 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): c ...

  5. 百度鹰眼Java接口调用增删改查实例

    因感觉百度鹰眼的使用场景比较符合实际业务,于是对百度鹰眼做了简单功能调试.刚开始使用springframework封装的RestTemplate,但是测试提示ak参数不存在.后又试了几种方法,均提示a ...

  6. 【php增删改查实例】第四节 -自己 DIY 一个数据库管理工具

    本节介绍如何自己DIY一个数据库管理工具,可以在页面输入sql 进行简单的增删改查操作. 首先,找到xampp的安装目录,打开htdocs: 新建一个php文件,名称为 mysqladmin.php ...

  7. Maven多模块项目+MVC框架+AJAX技术+layui分页对数据库增删改查实例

    昨天刚入门Maven多模块项目,所以简单写了一个小测试,就是对数据库单表的增删改查,例子比较综合,写得哪里不妥还望大神赐教,感谢! 首先看一下项目结构: 可以看到,一个项目MavenEmployee里 ...

  8. 【php增删改查实例】第十节 - 部门管理模块(新增功能)

    正常情况下,在一个部门管理页面,不仅仅需要展示列表数据,还需要基本的增删改操作,所以,我们先把之前写好的新增功能集成进来. 在toolbar中,添加一个新增按钮. <div id="t ...

  9. 关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作

    PHP访问MySql数据库 <?php //造连接对象$db = new MySQLi("localhost","root","",& ...

  10. solr第一天 基础增删改查操作

    全文检索技术   Lucene&Solr               Part2 1 课程计划 1.索引库的维护 a) 添加文档 b) 删除文档 c) 修改文档 2.Lucene的查询 a)  ...

随机推荐

  1. 如何保证RabbitMQ的消息不会丢失?怎么保证RabbitMQ的可靠性?

    生产者: 原因: 由于网络原因导致消息发送失败,消息队列没有接收到生产者发送的消息,但生产者认为消息发送成功. 解决办法: transaction模式:事务模式:开启事务,发送消息,成功提交事务,失败 ...

  2. 【批量下载】url——wget,给定网址,批量下载文件

    写在前面:最近在学习批量下载sci文章并传入noteexpress,从网上学来了一些方法,其中有一步需要使用url将sci-hub上面的文章批量下载下来. 学习网址:[研究生]快速批量下载 Web o ...

  3. cpu主频对网络传输性能的影响

    数据包长度是:2KB iperf的测试结果:3.2GHz的cpu能上40Gb/s, 2.1GHz的cpu只能到28Gb/s.

  4. 基于docker搭建Jenkins+git+python+allure

    实现方式 docker+jenkins+python 执行自动化框架,生成allure报告 1.服务器上安装docker(略) 2.创建jenkins容器 3.使用Dockerfile创建有接口自动化 ...

  5. 实验1 Python开发环境使用和编程初体验

    # print输出的几种用法 # 用法1:用于输出单个字符串或单个变量 print('hey, u') # 用法2: 用于输出多个数据项,用逗号分隔 print('hey', ' u') x,y,z ...

  6. 社团管理系统(AMS)个人总结

    一.展示 所在小组:13组 源代码链接:https://github.com/xupppp/ams 博文链接: https://www.cnblogs.com/xupppp/p/11795218.ht ...

  7. 接口文档API、剖析http协议, 原生http请求函数

    http协议:超广本传输协议 特点: 短连接 请求完成后就断开 无状态  对于事务处理无记忆能力 媒体独立 客户端要指定适合的传输内容类型,如json http  是建立在tcp/ip协议之上的应用层 ...

  8. mysql语句优化总结

    Sql语句优化和索引 1.Innerjoin和左连接,右连接,子查询 A.     inner join内连接也叫等值连接是,left/rightjoin是外连接. SELECT A.id,A.nam ...

  9. 洛谷 P2212 [USACO14MAR]Watering the Fields S 题解

    2021-08-03 20:31:13 链接: https://www.luogu.com.cn/problem/P2212 题目详情: Due to a lack of rain, Farmer J ...

  10. git push错误failed to push some refs to的解决

    问题说明 当我们在github版本库中发现一个问题后,你在github上对它进行了在线的修改:或者你直接在github上的某个库中添加readme文件或者其他什么文件,但是没有对本地库进行同步.这个时 ...