天天看点

飞5的Spring Boot2(27)- solr

Solr

Apache Solr是一个搜索引擎。Spring Boot为Solr 5客户端library提供基本的自动配置,Spring Data Solr提供了在它之上的抽象,还有用于收集依赖的spring-boot-starter-data-solr’Starter’。

飞5的Spring Boot2(27)- solr

连接Solr

你可以注入一个自动配置的SolrClient实例,就像其他Spring beans那样,该实例默认使用localhost:8983/solr连接Solr服务器:

1@Component
2public class MyBean {
3    private SolrClient solr;
4    @Autowired
5    public MyBean(SolrClient solr) {
6        this.solr = solr;
7    }
8    // ...
9}      

如果你添加自己的SolrClient类型的@Bean,它将会替换默认实例。

Spring Data Solr仓库

Spring Data包含的仓库也支持Apache Solr,正如先前讨论的JPA仓库,基于方法名自动创建查询是基本的原则。

实际上,不管是Spring Data JPA还是Spring Data Solr都共享相同的基础设施。所以你可以使用先前的JPA示例,并假设那个City现在是一个@SolrDocument类而不是JPA @Entity,它将以同样的方式工作。

Spring Data Solr入门小Demo

搭建工程

创建maven工程,pom.xml中引入依赖

1<parent>
 2        <groupId>org.springframework.boot</groupId>
 3        <artifactId>spring-boot-starter-parent</artifactId>
 4        <version>1.5.2.RELEASE</version>
 5    </parent>
 6    <properties>
 7        <spring.data.solr.version>2.1.1.RELEASE</spring.data.solr.version>
 8    </properties>
 9    <dependencyManagement>
10        <dependencies>
11            <dependency>
12                <groupId>org.springframework.data</groupId>
13                <artifactId>spring-data-solr</artifactId>
14                <version>${spring.data.solr.version}</version>
15            </dependency>
16        </dependencies>
17    </dependencyManagement>
18    <dependencies>
19        <!--添加Web依赖, 使项目变成web项目-->
20        <dependency>
21            <groupId>org.springframework.boot</groupId>
22            <artifactId>spring-boot-starter-web</artifactId>
23        </dependency>
24        <dependency>
25            <groupId>org.springframework.data</groupId>
26            <artifactId>spring-data-solr</artifactId>
27        </dependency>
28        <!--test-->
29        <dependency>
30            <groupId>org.springframework.boot</groupId>
31            <artifactId>spring-boot-starter-test</artifactId>
32        </dependency>
33    </dependencies>      

SpringBoot 快速启动

1@SpringBootApplication
2@EnableAutoConfiguration
3public class AppMain {
4    public static void main(String[] args) {
5        SpringApplication.run(AppMain.class, args);
6    }
7}      

可能遇见的问题:

  1. 一般spring-boot项目的启动类都放在项目的根路径下, 这样可以不用配置@ComponentScan注解来扫描相应的类, 如果遇到无法读取配置类属性的情况, 首先考虑这个因素

在resources下新建application.properties, 完成solr的基本配置

1spring.data.solr.host=http://127.0.0.1:8983/solr      

这个属性配置的是solr服务器的访问地址, 因为本项目是作为客户端来访问solr服务器, 所以不用做更多的配置

这个属性是是通过@ConfigurationProperties("spring.data.solr")读取出来的, 默认被读取到 SolrProperties.class 中 详情请使用类查找器查看该类

1@RestController
 2public class SolrController {
 3    @Autowired
 4    private SolrClient client;
 5    @RequestMapping("/")
 6    public String testSolr() throws IOException, SolrServerException {
 7        SolrDocument document = client.getById("test", "fe7a5124-d75b-40b2-93fe-5555512ea6d2");
 8        System.out.println(document);
 9        return document.toString();
10    }
11}      
1SolrDocument{goodsId=[129831], id=fe7a5124-d75b-40b2-93fe-5555512ea6d2, _version_=1562570354094768128}      

继续阅读