Spring Data Solr的入门

一、Spring Data Solr的简介
  • Spring Data Solr就是为了方便Solr的开发所研制的一个框架,其底层是对SolrJ(官方API)的封装。
二、Spring Data Solr的入门
1.创建maven工程

在这里插入图片描述

2.添加依赖 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>solr.demo</groupId>
<artifactId>springdatasolrdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>

<!--引入SpringDataSolr的依赖 -->
<dependencies>
	<dependency>
		<groupId>org.springframework.data</groupId>
		<artifactId>spring-data-solr</artifactId>
		<version>1.5.5.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-test</artifactId>
		<version>4.2.4.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.9</version>
	</dependency>
</dependencies>
</project>
3.在src/main/resources下创建 applicationContext-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/data/solr 
 	http://www.springframework.org/schema/data/solr/spring-solr-1.0.xsd
	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">

<!-- solr服务器地址 -->
<solr:solr-server id="solrServer" url="http://192.168.199.245:8080/solr"/>

<!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
	<constructor-arg ref="solrServer" />
</bean>
</beans>
4.@Field 注解
  • 创建一个TbItem实体类,属性使用@Field注解标识 。 如果属性与solr的配置文件定义的域名称不一致,需要在注解中指定域名称
package solr.demo.pojo;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import org.apache.solr.client.solrj.beans.Field;

public class TbItem implements Serializable {
	@Field
	private Long id;
	
    @Field("item_title")
	private String title;

	private String sellPoint;
    
	@Field("item_price")
	private BigDecimal price;

	private Integer stockCount;

	private Integer num;

	private String barcode;

	@Field("item_image")
	private String image;

	private Long categoryid;

	private String status;

	private Date createTime;

	private Date updateTime;

	private String itemSn;

	private BigDecimal costPirce;

	private BigDecimal marketPrice;

	private String isDefault;

	@Field("item_goodsid")
	private Long goodsId;

	private String sellerId;

	private String cartThumbnail;
	
	@Field("item_category")
	private String category;

	@Field("item_brand")
	private String brand;

	private String spec;

	@Field("item_seller")
	private String seller;
	set和get方法
5.创建测试类TestTemplate.java
package solr.demo.test;
import java.math.BigDecimal;
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 solr.demo.pojo.TbItem;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-solr.xml")
public class TestTemplate {

//引入solr模版类
@Autowired
private SolrTemplate solrTemplate;

@Test
public void testAdd() {
	//创建实体类
	TbItem item=new TbItem();
	//插入数据
	item.setId(1L);
	item.setTitle("华为P30 Pro");
	item.setCategory("手机");
	item.setBrand("华为旗舰");
	item.setSeller("华为旗舰店售");
	item.setGoodsId(1L);
	item.setPrice(new BigDecimal(3000.06));
	//保存到域中
	solrTemplate.saveBean(item);
	//提交
	solrTemplate.commit();
}
}
  • 测试结果
    在这里插入图片描述
6.添加方法和修改方法是一样的
package solr.demo.test;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
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.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.Query;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.data.solr.core.query.result.ScoredPage;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import solr.demo.pojo.TbItem;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-solr.xml")
public class TestTemplate {

// 引入solr模版类
@Autowired
private SolrTemplate solrTemplate;

// 添加和修改
@Test
public void testAdd() {
	// 创建实体类
	TbItem item = new TbItem();
	// 插入数据
	item.setId(1L);
	item.setTitle("华为P30 Pro");
	item.setCategory("手机");
	item.setBrand("华为旗舰");
	item.setSeller("华为旗舰店售");
	item.setGoodsId(1L);
	item.setPrice(new BigDecimal(3000.06));
	// 保存到域中
	solrTemplate.saveBean(item);
	// 提交
	solrTemplate.commit();
}

// 根据主键查询
@Test
public void findById() {
	TbItem item = solrTemplate.getById(1L, TbItem.class);
	System.out.println(item.getTitle());
}

// 根据主键删除
@Test
public void deleteById() {
	solrTemplate.deleteById("1");
	solrTemplate.commit();
}

// 分页查询前先加入100条数据
@Test
public void AddList() {
	List<TbItem> list = new ArrayList();
	for (int i = 0; i < 100; i++) {
		// 创建实体类
		TbItem item = new TbItem();
		// 插入数据
		item.setId(i + 1L);
		item.setTitle("华为Pro" + i);
		item.setCategory("手机");
		item.setBrand("华为旗舰" + i);
		item.setSeller("华为旗舰店售");
		item.setGoodsId(1L);
		item.setPrice(new BigDecimal(3000.06 + i));
		list.add(item);
	}
	// 特有的方法,记录一下
	solrTemplate.saveBeans(list);
	solrTemplate.commit();
}

//分页查询方法
@Test
public void pageQuery() {
	//查询对象,查询表达式
	Query query=new SimpleQuery("*:*");
	//开始索引,默认0
	query.setOffset(20);
	//每页记录数默认10
	query.setRows(20);
	//构建一个查询对象
	ScoredPage<TbItem> page=solrTemplate.queryForPage(query, TbItem.class);
	for(TbItem item:page.getContent()) {
		System.out.println(item.getTitle()+"..."+item.getPrice()+"..."+item.getBrand());
	}
	System.out.println("总记录数:"+page.getTotalElements());
	System.out.println("总页数:"+page.getTotalPages());
}

//条件查询
@Test
public void pageQueryMuti() {
	//查询对象,查询表达式
	Query query=new SimpleQuery("*:*");
	//查询条件
	Criteria criteria=new Criteria("item_title").contains("5");
	//多个条件
	criteria=criteria.and("item_title").contains("2");
	//执行查询
	query.addCriteria(criteria);
	//构建一个查询对象
	ScoredPage<TbItem> page=solrTemplate.queryForPage(query, TbItem.class);
	for(TbItem item:page.getContent()) {
		System.out.println(item.getTitle()+"..."+item.getPrice()+"..."+item.getBrand());
	}
	System.out.println("总记录数:"+page.getTotalElements());
	System.out.println("总页数:"+page.getTotalPages());
	
}

//删除所有数据
@Test
public void deleteAll() {
	Query query=new SimpleQuery("*:*");
	solrTemplate.delete(query);
	solrTemplate.commit();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值