Springboot和elasticsearch的查询
注意点: 版本问题
1.springboot和jdk版本及elasticsearch的版本需要配套使用
springboot: 2.7.13
jdk8
elasticsearch: 7.17.18
获取SpringBoot版本
java
public class Test {
public static void main(String[] args) {
System.out.println("Spring Boot 版本: " + SpringBootVersion.getVersion());
}
}
1.windows下载安装elasticsearch
- 下载地址: https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-18
- 解压到指定位置
- 启动命令
cmd
# 进入 bin 目录
cd C:\elasticsearch\elasticsearch-8.12.0\bin
# 启动
.\elasticsearch.bat
- 浏览器输入: http://localhost:9200/
- 成功响应:
json
{
"name" : "LUCKLI",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "GQNDlW0-QsyIi9VjSSPnRg",
"version" : {
"number" : "7.17.18",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "8682172c2130b9a411b1bd5ff37c9792367de6b0",
"build_date" : "2024-02-02T12:04:59.691750271Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
2. Spring Boot配置
1.配置文件
Spring Boot 配置本地 Elasticsearch
application.yml / application.properties
yaml
spring:
elasticsearch:
uris: http://localhost:9200
# 如果 Elasticsearch 8.x 开启了安全认证,需要配置用户名密码
# username: elastic
# password: 你的密码
2.pom文件
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
3.编写测试类
1. 创建实体类
java
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@Document(indexName = "user") // ES 索引名
public class User {
@Id
private String id;
private String name;
private Integer age;
// 构造方法、getter、setter
public User() {}
public User(String id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }
@Override
public String toString() {
return "User{id='" + id + "', name='" + name + "', age=" + age + "}";
}
}
2. 创建 Repository
java
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface UserRepository extends ElasticsearchRepository<User, String> {
// 按名称查询
List<User> findByName(String name);
}
3. 创建测试 Controller
java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private UserRepository userRepository;
// 添加数据
@PostMapping("/add")
public String add(@RequestParam String id,
@RequestParam String name,
@RequestParam Integer age) {
User user = new User(id, name, age);
userRepository.save(user);
return "保存成功: " + user;
}
// 查询所有
@GetMapping("/list")
public Iterable<User> list() {
return userRepository.findAll();
}
// 按名称查询
@GetMapping("/find")
public List<User> findByName(@RequestParam String name) {
return userRepository.findByName(name);
}
// 删除
@DeleteMapping("/delete/{id}")
public String delete(@PathVariable String id) {
userRepository.deleteById(id);
return "删除成功: " + id;
}
}
4. 单元测试
java
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class EsTest {
@Autowired
private UserRepository userRepository;
@Test
public void testSave() {
User user = new User("1", "李四", 30);
userRepository.save(user);
System.out.println("保存成功");
}
@Test
public void testFind() {
Iterable<User> list = userRepository.findAll();
list.forEach(System.out::println);
}
}