Spring Data Solr 的初步使用(与maven工程搭配)
一丶Spring Data solr 的由来
Spring Data Solr是为了方便Solr的开发所研制的一个框架,其底层是对SolrJ(官方API)的封装。
二丶maven工程中的依赖引入
|
<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> |
三丶配置文件的的相关内容 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服务器地址 当之后为集群配置时,此处填写相应的IP地址 --> <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> |
四丶相关注解
1.在相关查询字段名称上方用@Field注解进行配置,如果属性名称与配置文件中定义的域名城不一致时,需要使用该注解指定对应的域名城
2.当查询条件为不固定的字段时,应该配合@Dynamic注解进行配置,如何对该属性进行处理,下方动态域的配置有实力代码
五丶相关API的使用(相关封装的增删改查方法)
1.单个对象的存储
solrTemplate.saveBean(item);
2.通过主键Id查询对象
solrTemplate.getById(1, TbItem.class);
3.通过主键Id删除对象
solrTemplate.deleteById("1");
4.保存多个对象(保存集合)
solrTemplate.saveBeans(list);
5.分页查询(不带条件,当不带条件时,*:*必须要写,不然会报错))
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();//获取该页的内容
6.条件查询
criteria 构造条件,可以用来比较大小,匹配,包含,in被包含等等
Query query=new SimpleQuery("*:*");
Criteria criteria=new Criteria("item_title").contains("2");
criteria=criteria.and("item_title").contains("5");
criteria=criteria.and("item_title").is("5");//si为匹配的意思 相当于like
query.addCriteria(criteria);
7.删除所有数据
Query query=new SimpleQuery("*:*");
solrTemplate.delete(query);
8.事务的提交
solrTemplate.commit();
六丶动态域的使用
1.在pojo中定义map,,键与值的泛型都为String(因为在查询中,一般配置都为String,在solr的配置文件中查询字段一般都配置为Stirng)
2.设置对应的get和set方法
3.同时使用@Field与@Dynamic注解(指定对应的动态域对象)
4.将可变查询条件封装到map中(一般在数据库存储为json字符转,可直接解析为map集合,可直接将其封装并存储到solr中)
七丶关键字搜索
1.在使用关键字搜索时,一般将多个关键字存放于map集合中,而对用户输入的关键字的分词,由分词器(中文分析器)来完成
2.按照分词规范基本每个分词选项都会去查询
3.solr中当多条件查询时,会按照分词进行分词,然后按照给个分词都去查询,分词之间是或者的关系,目的是为了多查询数据出来. 查询结果显示,按照
匹配度越高的越在前面 当有空格的时候会发生查询结果没有的情况,应该在后台将其处理掉
八丶关于分页
分页逻辑
一次性显示5页
当totalPages小于5等于5时 全部展示
否则一次性显示5
pageNo小于等于3显示前五页
大于等于totalPages-2 显示最后五页
否则当前页码是显示 pageNo-2 - pageNo +2
query.setOffset((pageNo-1)*pageSize);
query.setRows(pageSize);
设置好之后配合高亮查询即可。
九丶排序查询
solr中有按照某个字段进行升序降序排列的API, 在查询条件query中,加
query.addSort(sort),Sort sort = new Sort(Sort.Direction.有一系列枚举,ASC,desc等,第二个参数为字段名称字符串)

浙公网安备 33010602011771号