一、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>
<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-server id="solrServer" url="http://192.168.199.245:8080/solr"/>
<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 {
@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 {
@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();
}
@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("*:*");
query.setOffset(20);
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();
}
}