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等,第二个参数为字段名称字符串)

 

posted @ 2019-12-05 19:48  贝勒丶  阅读(376)  评论(0)    收藏  举报