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- ...
随机推荐
- vue项目 调用百度地图 BMap is not defined
这次老板新接了一个四点半官网页面,使用vue来写.emm……我感觉整个人都不好了,两天半解决了20个静态页面.还好vue写页面简直飞快,遇到一个vue的新坑,使用百度地图. 研究了好一会,总是报错BM ...
- Text Relatives
[Text Relatives] With TextKit the resources at your disposal range from framework objects—such as te ...
- 看图说说class文件结构(部分)
- windows7 不能更新,提示:"WindowsUpdate_80240016" "WindowsUpdate_dt000",如何解决?
计算机(右键) ---- 管理 -------- 服务和应用程序 -----服务(找到名称为windows update的服务,并且在windwos update服务右键 选择重新启动 ) 再次安装更 ...
- C# FTPClientHelper共公类 实现文件上传,目录操作,下载等动作
文档说明 本文档使用Socket通信方式来实现ftp文件的上传下载等命令的执行 1.基本介绍 由于最近的项目是客户端的程序,需要将客户端的图片文件[切图]-[打包]-[ftp上传],现在就差最后一步了 ...
- ubuntu 安装 zend studio
hi,everyone!2014 年到了,是20你死还是爱你一世,世人不得而知.夜观天象,道德依旧在沦丧,经济依然在滑坡.行了,就整这几句.最近在折腾linux,这篇文章,没有什么意义.只是找找写bl ...
- EBS报错FRM-92095:Oracle JInitiator版本太旧,请安装版本1.1.8.2或更高版本
EBS打开报错FRM-92095:Oracle JInitiator版本太旧,请安装版本1.1.8.2或更高版本 打开EBS的form,系统报错,中文提示信息是:FRM-92095:oracle ji ...
- CentOS6.5中使用 iperf 检测主机间网络带宽
安装方式 # yum install http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm# yum inst ...
- MSP430 G2553 LaunchPad设置GPIO
一. 背景知识:逻辑运算符的使用 当程序初始化时,对于复位状态有不确定性的寄存器(如PxOUT),建议采用直接赋值:其他情况下最好使用逻辑运算符修改寄存器. 直接赋值 REGISTER = 0b111 ...
- [Erlang21]Erlang性能分析工具eprof fporf的应用
前段时间项目改代码突然cpu波动很大,排查了好久都没有找到原因,只能求助于性能测试工具 : <<Erlang程序设计>>----Joe Armstorng[哈哈,登月第一人 ...