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. MySQL Debug大全

    nested exception is java.sql.SQLException: com.mysql.jdbc.Driver 下面还有个class not found 用的8的数据库connect ...

  2. IDEA配置新学

    文件太大导致IDEA不把该文件当成Java类看待 解决方式: 打开本地IDEA的bin目录,找到idea.properties文件,进入进行设置: idea.max.intellisense.file ...

  3. x-www-form-urlencoded请求封装

    <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpc ...

  4. node 版本管理

    32位版本的node,运行较大的项目,会内存溢出.所以建议安装64位的版本,且运行速度比32位快.node14以下的版本支持node-sass,版本node16以上的不再支持node-sass,而sa ...

  5. md5加密中文windows和linux不一致

    测试环境springboot md5加密结果不一致 linux启动的时候 java -Dfile.encoding=utf-8 -jar xxx.jar   即可.主要是编码不一致导致.

  6. C语言——函数

    C 语言中的函数定义形式: return_type function_name( parameter list ) //函数头 { //函数体 body of the function } 返回类型: ...

  7. Jmeter一、开源软件的崛起

    一.jmeter自身特点: 1.开源,轻量级,更适合自动化和持续集成. 2.学习难度大. 3.资料少.多英文. 二.性能测试工具选型的原则 1.成本: a.工具成本 b.学习成本 2.通信协议: a. ...

  8. 从xml读取gps数据获取经纬高

    #!/usr/bin/python # -*- coding: UTF-8 -*- from xml.dom.minidom import parse import xml.dom.minidom & ...

  9. core程序实现文件下载

    已知本地文件名,返回给前台流 string filepath = path +"/" + filename +".txt"; if(System.IO.File ...

  10. java图形化界面编程(AWT)

    1.AWT编程简介 在JDK发布时,sun公司提供了一套基本的GUI类库,这个GUI类库希望可以在所有平台下都能运行,这套基本类库被称为"抽象窗口工具集",它为java应用程序提供 ...