Spring Data Solr 对 Solr 的增删改查实例
阅读原文时间:2023年07月08日阅读:1

Spring Data Solr 就是为了方便 solr 的开发研制的一个框架,其底层是对 SolrJ(官方 API)的封装


第一步:创建 Maven 项目(springdatasolrDemo 打包方式为 jar 类型)
第二步:pom.xml 文件中引入项目相关的依赖:

1 2 3 org.springframework.data 4 spring-data-solr 5 1.5.5.RELEASE 6 7 8 org.springframework 9 spring-test 10 4.2.4.RELEASE 11 12 13 junit 14 junit 15 4.9 16 17

第三步:在 src/main/resources 目录下添加 applicationContext-solr.xml 配置文件,配置 Solr 服务器的地址。

1
2 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 14 15 16 17 18 19 20 21

第四步:构建与 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 specMap;


创建测试类: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 page = solrTemplate.queryForPage(query, TbItem.class);
10 System.out.println("总记录数:"+page.getTotalElements());
11 List list = page.getContent();
12 showList(list);
13 }
14 //显示记录数据
15 private void showList(List 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 page = solrTemplate.queryForPage(query, TbItem.class);
10 System.out.println("总记录数:"+page.getTotalElements());
11 List 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 }

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章