服务器操作系统版本:Ubuntu 24.04
Java版本:21
Spring Boot版本:3.3.5
如果打算用GUI,虚拟机安装Ubuntu 24.04,见
1 Ubuntu上部署ElasticSearch
准备一台服务器,IP是192.168.100.200
1.1 安装JDK8
首先需要部署JDK8+,这里我使用了JDK8
sudo apt-get install -y openjdk-8-jdk;
1.2 下载ElasticSearch
mkdir -p /home/user/softwares;
cd /home/user/softwares;
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.16.1-linux-x86_64.tar.gz;
1.3 解压,改文件夹名
tar -zxvf elasticsearch-8.16.1-linux-x86_64.tar.gz;
mv elasticsearch-8.16.1 elasticsearch;
1.4 修改参数,减少内存消耗量
vim /home/user/softwares/elasticsearch/config/jvm.options;
-Xms1g
-Xmx1g
vim /home/user/softwares/elasticsearch/config/elasticsearch.yml;
node.name: node-1 #配置当前es节点名称(默认是被注释的,并且默认有一个节点名)
cluster.name: my-application #默认是被注释的,并且默认有一个集群名
path.data: /home/user/elasticsearch/data # 数据目录位置
path.logs: /home/user/elasticsearch/logs # 日志目录位置
network.host: 0.0.0.0 #绑定的ip:默认只允许本机访问,修改为0.0.0.0后则可以远程访问cluster.initial_master_nodes: ["node-1", "node-2"] #默认是被注释的 设置master节点列表 用逗号分隔
xpack.security.enabled: false
xpack.security.http.ssl:
enabled: false
xpack.security.transport.ssl:
enabled: false
mkdir -p /home/user/elasticsearch/data;
mkdir -p /home/user/elasticsearch/logs;
1.5 启动
cd /home/user/softwares/elasticsearch/bin;
nohup ./elasticsearch &
1.6 宿主机访问
http://192.168.100.200:9200/
{
"name": "node-1",
"cluster_name": "my-application",
"cluster_uuid": "GFf-TSlmQkuV_aceGLv--A",
"version": {
"number": "8.16.1",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "ffe992aa682c1968b5df375b5095b3a21f122bf3",
"build_date": "2024-11-19T16:00:31.793213192Z",
"build_snapshot": false,
"lucene_version": "9.12.0",
"minimum_wire_compatibility_version": "7.17.0",
"minimum_index_compatibility_version": "7.0.0"
},
"tagline": "You Know, for Search"
}
2 Java连接ElasticSearch环境搭建
2.2 父节点pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sliverbullet</groupId>
<artifactId>jdk21-maven-test</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>21</java.version>
<spring-boot.version>3.3.5</spring-boot.version>
</properties>
<modules>
<module>springboot3-test</module>
<module>rocketmq-test</module>
<module>elasticsearch-test</module>
</modules>
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
2.3 子节点xml
<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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.sliverbullet</groupId>
<artifactId>jdk21-maven-test</artifactId>
<version>1.0</version>
</parent>
<artifactId>elasticsearch-test</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>21</java.version>
<spring-boot.version>3.3.5</spring-boot.version>
<fastjson2-version>2.0.53</fastjson2-version>
<lombok-version>1.18.34</lombok-version>
<elasticsearch-spring-boot-starter-version>3.4.0</elasticsearch-spring-boot-starter-version>
<hutool-version>4.6.8</hutool-version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>${fastjson2-version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>${elasticsearch-spring-boot-starter-version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool-version}</version>
</dependency>
</dependencies>
</project>
3 ElasticSearch基本配置
3.2 application.yml的配置
server:
port: 8003
spring:
application:
name: elasticsearch-test
profiles:
active: dev
machine-no: 1
3.3 application-dev.yml的配置
test,prod,自行配置
spring:
elasticsearch:
uris: http://192.168.100.200:9200
logging:
file:
path: D:/log/SpringBoot3-Test
name: ${logging.file.path}/test.log
4 基本测试
4.1 基本插入
实体类
package com.sliverbullet.bean;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import java.math.BigDecimal;
import java.util.Date;
@Document(indexName = "employee_info")
public class EmployeeInfo {
@Id
private Long id;
/**
* 工号
*/
@Field(name = "job_no")
@JsonProperty("job_no")
private String jobNo;
/**
* 姓名
*/
@Field(name = "name")
private String name;
/**
* 英文名
*/
@Field(name = "english_name")
@JsonProperty("english_name")
private String englishName;
/**
* 工作岗位
*/
private String job;
/**
* 性别
*/
private Integer sex;
/**
* 年龄
*/
private Integer age;
/**
* 薪资
*/
private BigDecimal salary;
/**
* 入职时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS", timezone = "GMT+08:00")
@Field(name = "job_day")
@JsonProperty("job_day")
private Date jobDay;
/**
* 备注
*/
private String remark;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getJobNo() {
return jobNo;
}
public void setJobNo(String jobNo) {
this.jobNo = jobNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEnglishName() {
return englishName;
}
public void setEnglishName(String englishName) {
this.englishName = englishName;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
public Date getJobDay() {
return jobDay;
}
public void setJobDay(Date jobDay) {
this.jobDay = jobDay;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public EmployeeInfo() {
}
public EmployeeInfo(Long id, String jobNo, String name, String englishName, String job, Integer sex, Integer age, BigDecimal salary, Date jobDay, String remark) {
this.id = id;
this.jobNo = jobNo;
this.name = name;
this.englishName = englishName;
this.job = job;
this.sex = sex;
this.age = age;
this.salary = salary;
this.jobDay = jobDay;
this.remark = remark;
}
@Override
public String toString() {
return "EmployeeInfo{" +
"id=" + id +
", jobNo='" + jobNo + '\'' +
", name='" + name + '\'' +
", englishName='" + englishName + '\'' +
", job='" + job + '\'' +
", sex=" + sex +
", age=" + age +
", salary=" + salary +
", jobDay=" + jobDay +
", remark='" + remark + '\'' +
'}';
}
}
实体类实现接口
package com.sliverbullet.repository;
import com.sliverbullet.bean.EmployeeInfo;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface EmployeeInfoRepository extends ElasticsearchRepository<EmployeeInfo, Long> {
}
Controller层
@Resource
private EmployeeInfoRepository elasticRepository;
@RequestMapping("/save")
public String save(@RequestBody EmployeeInfo param) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
LocalDateTime localDateTime = LocalDateTime.now();
String formattedDate = dateTimeFormatter.format(localDateTime);
log.info("【SpringBoot3测试】-【ElasticSearch测试】:{}", formattedDate);
EmployeeInfo employeeInfo = new EmployeeInfo(param.getId(), param.getJobNo(), param.getName(), param.getEnglishName(), param.getJob(), param.getSex(), param.getAge(), param.getSalary(), param.getJobDay(), param.getRemark());
EmployeeInfo result = elasticRepository.save(employeeInfo);
log.info("【ElasticSearch测试】-【插入结果】:{}", JSONObject.toJSONString(result));
return JSONObject.toJSONString(result);
}
测试
/**
* 基本插入
*
* @return void
*/
@Test
public void save() {
String url = "http://127.0.0.1:8003/save";
JSONObject request = new JSONObject();
request.put("id", 6001L);
request.put("job_no", "2001");
request.put("name", "张三");
request.put("english_name", "zhangsan");
request.put("job", "Java");
request.put("sex", 1);
request.put("age", 21);
request.put("salary", new BigDecimal("10000.00"));
request.put("job_day", new Date());
request.put("remark", request.toJSONString());
String resp = HttpUtil.post(url, JSONObject.toJSONString(request));
log.info("基本同步消息请求结果:{}", resp);
}
11:24:04.114 [main] INFO ElasticSearchTest -- 基本同步消息请求结果:{"age":21,"english_name":"ZhangSan","id":6001,"job":"Java","job_day":"2024-12-05 11:24:03.857","job_no":"2001","name":"张三","remark":"remark","salary":10000.00,"sex":1}
2024-12-05T11:24:03.998+08:00 INFO 31564 --- [elasticsearch-test] [nio-8003-exec-7] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 11:24:03.998820800
2024-12-05T11:24:04.093+08:00 INFO 31564 --- [elasticsearch-test] [nio-8003-exec-7] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【插入结果】:{"age":21,"english_name":"ZhangSan","id":6001,"job":"Java","job_day":"2024-12-05 11:24:03.857","job_no":"2001","name":"张三","remark":"remark","salary":10000.00,"sex":1}
4.2 ID查询
Controller层
@Resource
private EmployeeInfoRepository elasticRepository;
@RequestMapping("/find")
public String find(@RequestBody EmployeeInfo param) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
LocalDateTime localDateTime = LocalDateTime.now();
String formattedDate = dateTimeFormatter.format(localDateTime);
log.info("【SpringBoot3测试】-【ElasticSearch测试】:{}", formattedDate);
Optional<EmployeeInfo> employeeInfo = elasticRepository.findById(param.getId());
log.info("【ElasticSearch测试】-【单条查询结果】:{}", JSONObject.toJSONString(employeeInfo));
return JSONObject.toJSONString(employeeInfo);
}
测试
/**
* 基本查询
*
* @return void
*/
@Test
public void find() {
String url = "http://127.0.0.1:8003/find";
JSONObject request = new JSONObject();
request.put("id", 6001L);
String resp = HttpUtil.post(url, JSONObject.toJSONString(request));
log.info("基本同步查询请求结果:{}", resp);
}
11:25:09.248 [main] INFO ElasticSearchTest -- 基本同步查询请求结果:{"age":21,"english_name":"ZhangSan","id":6001,"job":"Java","job_day":"2024-12-05 11:24:03.857","job_no":"2001","name":"张三","remark":"remark","salary":10000.0,"sex":1}
2024-12-05T11:25:09.223+08:00 INFO 31564 --- [elasticsearch-test] [nio-8003-exec-5] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 11:25:09.223267400
2024-12-05T11:25:09.234+08:00 INFO 31564 --- [elasticsearch-test] [nio-8003-exec-5] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【单条查询结果】:{"age":21,"english_name":"ZhangSan","id":6001,"job":"Java","job_day":"2024-12-05 11:24:03.857","job_no":"2001","name":"张三","remark":"remark","salary":10000.0,"sex":1}
4.3 ID修改
其实修改和插入是一个接口
测试
/**
* 基本插入
*
* @return void
*/
@Test
public void save() {
String url = "http://127.0.0.1:8003/save";
JSONObject request = new JSONObject();
request.put("id", 6001L);
request.put("job_no", "2001");
request.put("name", "李四");
request.put("english_name", "LiSi");
request.put("job", "Java");
request.put("sex", 1);
request.put("age", 21);
request.put("salary", new BigDecimal("12000.00"));
request.put("job_day", new Date());
request.put("remark", "remark");
String resp = HttpUtil.post(url, JSONObject.toJSONString(request));
log.info("基本同步消息请求结果:{}", resp);
}
11:46:45.086 [main] INFO ElasticSearchTest -- 基本同步消息请求结果:{"age":21,"english_name":"LiSi","id":6001,"job":"Java","job_day":"2024-12-05 11:46:44.908","job_no":"2001","name":"李四","remark":"remark","salary":12000.00,"sex":1}
2024-12-05T11:46:45.039+08:00 INFO 31564 --- [elasticsearch-test] [nio-8003-exec-9] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 11:46:45.039450500
2024-12-05T11:46:45.073+08:00 INFO 31564 --- [elasticsearch-test] [nio-8003-exec-9] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【插入结果】:{"age":21,"english_name":"LiSi","id":6001,"job":"Java","job_day":"2024-12-05 11:46:44.908","job_no":"2001","name":"李四","remark":"remark","salary":12000.00,"sex":1}
查询
11:47:47.040 [main] INFO ElasticSearchTest -- 基本同步查询请求结果:{"age":21,"english_name":"LiSi","id":6001,"job":"Java","job_day":"2024-12-05 11:46:44.908","job_no":"2001","name":"李四","remark":"remark","salary":12000.0,"sex":1}
2024-12-05T11:47:47.022+08:00 INFO 31564 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 11:47:47.022578700
2024-12-05T11:47:47.027+08:00 INFO 31564 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【单条查询结果】:{"age":21,"english_name":"LiSi","id":6001,"job":"Java","job_day":"2024-12-05 11:46:44.908","job_no":"2001","name":"李四","remark":"remark","salary":12000.0,"sex":1}
4.4 ID删除
Controller层
@Resource
private EmployeeInfoRepository elasticRepository;
@RequestMapping("/delete")
public String delete(@RequestBody EmployeeInfo param) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
LocalDateTime localDateTime = LocalDateTime.now();
String formattedDate = dateTimeFormatter.format(localDateTime);
log.info("【SpringBoot3测试】-【ElasticSearch测试】:{}", formattedDate);
elasticRepository.deleteById(param.getId());
JSONObject result = new JSONObject();
result.put("msg", "success");
log.info("【ElasticSearch测试】-【单条删除结果】:{}", result.toJSONString());
return result.toJSONString();
}
测试
/**
* 基本删除
*
* @return void
*/
@Test
public void delete() {
String url = "http://127.0.0.1:8003/delete";
JSONObject request = new JSONObject();
request.put("id", 6001L);
String resp = HttpUtil.post(url, JSONObject.toJSONString(request));
log.info("基本删除请求结果:{}", resp);
}
11:53:49.456 [main] INFO ElasticSearchTest -- 基本删除请求结果:{"msg":"success"}
2024-12-05T11:53:49.206+08:00 INFO 49360 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 11:53:49.206563800
2024-12-05T11:53:49.438+08:00 INFO 49360 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【单条删除结果】:{"msg":"success"}
查询
11:54:56.173 [main] INFO ElasticSearchTest -- 基本同步查询请求结果:null
2024-12-05T11:54:56.139+08:00 INFO 49360 --- [elasticsearch-test] [nio-8003-exec-3] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 11:54:56.139854100
2024-12-05T11:54:56.160+08:00 INFO 49360 --- [elasticsearch-test] [nio-8003-exec-3] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【单条查询结果】:null
4.5 批量插入
Controller层
@Resource
private EmployeeInfoRepository elasticRepository;
@RequestMapping("/saveBatch")
public String saveBatch(@RequestBody List<EmployeeInfo> param) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
LocalDateTime localDateTime = LocalDateTime.now();
String formattedDate = dateTimeFormatter.format(localDateTime);
log.info("【SpringBoot3测试】-【ElasticSearch测试】:{}", formattedDate);
Iterable<EmployeeInfo> result = elasticRepository.saveAll(param);
log.info("【ElasticSearch测试】-【批量插入结果】:{}", JSONObject.toJSONString(result));
return JSONObject.toJSONString(result);
}
测试
/**
* 批量插入
*
* @return void
*/
@Test
public void saveBatch() {
String url = "http://127.0.0.1:8003/saveBatch";
List<JSONObject> list = new ArrayList<>();
JSONObject request = new JSONObject();
request.put("id", 6002L);
request.put("job_no", "2001");
request.put("name", "刘二");
request.put("english_name", "LiuEr");
request.put("job", "Java");
request.put("sex", 1);
request.put("age", 21);
request.put("salary", new BigDecimal("12000.00"));
request.put("job_day", new Date());
request.put("remark", "remark");
list.add(request);
request = new JSONObject();
request.put("id", 6003L);
request.put("job_no", "2002");
request.put("name", "王五");
request.put("english_name", "WangWu");
request.put("job", "Python");
request.put("sex", 2);
request.put("age", 25);
request.put("salary", new BigDecimal("11000.00"));
request.put("job_day", new Date());
request.put("remark", "remark");
list.add(request);
String resp = HttpUtil.post(url, JSONObject.toJSONString(list));
log.info("批量插入请求结果:{}", resp);
}
14:32:22.660 [main] INFO ElasticSearchTest -- 批量插入请求结果:[{"age":21,"english_name":"LiuEr","id":6002,"job":"Java","job_day":"2024-12-05 14:32:10.014","job_no":"2001","name":"刘二","remark":"remark","salary":12000.00,"sex":1},{"age":25,"english_name":"WangWu","id":6003,"job":"Python","job_day":"2024-12-05 14:32:10.014","job_no":"2002","name":"王五","remark":"remark","salary":11000.00,"sex":2}]
2024-12-05T14:32:22.440+08:00 INFO 50596 --- [elasticsearch-test] [nio-8003-exec-4] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 14:32:22.440133900
2024-12-05T14:32:22.643+08:00 INFO 50596 --- [elasticsearch-test] [nio-8003-exec-4] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【批量插入结果】:[{"age":21,"english_name":"LiuEr","id":6002,"job":"Java","job_day":"2024-12-05 14:32:10.014","job_no":"2001","name":"刘二","remark":"remark","salary":12000.00,"sex":1},{"age":25,"english_name":"WangWu","id":6003,"job":"Python","job_day":"2024-12-05 14:32:10.014","job_no":"2002","name":"王五","remark":"remark","salary":11000.00,"sex":2}]
4.6 全量查询
Controller层
@Resource
private EmployeeInfoRepository elasticRepository;
@RequestMapping("/findAll")
public String findAll(@RequestBody EmployeeInfo param) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
LocalDateTime localDateTime = LocalDateTime.now();
String formattedDate = dateTimeFormatter.format(localDateTime);
log.info("【SpringBoot3测试】-【ElasticSearch测试】:{}", formattedDate);
Iterable<EmployeeInfo> result = elasticRepository.findAll();
log.info("【ElasticSearch测试】-【全量查询结果】:{}", JSONObject.toJSONString(result));
return JSONObject.toJSONString(result);
}
测试
/**
* 全量查询
*
* @return void
*/
@Test
public void findAll() {
String url = "http://127.0.0.1:8003/findAll";
JSONObject request = new JSONObject();
String resp = HttpUtil.post(url, JSONObject.toJSONString(request));
log.info("全量查询请求结果:{}", resp);
}
14:43:12.007 [main] INFO ElasticSearchTest -- 全量查询请求结果:{"content":[{"age":21,"english_name":"LiuEr","id":6002,"job":"Java","job_day":"2024-12-05 14:32:10.014","job_no":"2001","name":"刘二","remark":"remark","salary":12000.0,"sex":1},{"age":25,"english_name":"WangWu","id":6003,"job":"Python","job_day":"2024-12-05 14:32:10.014","job_no":"2002","name":"王五","remark":"remark","salary":11000.0,"sex":2}],"empty":false,"first":true,"last":true,"number":0,"numberOfElements":2,"pageable":{"offset":0,"pageNumber":0,"pageSize":2,"paged":true,"sort":{"empty":true,"sorted":false,"unsorted":true},"unpaged":false},"size":2,"sort":{"empty":true,"sorted":false,"unsorted":true},"totalElements":2,"totalPages":1}
2024-12-05T14:43:11.418+08:00 INFO 16640 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 14:43:11.418807900
2024-12-05T14:43:11.989+08:00 INFO 16640 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【全量查询结果】:{"content":[{"age":21,"english_name":"LiuEr","id":6002,"job":"Java","job_day":"2024-12-05 14:32:10.014","job_no":"2001","name":"刘二","remark":"remark","salary":12000.0,"sex":1},{"age":25,"english_name":"WangWu","id":6003,"job":"Python","job_day":"2024-12-05 14:32:10.014","job_no":"2002","name":"王五","remark":"remark","salary":11000.0,"sex":2}],"empty":false,"first":true,"last":true,"number":0,"numberOfElements":2,"pageable":{"offset":0,"pageNumber":0,"pageSize":2,"paged":true,"sort":{"empty":true,"sorted":false,"unsorted":true},"unpaged":false},"size":2,"sort":{"empty":true,"sorted":false,"unsorted":true},"totalElements":2,"totalPages":1}
4.6 分页排序查询
也有单独的按Sort查全部
Controller层
@Resource
private EmployeeInfoRepository elasticRepository;
@RequestMapping("/findAllWithPage")
public String findAllWithPage(@RequestBody JSONObject param) {
Pageable page = PageRequest.of(param.getIntValue("pageNum"), param.getIntValue("pageSize"), Sort.by(param.getString("sort")).ascending());
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
LocalDateTime localDateTime = LocalDateTime.now();
String formattedDate = dateTimeFormatter.format(localDateTime);
log.info("【SpringBoot3测试】-【ElasticSearch测试】:{}", formattedDate);
Iterable<EmployeeInfo> result = elasticRepository.findAll(page);
log.info("【ElasticSearch测试】-【ascending查询结果】:{}", JSONObject.toJSONString(result));
page = PageRequest.of(param.getIntValue("pageNum"), param.getIntValue("pageSize"), Sort.by(param.getString("sort")).descending());
result = elasticRepository.findAll(page);
log.info("【ElasticSearch测试】-【descending查询结果】:{}", JSONObject.toJSONString(result));
return JSONObject.toJSONString(result);
}
测试
/**
* 分页排序查询
*
* @return void
*/
@Test
public void findAllWithPage() {
String url = "http://127.0.0.1:8003/findAllWithPage";
JSONObject request = new JSONObject();
request.put("pageNum", 1);
request.put("pageSize", 1);
request.put("sort", "age");
String resp = HttpUtil.post(url, JSONObject.toJSONString(request));
log.info("分页查询请求结果:{}", resp);
}
15:17:17.235 [main] INFO ElasticSearchTest -- 分页查询请求结果:{"content":[{"age":21,"english_name":"LiuEr","id":6002,"job":"Java","job_day":"2024-12-05 14:32:10.014","job_no":"2001","name":"刘二","remark":"remark","salary":12000.0,"sex":1}],"empty":false,"first":false,"last":true,"number":1,"numberOfElements":1,"pageable":{"offset":1,"pageNumber":1,"pageSize":1,"paged":true,"sort":{"empty":false,"sorted":true,"unsorted":false},"unpaged":false},"size":1,"sort":{"empty":false,"sorted":true,"unsorted":false},"totalElements":2,"totalPages":2}
2024-12-05T15:17:17.023+08:00 INFO 48044 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 15:17:17.023856800
2024-12-05T15:17:17.206+08:00 INFO 48044 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【ascending查询结果】:{"content":[{"age":25,"english_name":"WangWu","id":6003,"job":"Python","job_day":"2024-12-05 14:32:10.014","job_no":"2002","name":"王五","remark":"remark","salary":11000.0,"sex":2}],"empty":false,"first":false,"last":true,"number":1,"numberOfElements":1,"pageable":{"offset":1,"pageNumber":1,"pageSize":1,"paged":true,"sort":{"empty":false,"sorted":true,"unsorted":false},"unpaged":false},"size":1,"sort":{"empty":false,"sorted":true,"unsorted":false},"totalElements":2,"totalPages":2}
2024-12-05T15:17:17.217+08:00 INFO 48044 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【descending查询结果】:{"content":[{"age":21,"english_name":"LiuEr","id":6002,"job":"Java","job_day":"2024-12-05 14:32:10.014","job_no":"2001","name":"刘二","remark":"remark","salary":12000.0,"sex":1}],"empty":false,"first":false,"last":true,"number":1,"numberOfElements":1,"pageable":{"offset":1,"pageNumber":1,"pageSize":1,"paged":true,"sort":{"empty":false,"sorted":true,"unsorted":false},"unpaged":false},"size":1,"sort":{"empty":false,"sorted":true,"unsorted":false},"totalElements":2,"totalPages":2}
4.7 根据多个ID全量查询
Controller层
@Resource
private EmployeeInfoRepository elasticRepository;
@RequestMapping("/findAllById")
public String findAllById(@RequestBody List<Long> param) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
LocalDateTime localDateTime = LocalDateTime.now();
String formattedDate = dateTimeFormatter.format(localDateTime);
log.info("【SpringBoot3测试】-【ElasticSearch测试】:{}", formattedDate);
Iterable<EmployeeInfo> result = elasticRepository.findAllById(param);
log.info("【ElasticSearch测试】-【findAllById查询结果】:{}", JSONObject.toJSONString(result));
return JSONObject.toJSONString(result);
}
测试
/**
* 根据多个Id全量查询
*
* @return void
*/
@Test
public void findAllById() {
String url = "http://127.0.0.1:8003/findAllById";
List<Long> longList = new ArrayList<>();
longList.add(6002L);
longList.add(6003L);
String resp = HttpUtil.post(url, JSONObject.toJSONString(longList));
log.info("根据多个Id全量查询:{}", resp);
}
15:28:08.755 [main] INFO ElasticSearchTest -- 根据多个Id全量查询:[{"age":21,"english_name":"LiuEr","id":6002,"job":"Java","job_day":"2024-12-05 14:32:10.014","job_no":"2001","name":"刘二","remark":"remark","salary":12000.0,"sex":1},{"age":25,"english_name":"WangWu","id":6003,"job":"Python","job_day":"2024-12-05 14:32:10.014","job_no":"2002","name":"王五","remark":"remark","salary":11000.0,"sex":2}]
2024-12-05T15:28:01.193+08:00 INFO 30624 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 15:28:01.193874800
2024-12-05T15:28:01.406+08:00 INFO 30624 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【findAllById查询结果】:[{"age":21,"english_name":"LiuEr","id":6002,"job":"Java","job_day":"2024-12-05 14:32:10.014","job_no":"2001","name":"刘二","remark":"remark","salary":12000.0,"sex":1},{"age":25,"english_name":"WangWu","id":6003,"job":"Python","job_day":"2024-12-05 14:32:10.014","job_no":"2002","name":"王五","remark":"remark","salary":11000.0,"sex":2}]
4.8 根据多个ID全量查询以及清空数据
Controller层
@Resource
private EmployeeInfoRepository elasticRepository;
@RequestMapping("/deleteAll")
public String deleteAll(@RequestBody List<Long> param) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
LocalDateTime localDateTime = LocalDateTime.now();
String formattedDate = dateTimeFormatter.format(localDateTime);
log.info("【SpringBoot3测试】-【ElasticSearch测试】:{}", formattedDate);
elasticRepository.deleteAllById(param);
elasticRepository.deleteAll();
JSONObject result = new JSONObject();
result.put("msg", "success");
log.info("【ElasticSearch测试】-【全部删除结果】:{}", result.toJSONString());
return JSONObject.toJSONString(result);
}
deleteAllById,根据多个ID删除,deleteAll,直接清空全部数据
测试
/**
* 根据多个Id删除
*
* @return void
*/
@Test
public void deleteAll() {
String url = "http://127.0.0.1:8003/deleteAll";
List<Long> longList = new ArrayList<>();
longList.add(6002L);
longList.add(6003L);
String resp = HttpUtil.post(url, JSONObject.toJSONString(longList));
log.info("根据多个Id全量查询:{}", resp);
}
16:02:47.398 [main] INFO ElasticSearchTest -- 根据多个Id全量查询:{"msg":"success"}
2024-12-05T16:02:47.199+08:00 INFO 50652 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 16:02:47.199050000
2024-12-05T16:02:47.367+08:00 INFO 50652 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【全部删除结果】:{"msg":"success"}
16:16:41.993 [main] INFO ElasticSearchTest -- 全量查询请求结果:{"content":[],"pageable":"INSTANCE","last":true,"totalPages":1,"totalElements":0,"size":0,"number":0,"sort":{"empty":true,"sorted":false,"unsorted":true},"numberOfElements":0,"first":true,"empty":true}
4.9 获取数量,某个ID是否存在
Controller层
@Resource
private EmployeeInfoRepository elasticRepository;
@RequestMapping("/other")
public String other(@RequestBody EmployeeInfo param) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS");
LocalDateTime localDateTime = LocalDateTime.now();
String formattedDate = dateTimeFormatter.format(localDateTime);
log.info("【SpringBoot3测试】-【ElasticSearch测试】:{}", formattedDate);
JSONObject result = new JSONObject();
result.put("count", elasticRepository.count());
result.put("exist", elasticRepository.existsById(param.getId()));
log.info("【ElasticSearch测试】-【other结果】:{}", result.toJSONString());
return JSONObject.toJSONString(result);
}
重新插入,然后测试
测试
/**
* 其他
*
* @return void
*/
@Test
public void other() {
String url = "http://127.0.0.1:8003/other";
JSONObject request = new JSONObject();
request.put("id", 6002L);
String resp = HttpUtil.post(url, JSONObject.toJSONString(request));
log.info("其他:{}", resp);
}
16:25:38.079 [main] INFO ElasticSearchTest -- 其他:{"count":2,"exist":true}
2024-12-05T16:25:20.747+08:00 INFO 20068 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 16:25:20.747816800
2024-12-05T16:25:20.915+08:00 INFO 20068 --- [elasticsearch-test] [nio-8003-exec-1] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【批量插入结果】:[{"age":21,"english_name":"LiuEr","id":6002,"job":"Java","job_day":"2024-12-05 16:25:20.567","job_no":"2001","name":"刘二","remark":"remark","salary":12000.00,"sex":1},{"age":25,"english_name":"WangWu","id":6003,"job":"Python","job_day":"2024-12-05 16:25:20.567","job_no":"2002","name":"王五","remark":"remark","salary":11000.00,"sex":2}]
2024-12-05T16:25:37.994+08:00 INFO 20068 --- [elasticsearch-test] [nio-8003-exec-3] c.s.controller.ElasticSearchController : 【SpringBoot3测试】-【ElasticSearch测试】:2024-12-05 16:25:37.994253400
2024-12-05T16:25:38.066+08:00 INFO 20068 --- [elasticsearch-test] [nio-8003-exec-3] c.s.controller.ElasticSearchController : 【ElasticSearch测试】-【other结果】:{"count":2,"exist":true}