ElasticSearch学习记录
服务器操作系统版本:Ubuntu 24.04
Java版本:21
Spring Boot版本:3.3.5
如果打算用GUI,虚拟机安装Ubuntu 24.04,见
虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客文章浏览阅读6.6k次,点赞37次,收藏100次。虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04https://blog.csdn.net/weixin_42173947/article/details/140335522
如果打算用纯命令行,见
虚拟机安装Ubuntu 24.04服务器版(命令行版)_ubuntu24.04 download-CSDN博客文章浏览阅读1k次,点赞19次,收藏13次。这个是专门用于服务器使用的,没有GUI,常用软件安装,见虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客这里只记录独特的安装步骤。_ubuntu24.04 downloadhttps://blog.csdn.net/weixin_42173947/article/details/143747375
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-testprofiles: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-Testname: ${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 {@Idprivate 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;}@Overridepublic 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层
@Resourceprivate 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*/@Testpublic 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层
@Resourceprivate 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*/@Testpublic 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*/@Testpublic 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层
@Resourceprivate 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*/@Testpublic 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层
@Resourceprivate 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*/@Testpublic 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层
@Resourceprivate 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*/@Testpublic 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层
@Resourceprivate 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*/@Testpublic 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层
@Resourceprivate 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*/@Testpublic 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层
@Resourceprivate 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*/@Testpublic 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层
@Resourceprivate 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*/@Testpublic 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}
相关文章:

ElasticSearch学习记录
服务器操作系统版本:Ubuntu 24.04 Java版本:21 Spring Boot版本:3.3.5 如果打算用GUI,虚拟机安装Ubuntu 24.04,见 虚拟机安装Ubuntu 24.04及其常用软件(2024.7)_ubuntu24.04-CSDN博客文章浏览阅读6.6k次࿰…...

LabVIEW算法执行时间评估与Windows硬件支持
在设计和实现复杂系统时,准确估算算法的执行时间是关键步骤,尤其在实时性要求较高的应用中。这一评估有助于确定是否需要依赖硬件加速来满足性能需求。首先需要对算法进行时间复杂度分析并进行实验测试,了解其在Windows系统中的运行表现。根据…...

经验帖 | Matlab安装成功后打不开的解决方法
最近在安装Matlab2023时遇到了一个问题: 按照网上的安装教程成功安装 在打开软件时 界面闪一下就消失 无法打开 但是 任务管理器显示matlab在运行中 解决方法如下: matlab快捷方式–>右键打开属性–>目标 填写许可证文件路径 D:\MATLAB\MatlabR20…...

Ubuntu Linux 文件、目录权限问题
本文为Ubuntu Linux操作系统- 第五弹 此文是在上期文件目录的内容操作基础上接着讲权限问题 上期回顾:Ubuntu Linux 目录和文件的内容操作 文件访问者身份与文件访问权限 Linux文件结构 所有者(属主)所属组(属组)其他…...

LabVIEW密码保护与反编译的安全性分析
在LabVIEW中,密码保护是一种常见的源代码保护手段,但其安全性并不高,尤其是在面对专业反编译工具时。理论上,所有软件的反编译都是可能的,尽管反编译不一定恢复完全的源代码,但足以提取程序的核心功能和算法…...

yolo11经验教训----之一
一、格式转换 可以把python中的.pt文件,导出为libtorch识别的格式: model YOLO("yolo11n.pt") model.export(format"torchscript") 二、查看结构 在c中,我用qt,这样做的: #include "…...

异步处理优化:多线程线程池与消息队列的选择与应用
目录 一、异步处理方式引入 (一)异步业务识别 (二)明确异步处理方式 二、多线程线程池(Thread Pool) (一)工作原理 (二)直面优缺点和适用场景 1.需要快…...

Hadoop生态圈框架部署 伪集群版(一)- Linux操作系统安装及配置
文章目录 前言一、下载CentOS镜像1. 下载 二、创建虚拟机hadoop三、CentOS安装与配置1. 安装CentOS2. 配置虚拟网络及虚拟网卡2.1 配置虚拟网络2.2 配置虚拟网卡 3. 安装 SSH 远程连接工具 FinalShell3.1 简介3.2 下载和安装3.2.1 下载3.2.2 安装 3.3 查看动态ip地址3.4 使用Fi…...

Go的Gin比java的Springboot更加的开箱即用?
前言 隔壁组的云计算零零后女同事,后文简称 云女士 ,非说 Go 的 Gin 框架比 Springboot 更加的开箱即用,我心想在 Java 里面 Springboot 已经打遍天下无敌手,这份底蕴岂是 Gin 能比。 但是云女士突出一个执拗,非我要…...

pickle常见Error解决
1. pickle OverflowError: cannot serialize a bytes object larger than 4 GiB 进行pickle.dump时出现上述错误,可以加上“protocol4”参数。依据:https://docs.python.org/3/library/pickle.html#data-stream-format 2. pickle EOFError: Ran out of…...

认识Java数据类型和变量
数据类型分类 基本数据类型(8个): 整数型 byte 8位 short 16位 int 32位 long 64位 默认整数类型是int类型 小数型/浮点型 float【单精度32位】 double【双进度64位】 字符型 char 16位 只能表示单个字符 布尔型 boolean 1位 只能有两个值 true 【真】 false 【…...

Qt开发技巧(二十四)滚动部件的滑动问题,Qt设置时区问题,自定义窗体样式不生效问题,编码格式问题,给按钮左边加个图,最小化后的卡死假象
继续记录一些Qt开发中的技巧操作: 1.滚动部件的滑动问题 再Linux嵌入式设备上,有时候一个页面的子部件太多,一屏放不下是需要做页面滑动,可以使用“QScrollArea”控件,拖来一个“QScrollArea”控件,将子部件…...

SHELL----正则表达式
一、文本搜索工具——grep grep -参数 条件 文件名 其中参数有以下: -i 忽略大小写 -c 统计匹配的行数 -v 取反,不显示匹配的行 -w 匹配单词 -E 等价于 egrep ,即启用扩展正则表达式 -n 显示行号 -rl 将指定目录内的文件打…...

44.5.【C语言】辨析“数组指针”和“指针数组”
目录 1.数组指针 2.指针数组 执行结果 底层分析 1.数组指针 从语文的角度理解,"数组"修饰"指针".因此数组指针是指针 例如以下代码 #include <stdio.h> int main() {char a[5] { "ABCDE" };return 0;} 其中a就是数组指针,因为数…...

node.js基础学习-express框架-路由及中间件(十)
一、前言 Express 是一个简洁、灵活的 Node.js Web 应用框架。它基于 Node.js 的内置 HTTP 模块构建,提供了一系列用于构建 Web 应用程序和 API 的功能,使开发者能够更高效地处理 HTTP 请求和响应,专注于业务逻辑的实现。 其特点包括简单易用…...

使用MSYS搭建linux开发环境踩坑笔记
前言: 使用linux系统或虚拟机进行嵌入式linux开发是常规方法; 使用MSYS是用于尝鲜和研究。 由于windows和linux的差异,使用MSYS代替Linux虚拟机会遇到很多坑。 主要原因在于: 1. windows和linux文件系统的差异:win不…...

vue3+ts+vite+ElementPlus上传进度条实时更新(UPLoad和progress)。
需求: 上传文件时,展示进度条实时更新: 下面是代码片段: <!-- 添加媒体弹窗 -- 上传 --><el-dialog v-model"centerDialogVisible" title"媒体信息" width"700" :close-on-click-modal"false&qu…...

AspNet WebAPI 模型绑定问题
继承System.Web.Http.ApiController的Action的Model如果被[Serializable]定义,会导致Model的字段无法绑定。 Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll [Serializable] public class Model {public string id { get; set; } }public MyA…...

Android 图形系统之七:SurfaceFlinger
一. 引言 什么是 SurfaceFlinger?SurfaceFlinger 的核心作用和地位?为什么需要了解 SurfaceFlinger? 二. SurfaceFlinger 的基本概念 Surface 和 SurfaceFlinger 的关系SurfaceFlinger 与图形渲染(OpenGL ES 和 Vulkan…...

14、鸿蒙学习——管理通知角标
针对未读的通知,系统提供了角标设置接口,将未读通知个数显示在桌面图标的右上角角标上。 通知增加时,角标上显示的未读通知个数需要增加。 通知被查看后,角标上显示的未读通知个数需要减少,没有未读通知时࿰…...

TongRDS分布式内存数据缓存中间件
命令 优势 支持高达10亿级的数据缓冲,内存优化管理,避免GC性能劣化。 高并发系统设计,可充分利用多CPU资源实现并行处理。 数据采用key-value多索引方式存储,字段类型和长度可配置。 支持多台服务并行运行,服务之间可互…...

[在线实验]-RabbitMQ镜像的下载与部署
镜像下载 docker的rabbitmq镜像资源-CSDN文库 加载镜像 docker load --input rabbitmq.tar 给镜像打标签 这里发现镜像名为none,需要给镜像重命名下 docker tag [镜像id] [新镜像名称]:[新镜像标签] docker tag ebaf409ffbe2 rabbitmq:management 运行镜像…...

Linux 系统文件描述符(File Descriptor)小白级介绍
1. 概述 Linux 遵循"一切皆文件"的理念。在 Linux 系统中,文件描述符是一个索引值(非负整数),指向内核为每个进程所维护的该进程打开文件的记录表。 如上所述,每个进程都维护着一张文件描述符表。 文件描述…...

【Verilog】实验二 数据选择器的设计与vivado集成开发环境
目录 一、实验目的 二、实验环境 三、实验任务 四、实验原理 五、实验步骤 top.v mux2_1.v 一、实验目的 1. 掌握数据选择器的工作原理和逻辑功能。 2. 熟悉vivado集成开发环境。 3. 熟悉vivado中进行开发设计的流程。 二、实验环境 1. 装有vivado的计算机。 2. Sw…...

IDL学习笔记(三)OMI数据处理。hdf5文件读取,图像反转,GeoTiff区别,月季年均值计算提取输出,单位转换,运行时间计算
modis Level 2 grid 数据是全球格网化数据。一天的数据全在其中。 modis Level 1 和 2 数据是一景一景的影像。 IDL学习笔记(三)OMI数据处理 hdf5文件读取单位转换,输出hdf5数据集的图像,并检查图像经纬度是否正确,若错…...

深入浅出:PHP中的数据类型全解析
文章目录 引言理解数据类型标量类型整数 (integer)浮点数 (float)布尔值 (boolean)字符串 (string) 复合类型数组 (array)对象 (object)资源 (resource)NULL 特殊类型Callable强制类型转换 实战案例总结与展望参考资料 引言 在编程的世界里,数据类型是构建任何应用…...

要使用 OpenResty 创建一个接口,返回客户端的 IP 地址,并以 JSON 格式输出
要使用 OpenResty 创建一个接口,返回客户端的 IP 地址,并以 JSON 格式输出 要使用 OpenResty 创建一个接口,返回客户端的 IP 地址,并以 JSON 格式输出方案一解决方案(openresty使用cjson)说明:使…...

智慧油客:从初识、再识OceanBase,到全栈上线
今天,我们邀请了智慧油客的研发总监黄普友,为我们讲述智慧油客与 OceanBase 初识、熟悉和结缘的故事。 智慧油客自2016年诞生以来,秉持新零售的思维,成功从过去二十年间以“以销售产品为中心”的传统思维模式,转向“以…...

ClickHouse守护进程
背景描述 维护CK过程中,有时候会有CK OOM,并且CK自己没有自动拉起的情况出现;那么这个时候就需要守护进程,最初我不说了Supervisor来做守护进程,但是当我手动kill的时候发现并没有自动拉起。 解决方案 于是乎自己写…...

智能合约
06-智能合约 0 啥是智能合约? 定义 智能合约,又称加密合约,在一定条件下可直接控制数字货币或资产在各方之间转移的一种计算机程序。 角色 区块链网络可视为一个分布式存储服务,因为它存储了所有交易和智能合约的状态 智能合约还…...