文章目录
SpringBoot整合Solr
【一】创建项目
创建springboot项目,可以跟着创建项目一步一步地走
【二】添加maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.feng</groupId>
<artifactId>springboot-solr</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-solr</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--整合solr-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--lombok简化-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入log4j日志依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
【三】配置yml
在yml添加配置,当前的路径保证服务器上已经安装solr
ps:如果服务器上海没有安装好solr请先安装好solr:https://blog.csdn.net/wenge1477/article/details/103446992
spring:
data:
solr:
host: http://192.168.183.129:8080/solr
【四】创建Bean
4.1 创建Bean
package com.feng.springbootsolr.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.solr.client.solrj.beans.Field;
import java.io.Serializable;
/**
* @Description 学生
* @Author fengwen
* @Date 2019/12/8 19:43
* @Version V1.0
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student implements Serializable {
private static final long serialVersionUID = -2221755230808487993L;
/**
* 学生id
*/
@Field("id")
private String id;
/**
* 学生姓名
*/
@Field("studentName")
private String studentName;
/**
* 学生年龄
*/
@Field("studentAge")
private Integer studentAge;
/**
* 学生性别
*/
@Field("studentGrander")
private Integer studentGrander;
}
4.2 添加字段索引
其中@Field为solr服务器上创建的字段索引,需要去solr配置文件中添加字段索引
到服务器上的solr的配置文件中进行设置:
vim /usr/local/solr-4.10.3/example/solr/collection1/conf/schema.xml
配置文件中添加字段
<!-- Student start -->
<field name="studentName" type="text_ik" indexed="true" stored="true" required="false" multiValued="false" />
<field name="studentAge" type="int" indexed="true" stored="true" required="false" multiValued="false" />
<field name="studentGrander" type="int" indexed="true" stored="true" required="false" multiValued="false" />
<!-- student end -->
ps: 其中type="text_ik"意思是使用中文分割器
【五】service
5.1 StudentService
package com.feng.springbootsolr.service;
import com.feng.springbootsolr.pojo.Student;
import java.util.List;
/**
* @Description
* @Author fengwen
* @Date 2019/12/8 19:48
* @Version V1.0
*/
public interface StudentService {
/**
* 保存学生
* @param student
* @return
*/
boolean saveStudent(Student student);
/**
* 根据条件查询学生
* @param param
* @param pagerNum
* @param pageSize
* @param sort
* @return
*/
List<Student> queryStudent(String param,int pagerNum ,int pageSize,String sort);
/**
* 通过id查询学生
* @param id
* @return
*/
Student queryById(String id);
}
5.2 StudentServiceImpl
package com.feng.springbootsolr.service.impl;
import com.feng.springbootsolr.pojo.Student;
import com.feng.springbootsolr.service.StudentService;
import lombok.extern.slf4j.Slf4j;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Description
* @Author fengwen
* @Date 2019/12/8 19:49
* @Version V1.0
*/
@Service
@Slf4j
public class StudentServiceImpl implements StudentService {
/**
* 调用solr的api查询学生
*/
@Autowired
private SolrClient solrClient;
/**
* 保存学生信息
*
* @param student
* @return
*/
@Override
public boolean saveStudent(Student student) {
try {
solrClient.addBean(student);
solrClient.commit();
} catch (Exception e) {
e.printStackTrace();
log.error("保存学生信息出错:{}", student);
return false;
}
return true;
}
@Override
public List<Student> queryStudent(String param, int pagerNum, int pageSize, String sort) {
SolrQuery query = new SolrQuery();
query.set("q", param);
query.set("start", (pagerNum - 1) * pageSize);
query.set("rows", pageSize);
query.set("sort", sort);
List<Student> studentList = null;
try {
QueryResponse response = solrClient.query(query);
studentList = response.getBeans(Student.class);
} catch (Exception e) {
log.error("查询学生信息出错:{}、{}、{}、{}", param, pagerNum, pageSize, sort);
}
return studentList;
}
@Override
public Student queryById(String id) {
SolrQuery query = new SolrQuery();
String param = "id:" + id;
query.set("q", param);
List<Student> studentList = null;
try {
QueryResponse response = solrClient.query(query);
studentList = response.getBeans(Student.class);
if (studentList != null && studentList.size() > 0) {
return studentList.get(0);
}
} catch (Exception e) {
e.printStackTrace();
log.error("查询学生信息出错:{}", id);
}
return null;
}
}
【六】controller
package com.feng.springbootsolr.controller;
import com.feng.springbootsolr.pojo.Student;
import com.feng.springbootsolr.service.StudentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @Description
* @Author fengwen
* @Date 2019/12/8 19:48
* @Version V1.0
*/
@RestController
@RequestMapping("student")
@Slf4j
public class StudentController {
@Autowired
private StudentService studentService;
/**
* 保存学生
*
* @param student
* @return
*/
@PostMapping("save")
public String saveStudent(Student student) {
boolean result = studentService.saveStudent(student);
if (!result) {
return "保存失败";
}
return "保存成功";
}
/**
* 通过id查询学生
*
* @param id
* @return
*/
@GetMapping("{id}")
public Student getById(@PathVariable("id") String id) {
Student student = studentService.queryById(id);
return student;
}
/**
* 通过条件查询学生
*
* @param param
* @param pageNum
* @param pageSize
* @param sort
* @return
*/
@GetMapping("query")
public List<Student> queryStudent( String param,
@RequestParam(required = false,defaultValue = "1") Integer pageNum,
@RequestParam(required = false,defaultValue = "5") Integer pageSize,
@RequestParam(required = false,defaultValue = "id desc") String sort) {
List<Student> studentList = studentService.queryStudent(param, pageNum, pageSize, sort);
return studentList;
}
}
项目github地址:https://github.com/fengsri/springboot-solr