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.测试接口
