Spring Data Solr 对 Solr 的增删改查实例

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

一、环境搭建


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

 1 <dependencies>
 2     <dependency>
 3         <groupId>org.springframework.data</groupId>
 4         <artifactId>spring-data-solr</artifactId>
 5         <version>1.5.5.RELEASE</version>
 6     </dependency> 
 7     <dependency>
 8         <groupId>org.springframework</groupId>
 9         <artifactId>spring-test</artifactId>
10         <version>4.2.4.RELEASE</version>
11     </dependency>
12     <dependency>
13         <groupId>junit</groupId>
14         <artifactId>junit</artifactId>
15         <version>4.9</version>
16     </dependency>
17 </dependencies>

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

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:solr="http://www.springframework.org/schema/data/solr"
 6     xsi:schemaLocation="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     <!-- solr服务器地址 -->
14     <solr:solr-server id="solrServer" url="http://127.0.0.1:8080/solr" />
15 
16    
17     <!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
18     <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
19         <constructor-arg ref="solrServer" />
20     </bean>
21 </beans>

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

二、Solr 数据添加与修改


创建测试类: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<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
10     System.out.println("总记录数:"+page.getTotalElements());
11     List<TbItem> list = page.getContent();
12     showList(list);
13 }    
14 //显示记录数据
15 private void showList(List<TbItem> 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<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
10     System.out.println("总记录数:"+page.getTotalElements());
11     List<TbItem> 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 }
posted @ 2020-11-21 16:59  Java程序员进阶  阅读(400)  评论(0编辑  收藏  举报