ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-11-21 17:01:37  阅读:151  来源: 互联网

标签:Spring 改查 TbItem item import query solrTemplate 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 }

标签:Spring,改查,TbItem,item,import,query,solrTemplate,Solr
来源: https://www.cnblogs.com/zhengzhaoxiang/p/13977088.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有