Solr学习笔记(5)—— Spring Data Solr入门
一、Spring Data Solr简介
前面已经介绍了通过solrJ来操作solr,那么我们如何将Solr的应用集成到Spring中?Spring Data Solr就是为了方便Solr的开发所研制的一个框架,其底层是对SolrJ(官方API)的封装。
二、Spring Data Solr入门案例
2.1 搭建工程
(1)创建maven工程,pom.xml中引入依赖
<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>
(2)在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:solr-server id="solrServer" url="http://127.0.0.1:8080/solr" />
<!-- solr模板,使用solr模板可对索引库进行CRUD的操作 -->
<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
<constructor-arg ref="solrServer" />
</bean>
</beans>
2.2 @Field 注解
创建TbItem实体类,属性使用@Field注解标识 。如果属性与schema.xml中定义的域名称不一致,需要在注解中指定域名称。
public class TbItem implements Serializable{
@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;
.......
}
上面属性中,id在schema.xml中有了同名的属性名
,所以不用在@Field指定域的名称;而其他属性的名称和schema.xml中相应的field名称并不一致

所以需要在@Field中指定域名称,让实体类的属性与schema.xml中的域相对应。
2.3 增加(修改)
@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.setBrand("小米");
item.setCategory("手机");
item.setGoodsId((1L));
item.setSeller("小米之家");
item.setTitle("小米9透明尊享版");
item.setPrice(new BigDecimal(3999)); solrTemplate.saveBean(item);
solrTemplate.commit();
}
}
2.4 按主键查询
@Test
public void testFindOne() {
TbItem item = solrTemplate.getById(1, TbItem.class);
System.out.println(item.getTitle());
}
2.5 按主键删除
@Test
public void testDelete() {
solrTemplate.deleteById("1");
solrTemplate.commit();
}
2.6 分页查询
首先循环插入100条测试数据
@Test
public void testAddList() {
List<TbItem> list = new ArrayList<TbItem>();
for (int i = 0; i < 99; i++) {
TbItem item = new TbItem();
item.setId(i+1L);
item.setBrand("小米"+i);
item.setCategory("手机");
item.setGoodsId((i+1L));
item.setSeller("小米之家");
item.setTitle("小米9透明尊享版"+i);
item.setPrice(new BigDecimal(3999));
list.add(item);
} solrTemplate.saveBeans(list);
solrTemplate.commit();
}
编写分页查询测试代码:
@Test
public void testPageQuery() {
Query query = new SimpleQuery("*:*");
query.setOffset(20);//开始索引(默认0)
query.setRows(20);//每页记录数(默认10)
ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
System.out.println("总记录数:" + page.getTotalElements());
List<TbItem> list = page.getContent();
for (TbItem item : list) {
System.out.println(item.getTitle() +"---"+ item.getPrice());
}
}
2.7 条件查询
@Test
public void testPageQueryMutil() {
Query query = new SimpleQuery("*:*");
Criteria criteria = new Criteria("item_title").contains("小米");
criteria = criteria.and("item_price").is(3999.0);
query.addCriteria(criteria);
ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
System.out.println("总记录数:" + page.getTotalElements());
List<TbItem> list = page.getContent();
for (TbItem item : list) {
System.out.println(item.getTitle() +"---"+ item.getPrice());
}
}
2.8 高亮显示结果
/**
* 根据关键字搜索列表
* @param searchMap
* @return
*/
private Map searchList(Map searchMap) {
Map map = new HashMap();
SimpleHighlightQuery query = new SimpleHighlightQuery();
// 设置高亮的域
HighlightOptions highlightOptions = new HighlightOptions().addField("item_title");
// 高亮前缀
highlightOptions.setSimplePrefix("<em style='color:red'>");
// 高亮后缀
highlightOptions.setSimplePostfix("</em>");
// 设置高亮显示
query.setHighlightOptions(highlightOptions);
// 按照关键字查询
Criteria criteria = new Criteria("item_keywords").is(searchMap.get("keywords"));
query.addCriteria(criteria);
HighlightPage<TbItem> page = solrTemplate.queryForHighlightPage(query, TbItem.class);
// 循环高亮入口集合
for (HighlightEntry<TbItem> entry : page.getHighlighted()) {
// 获取原实体类
TbItem item = entry.getEntity();
if (entry.getHighlights().size() > 0 && entry.getHighlights().get(0).getSnipplets().size() > 0) {
// 设置高亮结果
item.setTitle(entry.getHighlights().get(0).getSnipplets().get(0));
}
}
map.put("rows", page.getContent());
return map;
}
2.9 分组查询
/**
* 查询分类列表
* @param searchMap
* @return
*/
private List searchCategoryList(Map searchMap){
List<String> list=new ArrayList();
Query query=new SimpleQuery();
//按照关键字查询
Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords"));
query.addCriteria(criteria);
//设置分组选项
GroupOptions groupOptions=new GroupOptions().addGroupByField("item_category");
query.setGroupOptions(groupOptions);
//得到分组页
GroupPage<TbItem> page = solrTemplate.queryForGroupPage(query, TbItem.class);
//根据列得到分组结果集
GroupResult<TbItem> groupResult = page.getGroupResult("item_category");
//得到分组结果入口页
Page<GroupEntry<TbItem>> groupEntries = groupResult.getGroupEntries();
//得到分组入口集合
List<GroupEntry<TbItem>> content = groupEntries.getContent();
for(GroupEntry<TbItem> entry:content){
list.add(entry.getGroupValue());//将分组结果的名称封装到返回值中
}
return list;
}
2.10 删除全部数据
@Test
public void testDeleteAll() {
Query query = new SimpleQuery("*:*");
solrTemplate.delete(query);
solrTemplate.commit();
}
Solr学习笔记(5)—— Spring Data Solr入门的更多相关文章
- Solr学习笔记之3、Solr dataimport - 从SQLServer导入数据建立索引
Solr学习笔记之3.Solr导入SQLServer数据建立索引 一.下载MSSQLServer的JDBC驱动 下载:Microsoft JDBC Driver 4.0 for SQL Server ...
- Solr学习笔记之4、Solr配置文件简介
Solr学习笔记之4.Solr配置文件简介 摘自<Solr in Action>. 1. solr.xml – Defines one or more cores per Solr ser ...
- solr学习笔记-linux下配置solr(转)
本文地址: http://zhoujianghai.iteye.com/blog/1540176 首先介绍一下solr: Apache Solr (读音: SOLer) 是一个开源.高性能.采用Jav ...
- SpringBoot学习笔记:Spring Data Jpa的使用
更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...
- Solr学习笔记之6、Solr学习资源
一.官方资源 1.官网:http://lucene.apache.org/solr/ 2.wiki:http://wiki.apache.org/solr/FrontPage 3.solr中文网:ht ...
- Spring Data Solr教程(翻译) 开源的搜索服务器
Solr是一个使用开源的搜索服务器,它采用Lucene Core的索引和搜索功能构建,它可以用于几乎所有的编程语言实现可扩展的搜索引擎. Solr的虽然有很多优点,建立开发环境是不是其中之一.此博客条 ...
- Spring Data Solr教程(翻译)
大多数应用都必须具有某种搜索功能,问题是搜索功能往往是巨大的资源消耗并且它们由于沉重的数据库加载而拖垮你的应用的性能 这就是为什么转移负载到一个外部的搜索服务器是一个不错的主意,Apache Solr ...
- Spring Data Solr —— 快速入门
Solr是基于Lucene(全文检索引擎)开发,它是一个独立系统,运行在Tomcat或Jetty(solr6以上集成了jetty,无需再部署到servlet容器上),但其原生中文的分词词功能不行,需要 ...
- solr学习笔记-入门
solr学习笔记 1.安装前准备 solr依赖java 8 运行环境,所以我们先安装java.如果没有java环境无法启动solr服务,并且会看到如下提示: [root@localhost solr- ...
随机推荐
- select获取下拉框的值 下拉框默认选中
本文主要介绍select下拉框的相关方法. 1.通过id获取下拉框的value和文本值 例如: <select class="form-control" id=" ...
- SQLServer锁的机制
SQLServer锁的机制:共享锁(S)排它锁(X)更新锁(U)意向共享 (IS)意向排它 (IX) 意向排它共享 (SIX)架构修改(Sch-M) 架构稳定性(Sch-S)大容量更新(BU)
- 光源 材质 简析——基于《real time rendering》第三版 第五章
对于真是世界的渲染,有三个重要的组成部分,光源,材质,以及摄像机.下面,我们一个一个来简单介绍一下. 光源:方向光,点光源,聚光灯.但是,在和物体表面交互的时候,光源对物体表面的影响是依赖光的辐照度( ...
- WHY JAVASCRIPT NEEDS TYPES
Types have a bad reputation for making code harder to read, adding unnecessary ceremony, and in gene ...
- mongo学习- 聚合project操作
mongodb中聚合project操作,必须和其他的聚合一起使用,它的作用有以下几个: 1.返回我们想要显示的的字段 {"$project":{"name":1 ...
- polymer技巧
1.添加一个div元素 我们完全可以自己造一个这样的东西出来,比如下面例子我们给 div 元素添加一个 is="demo-test" <script> var Poly ...
- ZOJ3714:Java Beans
There are N little kids sitting in a circle, each of them are carrying some java beans in their hand ...
- Python入门基础学习 一
Python入门基础学习 一 Python下载及安装 下载地址:https://www.python.org/,选择最新的版本下载 稍等一会,安装完成. 简单语句 从idle启动Python:IDLE ...
- Python学习-5.Python的变量与数据类型及字符串的分割与连接
在Python中,变量类型是固定的,一旦声明就不能修改其类型(在Python里感觉不应该用声明,而应该用使用) 正确: var = 1 print(var) var = 2 print(var) 依次 ...
- ubuntu 安装 hubicfuse
如果你没有gcc,请先安装gcc: 1: apt-get install build-essential 1. 从github上clone源码: https://github.com/TurboGit ...