← 返回首页
SpringBoot+DataRepositories
发表时间:2023-02-26 22:26:12
SpringBoot+DataRepositories操作ES

SpringBoot+DataRepositories操作ES

1.Java操作Elasticsearch

Java操作ES常用的方式有以下几种:

推荐使用SpringBoot+Spring Data Repositories,封装的比较完善,上手简单,如果使用一些高级搜索的话可以考虑使用 SpringBoot+RestClient(RestHighLevelClient )

本节我们探讨SpringBoot+Spring Data Repositories 方式。

2.实现步骤

1.在pom.xml中添加依赖。

<properties>
    <java.version>1.8</java.version>
    <mysql.version>8.0.28</mysql.version>
    <data-elasticsearch.version>4.3.6</data-elasticsearch.version>
</properties>

<dependencies>
    <!--
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
         <version>${data-elasticsearch.version}</version>
    </dependency>
    -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-elasticsearch</artifactId>
        <version>${data-elasticsearch.version}</version>
    </dependency> 
</dependencies>

2.在application.yml添加ES的配置

#yml格式配置文档范例
server:
  #端口配置
  port: 8080
  #上下文
  servlet:
    context-path: /esdemo
spring:
  elasticsearch:
    rest:
      # es地址,多个地址用逗号隔开
      uris: http://192.168.3.99:9200
      # es开启了security的需要添加用户名和账户
      #username: elastic
      # es开启了security的需要添加用户名和账户
      #password: elastic

3.定义测试的实体类。


import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import java.io.Serializable;


@Data
@Document(indexName = "students",replicas = 0,shards = 1)
public class Students implements Serializable,Cloneable {

    @Id
    private String sid;
    @Field(type = FieldType.Text, name = "name",analyzer = "standard")
    private String name;

    @Field(type = FieldType.Integer, name = "age",analyzer = "standard")
    private int age;
}

注意:由于是使用了Spring的ElasticSearchRepositories,建议不要添加任何和JPA相关的注解,比如:@Entity,@Table,@Id等JPA注解。

4.定义Repository接口

import com.example.springdata_repositories.domain.Students;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface  StudentsRepository extends ElasticsearchRepository<Students,String> {

}

5.定义测试接口

@RestController
@RequestMapping("students")
public class StudentsController {

    @Resource
    private StudentsRepository studentsRepository;


    //@PostMapping("/{id}")
    @PostMapping("/")
    public R saveStudents(@RequestBody Students students) {
        try {
            Students s = studentsRepository.save(students);
            return R.success("保存学生资料成功!", s);
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常!");
        }
    }


    @GetMapping("/{sid}")
    public R queryStudentBySid(@PathVariable("sid") String sid){
        try{
            Optional<Students> optional = studentsRepository.findById(sid);
            return optional.map(students -> R.success("查询学生资料成功!", students)).orElseGet(() -> R.fail("查询学生资料失败!"));

        }catch(Exception ex){
            ex.printStackTrace();
            return R.error("程序出现异常!");
        }
    }
}

6.测试接口