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. nmon 采坑

    1.安装 wget http://sourceforge.net/projects/nmon/files/nmon16g_x86.tar.gz 2.解压 tar -zxvf nmon16g_x86.t ...

  2. Java基础学习:1、Java基础知识

    1.使用最为广泛的Java版本: Java8.Java11 原因:这两个是长期支持版本,扩展支持到2030以及2026年. 2.Java特性 : 面向对象oop.跨平台(class可以在Windows ...

  3. java循环中的break和continue的小笔记

    代码1: for(int i=0;i<10;i++){ System.out.println(i); continue; System.out.println("flag") ...

  4. LeetCode系列之 (JavaScript) => 66. 加一

    题目描述: 解题思路分析: 模拟十进制: 分析有几种情况,按情况来定 不同解法: /** * @param {number[]} digits * @return {number[]} */ // v ...

  5. 解决idea中按退格键(Backspace)回到上一行问题

    开始学习java时,第一次用idea,该问题困扰一上午,网上也没有解决方案,最后自己摸索如下.打开File-> Settings->Editor->Smart Keys,将To pr ...

  6. nvm在windows下安装与使用

    1.卸载本地已经安装的所有node 2.nvm下载 下载地址https://github.com/coreybutler/nvm-windows ,选择nvm-noinstall.zip 放在本地盘, ...

  7. simis报错总结

    --笔记开始: 1.在前台模块处理时,[单位应收核定]比[人员缴费信息]的在职人员多一人,但是总金额一样,可能是以下原因造成!!! A.从后台看,若正常核定在职的ab08比ac13多一个人,可能是ac ...

  8. Navicat Premium 12 安装破解过程 (经过测试)

    @ 目录 下载安装 下载 解压文件目录 安装使用步骤截图 1. 安装navicat120_premium_cs_x64.exe 软件 2. 解压Navicat.Premium 破解补丁.rar 3. ...

  9. 当前SAT主要关键技术及其相关文献2022-11-1

    摘录自: Tasniem Nasser Al-Yahya, Mohamed El Bachir Menai, Hassan Mathkour:Boosting the Performance of C ...

  10. mysql查询和更新不能同时出现

    mysql出现You can't specify target table for update in FROM clause 这个错误的意思是不能在同一个sql语句中,先select同一个表的某些值 ...