SpringBoot整合Solr

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

【七】鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章