Spring Data Solr 对 Solr 的增删改查实例
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 的增删改查实例的更多相关文章
- yii2.0增删改查实例讲解
yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `textur ...
- python链接oracle数据库以及数据库的增删改查实例
初次使用python链接oracle,所以想记录下我遇到的问题,便于向我这样初次尝试的朋友能够快速的配置好环境进入开发环节. 1.首先,python链接oracle数据库需要配置好环境. 我的相关环境 ...
- java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)
1.JSP的配置: <%@ page language="java" import="java.util.*" pageEncoding="UT ...
- Spring Boot 使用Mybatis注解开发增删改查
使用逆向工程是遇到的错误 错误描述 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): c ...
- 百度鹰眼Java接口调用增删改查实例
因感觉百度鹰眼的使用场景比较符合实际业务,于是对百度鹰眼做了简单功能调试.刚开始使用springframework封装的RestTemplate,但是测试提示ak参数不存在.后又试了几种方法,均提示a ...
- 【php增删改查实例】第四节 -自己 DIY 一个数据库管理工具
本节介绍如何自己DIY一个数据库管理工具,可以在页面输入sql 进行简单的增删改查操作. 首先,找到xampp的安装目录,打开htdocs: 新建一个php文件,名称为 mysqladmin.php ...
- Maven多模块项目+MVC框架+AJAX技术+layui分页对数据库增删改查实例
昨天刚入门Maven多模块项目,所以简单写了一个小测试,就是对数据库单表的增删改查,例子比较综合,写得哪里不妥还望大神赐教,感谢! 首先看一下项目结构: 可以看到,一个项目MavenEmployee里 ...
- 【php增删改查实例】第十节 - 部门管理模块(新增功能)
正常情况下,在一个部门管理页面,不仅仅需要展示列表数据,还需要基本的增删改操作,所以,我们先把之前写好的新增功能集成进来. 在toolbar中,添加一个新增按钮. <div id="t ...
- 关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作
PHP访问MySql数据库 <?php //造连接对象$db = new MySQLi("localhost","root","",& ...
- solr第一天 基础增删改查操作
全文检索技术 Lucene&Solr Part2 1 课程计划 1.索引库的维护 a) 添加文档 b) 删除文档 c) 修改文档 2.Lucene的查询 a) ...
随机推荐
- 问题:配置apache的相关配置文件报错:Invalid command 'Order' (已解决)
1. 问题描述 在虚拟文件httpd-vhosts.conf里面,directory里加入Order allow,deny,重启apache,出现Invalid command 'Order', pe ...
- bzoj 2594
很好的一道LCT题目 首先我们可以发现,题目要求的就是最小生成树上的一条树链的最长边的长度,因此我们实际只需动态维护最小生成树即可 然后我们考虑怎么动态维护最小生成树 不难发现,如果涉及在最小生成树上 ...
- iOS源码调试Podspec如何写
{ "name": "XXX", "version": "1.0.0", "summary": &q ...
- ios MJRefresh 上拉死循环刷新问题+git 图片
网上各种办法都试了,只有这种解决方法解决了我的问题,记录一下 通过延迟 1s后,再来请求接口 - (void)viewDidLoad { [super viewDidLoad]; // Do any ...
- Abp Abp.AspNetZeroCore 2.0.0 2.1.1 Path
纯手工修改,移除校验代码可调试. 将文件复制到 %userprofile%\.nuget\packages\abp.aspnetzerocore 目录中 替换对应的文件 Abp.AspNetZeroC ...
- Monkey 用户指南(译)
原址:https://developer.android.com/studio/test/monkey.html 帮助:google翻译:https://translate.google.cn/ 自己 ...
- SQLite 帮助类
public static class SqliteHelper { /// <summary> /// 获得连接对象 /// </summary> /// <retur ...
- 攻防(一)tomcat CVE-2020-1938,ftp 21端口
TOMCAT kali自带POE msf6 > use auxiliary/admin/http/tomcat_ghostcat set RHOST 10.98.xx.xx msf6 auxil ...
- centos7.2 64位安装php7.2.12
1 安装php所需要的扩展 yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel curl curl ...
- sql server clr json to table
背景 SQL SERVER 2016 之前版本不支持 直接解析json 步骤: 1 vs 数据库项目 2 生成dll 3 加入信任 DECLARE @hash AS BINARY(64) = (SEL ...