对solr服务器进行访问:本质上就是使用了http请求和响应,当我们访问solr进行搜索时,实质上就是发送了一个http请求,如http://localhost:9080/solr/collection1/select?q=%3A&wt=json&indent=true
solr接收到这个请求后,给我们返回了响应。

对Solr服务器进行访问的方式,一共有三种:
1、使用solr官方类库--solrJ,实现原理就是使用http请求和响应,只是进行了一层封装,不需要写请求的url等参数
2、使用SpringDataSolr,实现原理是,对solr官方类库--solrJ进行了封装
3、使用httpClient,手动请求solr,手动处理响应
SpringDataSolr的使用:
1、引入相关jar包
<dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-solr</artifactId><version>1.5.5.RELEASE</version>
</dependency>
2、在src/main/resources下创建 applicationContext-solr.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="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.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- solr服务器地址 --><solr:solr-serverid="solrServer"url="http://127.0.0.1:8080/solr"/><!-- solr模板,使用solr模板可对索引库进行CRUD的操作 --><beanid="solrTemplate"class="org.springframework.data.solr.core.SolrTemplate"><constructor-argref="solrServer"/></bean></beans>
3、@Field注解:当一个实体类的属性使用@Field注解标识时,就表示这个属性和solr里面的一个域的name相匹配,如:
public class TbItem implements Serializable{@Fieldprivate Long id;      //就表示这个属性对应solr中域名为id的域@Field("item_title")private String title; //就表示这个属性对应solr中域名为item_title的域@Field("item_goodsid")private Long goodsId;@Field("item_category")private String category;@Field("item_brand")private String brand;@Field("item_seller")private String seller;@Field("item_price")private BigDecimal price;@Field("item_image")private String image;}
4、向solr索引库中增加&修改数据:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext-solr.xml")
public class TestTemplate {@Autowiredprivate SolrTemplate solrTemplate; @Testpublic void testAdd(){TbItem item = new TbItem();item.setId(1L);                //id域是必须要添加的(PS:当id相同时,再次插入时,就变成了修改操作)item.setTitle("魅族Pro7");item.setCategory("手机");item.setBrand("魅族");item.setSeller("魅族旗舰店");item.setGoodsId(10L);item.setPrice(new BigDecimal(1500));//将数据添加到solr中solrTemplate.saveBean(item);//提交solrTemplate.commit();}
}
5、对solr进行按id域查询和删除:
/*** 根据solr索引库的id查询数据*/
@Test
public void findById(){TbItem item = solrTemplate.getById(1L, TbItem.class);System.out.println(item.getTitle());
}/*** 根据solr索引库的id删除数据*/
@Test
public void testDelete(){solrTemplate.deleteById("1");        //因为插入solr中的数据,id就变成string,这里也可以传入一个list,批量删除solrTemplate.commit();    //必须要提交,否则不起作用
}
6、批量插入和分页查询
/*** 批量插入*/
@Test
public void testAddList(){List<TbItem>list=new ArrayList();for(int i=0; i<100; i++){TbItem item=new TbItem();item.setId(i+1L);item.setBrand("魅族");item.setCategory("手机");item.setGoodsId(1L);item.setSeller("魅族旗舰店");item.setTitle("魅族Pro"+i);item.setPrice(new BigDecimal(2000+i));   list.add(item);}solrTemplate.saveBeans(list);       //saveBeans这个方法,这样就可以实现批量插入solrTemplate.commit();
}/*** 分页查询*/
@Test
public void testQueryPage(){//1.构造查询对象,Query是一个接口,new一个它的实现类SimpleQueryQuery query = new SimpleQuery("*:*");      //表示查询全部数据,如果要根据域查询,就在这里传入域名query.setOffset(20);      //从第几条数据开始查询,默认是0query.setRows(20);          //查询多少条数据,默认是10//2.查询数据,这里得到的是一页的数据ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);for (TbItem item : page) {System.out.println(item.getTitle());System.out.println(item.getSeller());System.out.println(item.getBrand());}System.out.println("总记录数:" + page.getTotalElements());System.out.println("总页数: " + page.getTotalPages());      //如果在上面不设置Offset和Rows的话,就会采用默认值,name总页数就会是1
}
7、条件查询和删除全部记录
/*** 条件查询*/
@Test
public void testPageQueryMutil(){//1.构造查询对象,Query是一个接口,new一个它的实现类SimpleQueryQuery query = new SimpleQuery("*:*");     //表示查询全部数据,如果要根据域查询,就在这里传入域名//添加查询条件Criteria criteria = new Criteria("item_title").contains("5");        //查询item_title域中包含 5 这个词的数据criteria = criteria.and("item_brand").contains("2");            //新增一个查询条件,查询item_brand 域中包含 2 这个词的数据query.addCriteria(criteria);//query.setOffset(20);      //从第几条数据开始查询,默认是0//query.setRows(20);            //查询多少条数据,默认是10//2.查询数据,这里得到的是一页的数据ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);for (TbItem item : page) {System.out.println(item.getTitle());System.out.println(item.getSeller());System.out.println(item.getBrand());}System.out.println("总记录数:" + page.getTotalElements());System.out.println("总页数: " + page.getTotalPages());      //如果在上面不设置Offset和Rows的话,就会采用默认值,name总页数就会是1
}/*** 删除全部记录*/
@Test
public void testDeleteAll(){Query query=new SimpleQuery("*:*");solrTemplate.delete(query);solrTemplate.commit();
}

Solr学习笔记(三)-----SpringDataSolr操作相关推荐

  1. python文件是什么的集合和抽象_python学习笔记(三):文件操作和集合

    这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 1 2 3 ...

  2. Jmeter学习笔记三_操作数据库(MySQL)

    一.到入JDBC的jar包 因为jmeter本身不能直接连接mysql,所以需要导入第三方的jar包,来连接mysql 将jar包放在Jmeter安装目录/lib/mysql-connector-ja ...

  3. flash 怎么擦掉fpga_SPI FLASH学习笔记(三)擦除操作

    Block Erase (D8H) BLOCK ERASE(D8H)命令用于在块级别擦除.每块有64页,每页2176字节(2048 + 128字节).每个块为136 KB. BLOCK ERASE命令 ...

  4. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

  5. Mr.J-- jQuery学习笔记(三十二)--jQuery属性操作源码封装

    扫码看专栏 jQuery的优点 jquery是JavaScript库,能够极大地简化JavaScript编程,能够更方便的处理DOM操作和进行Ajax交互 1.轻量级 JQuery非常轻巧 2.强大的 ...

  6. OpenCasCade学习笔记(三):加载显示STEP格式图片,并实现平移、缩放和旋转操作

    OpenCasCade学习笔记(三):加载显示STEP格式图片,并实现平移.缩放和旋转操作 C3DWidget.h #pragma once#include <QtWidgets/QApplic ...

  7. Polyworks脚本开发学习笔记(三)-TREEVIEW进阶操作

    Polyworks脚本开发学习笔记(三)-TREEVIEW进阶操作 移动/交换对象的顺序 移动对象的顺序 TREEVIEW FEATURE MOVE ( 1,2 ) 将索引号为1和2的特征交换位置 T ...

  8. Hive学习笔记三之函数操作

    文章目录 5 函数 5.1 系统内置函数 5.2 常用内置函数 5.2.1 空字段赋值 5.2.2 CASE WHEN THEN ELSE END(类似于java中的switch case) 5.2. ...

  9. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  10. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记--使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

最新文章

  1. Ratatosk - Hybrid error correction of long reads enables accurate variant calling and assembly
  2. ssdb主从及双主模型配置和简单管理
  3. 焦虑的移动互联网开发者如何破局?专题解析
  4. oracle更换rac节点,Oracle-rac 更改VIP地址—2节点的
  5. 系统延时任务及定时任务
  6. 线性回归中oracle性质,66.Oracle数据库SQL开发之 高级查询——使用线性回归函数...
  7. codeproject上发现的DataSet调试利器
  8. 单片机中如何将BCD码拆开_单片机bcd码转换
  9. 9月安卓机性能榜单公布:华为未进前十,第一名有点意外
  10. python之list[index1:index2]是左闭右开
  11. L1-076 降价提醒机器人 (10 分)-PAT 团体程序设计天梯赛 GPLT
  12. mysql空间计算_MySQL 空间计算 空间查询
  13. msvcrt.dll故障模块 explorer.exe_辽阳专业的风冷热泵模块机组厂
  14. 什么是Symbian
  15. mysql innodb ibd,mysql innodb 从 ibd 文件恢复表数据
  16. 计算机驱动打不开,驱动人生打不开怎么办
  17. Swiper的种种踩坑与解决方案
  18. iPhone添加节假日日历地址
  19. Android指纹验证
  20. vs2019 C#提示程序未兼容

热门文章

  1. iPhone 丢失或忘记锁屏密码
  2. 夸克浏览器视频缓存的简单合并
  3. 《大明宫词》经典台词89句——欧式长句中的东方古典
  4. 分布式电商项目——4.搭建微信公众号平台以及整合WxJava框架提供注册码
  5. 类定义中class+宏+类名的意义
  6. 软考高级-系统架构师-访问控制XACML与RBAC
  7. 获取苹果设备和系统信息(更新至iPhone X)
  8. 四元数 右手坐标系 转 左手坐标系
  9. windows 截屏快捷键x220_电脑截屏的快捷键是什么?
  10. Android仿QQ主界面-------完善篇