代码已上传至Github 地址:https://github.com/ylw-github/Spring-Data-Solr-Demo.git
1.集成步骤:(1)创建 maven 工程,pom.xml 中引入依赖
org.apache.solr
solr-solrj
${solrj.version}
org.springframework.data
spring-data-solr
1.5.5.RELEASE
(2)在 src/main/resources 下创建 applicationContext-solr.xml
2.域注解
创建 cn.itcast.pojo 包,将品优购的 TbItem 实体类拷入本工程 ,属性使用@Field 注解标识 。 如果属性与配置文件定义的域名称不一致,需要在注解中指定域名称。
package com.pyg.pojo;
import org.apache.solr.client.solrj.beans.Field;
import org.springframework.data.solr.core.mapping.Dynamic;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
public class TbItem implements Serializable{
/**
*
*/
private static final long serialVersionUID = -4730788370859047528L;
@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;
//定义一个map,用来封装动态域: 规格数据
@Dynamic
@Field("item_spec_*")
private Map specMap;
//getter和setter......
}
3.单元测试如下
import com.pyg.pojo.TbItem;
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 java.math.BigDecimal;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:spring/applicationContext-solr.xml")
public class MySpringDataSOlr {
// 注入solr模版对象
@Autowired
private SolrTemplate solrTemplate;
// 测试
// 向索引库添加数据
@Test
public void addIndex() {
// 创建商品对象
TbItem item = new TbItem();
//
item.setId(100000000000L);
item.setGoodsId(10101010101L);
item.setTitle("番茄手机16G 5");
item.setPrice(new BigDecimal(10000000));
item.setBrand("番茄");
item.setCategory("手机");
// 写入数据到索引库
solrTemplate.saveBean(item);
// 提交
solrTemplate.commit();
}
// 测试
// 根据id查询
@Test
public void findIndexByID() {
TbItem item = solrTemplate.getById(100000000000L, TbItem.class);
System.out.println(item.toString());
}
// 测试
// 分页查询
@Test
public void findIndexByPage() {
// 创建solrQuery对象,封装条件
Query query = new SimpleQuery("*:*");
// 设置分页条件
// 设置分页查询起始位置
query.setOffset(0);
// 设置分页查询每页显示条数
query.setRows(10);
// 执行查询
ScoredPage page = solrTemplate
.queryForPage(query, TbItem.class);
// 获取分页记录
List list = page.getContent();
// 获取总记录数
long totalElements = page.getTotalElements();
System.out.println(totalElements + "====" + list);
}
// 测试
// 条件查询
@Test
public void findIndexByCritera() {
// 创建solrQuery对象,封装条件
Query query = new SimpleQuery("*:*");
//创建封装条件对象
Criteria criteria = new Criteria("item_keywords").is("番茄");
criteria.contains("16");
//把条件添加查询对象
query.addCriteria(criteria);
ScoredPage page = solrTemplate.queryForPage(query, TbItem.class);
//获取记录
List content = page.getContent();
System.out.println(content);
}
@Test
public void testDeleteAll(){
Query query=new SimpleQuery("*:*");
solrTemplate.delete(query);
solrTemplate.commit();
}
}