Spring Data Solr简介
Spring Data Solr就是为了方便Solr的开发所研制的一个框架,其底层是对SolrJ(官方API)的封装。提供了一个模板工具类SolrTemplate,继承Spring的优良特性,将对象给SpringIOC容器管理,通过模板对象操作solr索引库,实现CRUD。
Spring Data Solr入门小Demo
1.创建maven工程,pom.xml中引入依赖
<dependencies>
<!--Spring-Data-Solr-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
<version>1.5.5.RELEASE</version>
</dependency>
<!--spring测试依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.9.RELEASE</version>
<scope>test</scope>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
2.在src/main/resources/spring下创建 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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:solr="http://www.springframework.org/schema/data/solr"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/data/solr
http://www.springframework.org/schema/data/solr/spring-solr.xsd">
<!--指定solr地址 操作本地 collection1是索引库-->
<solr:solr-server id="solrServer" url="http://192.168.200.128:8080/solr/collection1" />
<!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
<constructor-arg ref="solrServer" />
</bean>
</beans>
3.在src/main/java下创建一个实体类 cn.zf.domain.Item(并实现序列化接口
package cd.zf.domain;
import org.apache.solr.client.solrj.beans.Field;
import java.io.Serializable;
import java.math.BigDecimal;
public class Item implements Serializable{
@Field
private Long id;
@Field("item_title")
private String title;
@Field("item_price")
private BigDecimal price;
@Field("item_image")
private String image;
@Field("item_goodsid")
private Long goodsId;
@Field("item_category")
private String category;
@Field("item_brand")
private String brand;
@Field("item_seller")
private String seller;
//...get...set...toString......
}
4.在src/test下创建一个测试类,cn.zf.test.TestSolr
4.1增加(修改
package cd.zf.test;
import cd.zf.domain.Item;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.math.BigDecimal;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring/spring-solr.xml")
public class TestSolr {
@Autowired
private SolrTemplate solrTemplate;
/***
* 增加数据测试
*/
@Test
public void testAdd(){
Item item = new Item();
item.setId(1L);
item.setBrand("华为");
item.setCategory("手机");
item.setGoodsId(1L);
item.setSeller("华为2号专卖店");
item.setTitle("华为Mate9");
item.setPrice(new BigDecimal(2000));
//执行保存操作
solrTemplate.saveBean(item);
//提交
solrTemplate.commit();
}
}
运行成功进入solr索引库查看:
4.2按主键查询
/***
* 根据ID查询
*/
@Test
public void testGetById(){
Item item = solrTemplate.getById("1", Item.class);
System.out.println(item);
}
运行成功控制台查看结果:
4.3按主键删除
/***
* 根据主键删除
*/
@Test
public void testDeleteById(){
solrTemplate.deleteById("1");
solrTemplate.commit();
}
运行成功进入solr索引库查看:
4.4分页查询
/**
* 分页查询
*/
@Test
public void testPageSearch(){
//创建Query指定查询条件
Query query = new SimpleQuery("*:*");
//设置分页
query.setOffset(0);//开始索引(默认0
query.setRows(5);//每页记录数(默认10
//分页查询
//query:是查询条件的封装
//Item.class:查询的数据结果集需要转换成Item
ScoredPage<Item> scorePage = solrTemplate.queryForPage(query, Item.class);
//获取结果集
List<Item> items = scorePage.getContent();
//总记录数
System.out.println("总记录数:"+scorePage.getTotalElements());
//输出记录
for (Item item : items) {
System.out.println(item);
}
}
运行成功控制台查看结果:
4.5条件查询(Criteria 用于对条件的封装:
/***
* 条件查询
*/
@Test
public void testPageSearchMutil(){
Query query = new SimpleQuery("*:*");
//封装查询条件
Criteria criteria = new Criteria("item_title").contains("华为");
//把Criteria加入到Query中
query.addCriteria(criteria);
//设置分页
query.setOffset(0); //开始索引(默认0)
query.setRows(15); //每页记录数(默认10)
//分页查询
ScoredPage<Item> items = solrTemplate.queryForPage(query, Item.class);
//总记录数
System.out.println("总记录数:"+items.getTotalElements());
//输出记录
for (Item item : items.getContent()) {
System.out.println(item);
}
}
运行成功控制台查看结果:
4.6删除全部数据
/***
* 全部删除
*/
@Test
public void testDeleteAll(){
Query query=new SimpleQuery("*:*");
solrTemplate.delete(query);
solrTemplate.commit();
}
运行成功进入solr索引库查看:
4.7插入多条数据
/**
* 插入多条数据
*/
@Test
public void testBatchAdd(){
ArrayList<Item> items = new ArrayList<Item>();
for (int i = 0; i <20 ; i++) {
Item item = new Item();
item.setId(1L+(int)(Math.random()*100));
item.setBrand("华为"+(int)(Math.random()*100));
item.setCategory("手机"+(int)(Math.random()*100));
item.setGoodsId(1L+(int)(Math.random()*100));
item.setSeller("华为2号专卖店"+(int)(Math.random()*100));
item.setTitle("华为Mate9"+(int)(Math.random()*100));
item.setPrice(new BigDecimal(2+(int)(Math.random()*100)));
items.add(item);
}
//执行保存操作
solrTemplate.saveBeans(items);
//提交
solrTemplate.commit();
}
运行成功后进入solr索引库查看:
over~