ElasticSearch7.8快速入门
文章目录
- 1.基本概念
- 1.数据格式
- 2.倒排索引
- 2.HTTP使用
- 1.创建索引(相当于创建数据库)
- 2.索引-查询 & 删除
- 1.查询索引
- 2.查询所有索引
- 3.删除索引
- 3.创建文档
- 1.创建文档(不指定id)
- 2.创建文档(指定id)
- 4.文档-查询 & 查询全部
- 1.根据id查询文档
- 2.查询索引下的所有文档
- 5.文档-修改 & 删除
- 1.全量修改
- 2.局部修改
- 3.删除文档
- 6.ES高级查询
- 1.条件查询
- 2.条件查询(请求体方式)
- 3.分页查询(查询第二页的数据)
- 4.分页查询只显示指定字段数据
- 5.分页查询对查询出的结果进行排序
- 6.多条件查询
- 1.must(相当于and)
- 2.should(相当于or)
- 3.范围查询价格大于3999
- 7.完全匹配(match是使用的分词加倒排索引相当于模糊查询)
- 8.高亮
- 9.分组统计
- 10.求所有价格的平均值
- 11.映射关系
- 1.创建索引 user
- 2.给索引创建映射关系
- 3.Java API
- 1.环境搭建
- 1.创建项目
- 2.引入依赖
- 3.测试连接
- 4.封装ES连接工具类
- 2.索引操作
- 1.创建索引
- 1.代码
- 2.结果
- 2.查询索引
- 3.删除索引
- 3.文档操作
- 1.添加文档
- 1.实体类
- 2.代码
- 2.修改文档
- 1.代码
- 2.结果
- 3.查询文档
- 4.删除文档
- 5.批量新增
- 6.批量删除
- 4.高级查询
- 1.全量查询
- 2.分页查询
- 3.排序查询
- 4.过滤字段
- 5.组合查询
- 6.高亮查询
- 7.聚合查询
1.基本概念
1.数据格式


2.倒排索引

2.HTTP使用
1.创建索引(相当于创建数据库)

2.索引-查询 & 删除
1.查询索引

2.查询所有索引

3.删除索引

3.创建文档
1.创建文档(不指定id)

2.创建文档(指定id)

4.文档-查询 & 查询全部
1.根据id查询文档

2.查询索引下的所有文档

5.文档-修改 & 删除
1.全量修改

2.局部修改

3.删除文档

6.ES高级查询
1.条件查询

2.条件查询(请求体方式)

3.分页查询(查询第二页的数据)

4.分页查询只显示指定字段数据

5.分页查询对查询出的结果进行排序

6.多条件查询
1.must(相当于and)

2.should(相当于or)

3.范围查询价格大于3999

7.完全匹配(match是使用的分词加倒排索引相当于模糊查询)

8.高亮

9.分组统计

10.求所有价格的平均值

11.映射关系
1.创建索引 user

2.给索引创建映射关系


3.Java API
1.环境搭建
1.创建项目

2.引入依赖
<?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.sunxiansheng</groupId><artifactId>es-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.8.0</version></dependency><!-- es客户端 --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.8.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.9</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version></dependency></dependencies>
</project>
3.测试连接
package com.sunxiansheng.es;import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;/*** Description: ES测试** @Author sun* @Create 2024/12/5 19:22* @Version 1.0*/
public class ESTest {public static void main(String[] args) {// 连接esRestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("152.136.40.209", 9200, "http")));// 关闭try {client.close();} catch (Exception e) {e.printStackTrace();}}
}
4.封装ES连接工具类
package com.sunxiansheng.es;import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;import java.util.function.Consumer;/*** Description: ES的连接操作工具类** @Author sun* @Create 2024/12/5 19:37* @Version 1.0*/
public class EsUtil {public static void es(Consumer<RestHighLevelClient> consumer) {// 连接esRestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("152.136.40.209", 9200, "http")));consumer.accept(client);// 关闭try {client.close();} catch (Exception e) {e.printStackTrace();}}
}
2.索引操作
1.创建索引
1.代码
package com.sunxiansheng.es;import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;import java.io.IOException;/*** Description: 索引操作** @Author sun* @Create 2024/12/5 19:37* @Version 1.0*/
public class Index {public static void main(String[] args) {EsUtil.es((esClient) -> {// 创建索引CreateIndexRequest request = new CreateIndexRequest("user");// 获取响应结果try {CreateIndexResponse createIndexResponse = esClient.indices().create(request, RequestOptions.DEFAULT);if (createIndexResponse.isAcknowledged()) {System.out.println("创建索引成功");} else {System.out.println("创建索引失败");}} catch (IOException e) {throw new RuntimeException(e);}});}
}
2.结果

2.查询索引
/*** 查询索引*/@Testpublic void getIndex() {EsUtil.es((esClient) -> {// 查询索引GetIndexRequest request = new GetIndexRequest("user");try {GetIndexResponse getIndexResponse = esClient.indices().get(request, RequestOptions.DEFAULT);System.out.println(getIndexResponse.getAliases());System.out.println(getIndexResponse.getMappings());System.out.println(getIndexResponse.getSettings());} catch (IOException e) {throw new RuntimeException(e);}});}
3.删除索引
/*** 删除索引*/@Testpublic void deleteIndex() {EsUtil.es((esClient) -> {// 删除索引try {AcknowledgedResponse acknowledgedResponse = esClient.indices().delete(new DeleteIndexRequest("user"), RequestOptions.DEFAULT);if (acknowledgedResponse.isAcknowledged()) {System.out.println("删除索引成功");} else {System.out.println("删除索引失败");}} catch (IOException e) {throw new RuntimeException(e);}});}
3.文档操作
1.添加文档
1.实体类
package com.sunxiansheng.entity;import lombok.Data;/*** Description: 用户实体类** @Author sun* @Create 2024/12/5 20:01* @Version 1.0*/
@Data
public class User {private String name;private Integer age;private String sex;
}
2.代码
/*** 添加文档*/@Testpublic void addDoc() {EsUtil.es((esClient) -> {// 添加文档// 构建一个索引请求IndexRequest request = new IndexRequest("user");// 设置文档idrequest.id("1001");// 设置文档内容User user = new User();user.setName("张三");user.setAge(20);user.setSex("男");// 将数据转换为json格式ObjectMapper objectMapper = new ObjectMapper();try {String userJson = objectMapper.writeValueAsString(user);// 设置文档内容request.source(userJson, XContentType.JSON);} catch (JsonProcessingException e) {throw new RuntimeException(e);}// 执行操作try {IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);System.out.println("response.getResult() = " + response.getResult());} catch (IOException e) {throw new RuntimeException(e);}});}

2.修改文档
1.代码
/*** 修改文档*/@Testpublic void updateDoc() {EsUtil.es((esClient) -> {// 添加文档// 构建一个索引请求UpdateRequest request = new UpdateRequest();request.index("user").id("1001");// 将性别修改为女request.doc(XContentType.JSON, "sex", "女");// 执行操作UpdateResponse update = null;try {update = esClient.update(request, RequestOptions.DEFAULT);} catch (IOException e) {throw new RuntimeException(e);}System.out.println("update.getResult() = " + update.getResult());});}
2.结果

3.查询文档
/*** 查询文档*/@Testpublic void searchDoc() {EsUtil.es((esClient) -> {// 查询指定索引下指定id的文档GetRequest user = new GetRequest("user", "1001");try {GetResponse response = esClient.get(user, RequestOptions.DEFAULT);System.out.println("response.getSourceAsString() = " + response.getSourceAsString());} catch (IOException e) {throw new RuntimeException(e);}});}
4.删除文档
@Test
public void deleteDoc() {EsUtil.es((esClient) -> {// 删除文档try {DeleteRequest user = new DeleteRequest("user", "1001");DeleteResponse response = esClient.delete(user, RequestOptions.DEFAULT);System.out.println("response.toString() = " + response.toString());} catch (IOException e) {throw new RuntimeException(e);}});
}
5.批量新增
/*** 批量新增*/@Testpublic void batchAdditions() {EsUtil.es((esClient) -> {BulkRequest bulkRequest = new BulkRequest();bulkRequest.add(new IndexRequest("user").id("1002").source(XContentType.JSON, "name", "李四"));bulkRequest.add(new IndexRequest("user").id("1003").source(XContentType.JSON, "name", "王五"));try {BulkResponse response = esClient.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println("response.getTook() = " + response.getTook());} catch (IOException e) {throw new RuntimeException(e);}});}
6.批量删除
@Testpublic void batchDeletion() {EsUtil.es((esClient) -> {BulkRequest bulkRequest = new BulkRequest();bulkRequest.add(new DeleteRequest("user").id("1002"));bulkRequest.add(new DeleteRequest("user").id("1003"));try {BulkResponse response = esClient.bulk(bulkRequest, RequestOptions.DEFAULT);System.out.println("response.getTook() = " + response.getTook());} catch (IOException e) {throw new RuntimeException(e);}});}
4.高级查询
1.全量查询
/*** 全量查询*/@Testpublic void fullQuery() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}

2.分页查询
/*** 分页查询*/@Testpublic void pagingSearch() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");// 条件查询+分页查询SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchQuery("name", "李四"));builder.from(0);builder.size(1);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}
3.排序查询
/*** 排序查询*/@Testpublic void sortingQueries() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");// 查询所有,根据age升序排序SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());builder.sort("age", SortOrder.ASC);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}
4.过滤字段
/*** 过滤字段*/@Testpublic void filterFields() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());// 排除或者包括字段String[] includes = {"name", "age"};String[] excludes = {};builder.fetchSource(includes, excludes);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}
5.组合查询
/*** 组合查询*/@Testpublic void combinedQueries() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");SearchSourceBuilder builder = new SearchSourceBuilder();// 组合查询// BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();// // 性别必须是男// boolQueryBuilder.must(QueryBuilders.matchQuery("sex", "男"));// // 年龄可以是22或者23// boolQueryBuilder.should(QueryBuilders.matchQuery("age", "22"));// boolQueryBuilder.should(QueryBuilders.matchQuery("age", "23"));// // 至少一个 should 条件必须满足// boolQueryBuilder.minimumShouldMatch(1);// builder.query(boolQueryBuilder);// 范围查询,年龄大于等于21小于等于22RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gte(21).lte(22);builder.query(rangeQueryBuilder);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}
6.高亮查询
/*** 高亮查询*/@Testpublic void highlightedQueries() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");SearchSourceBuilder builder = new SearchSourceBuilder();// 高亮查询,对name进行高亮builder.query(QueryBuilders.matchQuery("name", "李四"));HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.field("name");highlightBuilder.preTags("<font color='red'>");highlightBuilder.postTags("</font>");builder.highlighter(highlightBuilder);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());System.out.println("hit.getHighlightFields() = " + hit.getHighlightFields());});} catch (IOException e) {throw new RuntimeException(e);}});}
7.聚合查询
/*** 聚合查询*/@Testpublic void aggregateSearch() {EsUtil.es((esClient) -> {SearchRequest request = new SearchRequest("user");SearchSourceBuilder builder = new SearchSourceBuilder();// 聚合操作求最大年龄// MaxAggregationBuilder maxAggregationBuilder = AggregationBuilders.max("maxAge").field("age");// builder.aggregation(maxAggregationBuilder);// 对年龄进行分组TermsAggregationBuilder ageGroup = AggregationBuilders.terms("ageGroup").field("age");builder.aggregation(ageGroup);request.source(builder);try {SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();System.out.println("hits.getTotalHits() = " + hits.getTotalHits());hits.forEach(hit -> {System.out.println("hit.getSourceAsString() = " + hit.getSourceAsString());});} catch (IOException e) {throw new RuntimeException(e);}});}
相关文章:
ElasticSearch7.8快速入门
文章目录 1.基本概念1.数据格式2.倒排索引 2.HTTP使用1.创建索引(相当于创建数据库)2.索引-查询 & 删除1.查询索引2.查询所有索引3.删除索引 3.创建文档1.创建文档(不指定id)2.创建文档(指定id) 4.文档…...
【YashanDB知识库】hive初始化崖山报错YAS-04209
本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7849008.html?templateId1718516 【问题分类】功能使用 【关键字】hadoop,hive,YAS-02058 【问题描述】hive初始化崖山报错: 0: jdbc:yasdb://192…...
2024年度总结:保持正念 延迟满足
总结: 时光荏苒,很快就到了年底,2024年也就悄悄的过去了,回顾这一年,有很多的感触,在此做一个总结,留下自己的脚印 CTF: 要总结的第一件事那当然是CTF,回顾这一年&#…...
VScode SSH 错误:Got bad result from install script 解決
之前vscode好好的,某天突然连接报错如下 尝试1. 服务器没有断开,ssh可以正常连接 2. 用管理员权限运行vscode,无效 3. 删除服务器上的~/.vscode-server 文件夹,无效 试过很多后,原来很可能是前一天anaconda卸载导致注册表项 步…...
Logo设计免费生成器工具:轻松创建独特标志
在当今的商业世界中,一个独特且引人注目的Logo是任何企业或品牌的身份象征。它不仅代表了公司的形象,还传达了公司的价值观和使命。然而,对于许多初创企业或小型企业来说,聘请专业设计师来设计一个Logo可能是一笔不小的开销。这时…...
[算法] [leetcode-349] 两个数组的交集
349 两个数组的交集 给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2] 示例 2: …...
Type c系列接口驱动电路·内置供电驱动电路使用USB2.0驱动电路!!!
目录 前言 Type c常见封装类型 Type c引脚功能详解 Type c常见驱动电路详解 Type c数据手册 编写不易,仅供学习,请勿搬运,感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路…...
第7章 程序流程控制 - 条件分支
汇编语言是一种低级编程语言,它与特定计算机架构的机器码有着直接对应关系。条件分支是程序流程控制的一部分,允许根据某些条件来决定执行哪一段代码。在汇编中,这通常通过比较指令和跳转指令来实现。 以下是一些经典的汇编语言源代码示例&a…...
Edge如何获得纯净的启动界面
启动Edge会出现快速链接,推广链接,网站导航,显示小组件,显示信息提要,背景 ●复杂页面 ●精简页面 点击页面设置按钮 关闭快速链接 关闭网站导航 关闭小组件 关闭信息提要 关闭背景 关闭天气提示 精简页面看起来十分舒…...
gitlab的搭建及使用
1、环境准备 服务器准备 CentOS Linux release 7.9.2009 (Core),内存至少4G。 修改主机名和配置ip地址 hostnamectl set-hostname <hostname> 关闭主机的防火墙 # 关闭防火墙 systemctl stop firewalld #临时关闭防火墙 systemctl disable firewalld …...
如何逐步操作vCenter修改DNS服务器?
在vSphere 7中有一个新功能,它允许管理员更改vCenter Server Appliance的FQDN和IP。因此本文将介绍如何轻松让vCenter修改DNS服务器。 vCenter修改DNS以及修改vCenter IP地址 与在部署 vCenter Server Appliance 后,您可以根据需要修改其 DNS 设置和 IP…...
XIAO ESP32 S3网络摄像头——2视频获取
本文主要是使用XIAO Esp32 S3制作网络摄像头的第2步,获取摄像头图像。 1、效果如下: 2、所需硬件 3、代码实现 3.1硬件代码: #include "WiFi.h" #include "WiFiClient.h" #include "esp_camera.h" #include "camera_pins.h"// 设…...
使用JMeter对Linux生产服务器进行压力测试
安装 JMeter wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.4.1.tgz tar -xzf apache-jmeter-5.4.1.tgz cd apache-jmeter-5.4.1创建 JMeter 脚本 设置中文 选择Options—>Choose Language—>选择其他语言(例如:Chinese&am…...
spring boot 异步线程池的使用
创建Spring Boot项目 首先,你需要创建一个Spring Boot项目。你可以使用Spring Initializr(https://start.spring.io/)来快速生成项目结构。 添加异步支持依赖 在你的pom.xml文件中,确保你已经添加了Spring Boot的starter依赖&…...
风力涡轮机缺陷检测数据集,86.6%准确识别率,11921张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注
风力涡轮机缺陷检测数据集,86.6%准确识别率,11921张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注 数据集下载 yolov11: https://download.csdn.net/download/pbymw8iwm/90206849 yolov…...
深入浅出梯度下降与反向传播
文章目录 1. 前言2. 基本概念2.1 一元函数的导数2.2 偏导数2.3 方向导数2.4 梯度2.5 均方误差 3. 梯度下降3.1 梯度下降的公式3.2 梯度下降的类型(优化器) 4. 反向传播4.1 反向传播的基本步骤4.2 反向传播的数学推导 5. 实战5.1 手动求导5.2 自动求导5.3…...
【电机控制】基于STC8H1K28的六步换向——方波驱动(硬件篇)
【电机控制】基于STC8H1K28的六步换向——方波驱动(硬件篇) 文章目录 [TOC](文章目录) 前言一、硬件原理图1. MCU主控电路2. LDO电路3. 驱动电路4. 过零检测电路 二、3D图三、参考资料总结 前言 【电机控制】STC8H无感方波驱动—反电动势过零检测六步换向…...
手搓一个ChatUI需要分几步
只关注项目代码的同学可以直接跳转目录中的正文部分,查看项目仓库和功能介绍。 引言 Chatbot的UI界面设计,是和传统软件不同的:都是当面一个简洁的对话框,框里预备着热乎的工具,可以随时更新。 像我这样做工的牛马&a…...
2024年年度总结
前言 前一段时间,看到网上有人发类似于年度总结的东西,我想我也可以写一个,今年的日记也是从开头一直贯彻到了结尾 回忆起一年的事情还是有些困难 一月 回忆起有点困难,原因是我的日记大部分都是记录我当天地感想与情绪&#x…...
labelme2yolov8-seg 草稿()
简介: 最近做实例分割分割,使用Labelme生成json格式标签后,需要转换为txt标签,才能供YOLO进行训练。 在参看b站,github后,发现GitHub有相关项目:lableme2yolo 一个是ultralyics官方的JSON2YO…...
通过Taotoken用量看板清晰掌握各模型调用成本与消耗趋势
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken用量看板清晰掌握各模型调用成本与消耗趋势 在将大模型能力集成到实际项目时,除了关注功能实现࿰…...
PowerSetting下载慢?CDN加速+离线包分发方案
运维团队最怕什么?不是流量高峰,而是高峰期偏偏遇到软件包下载失败、更新卡死、内网带宽被打满。PowerSetting这类工具包虽然不大,但在大规模批量部署时,每一次从公网拉取都是一次不确定的赌博,网络抖动、节点失效、外…...
AI赋能能耗管理:解锁智能照明低碳运维新范式
摘要在双碳战略全面落地、智慧楼宇数字化转型的浪潮下,智能照明已广泛应用于商业园区、市政道路、写字楼等各类场景。传统照明能耗管理模式粗放,存在能耗数据模糊、浪费隐蔽、管控滞后、节能无依据等痛点,大量无效耗电持续增加运营成本。新一…...
ODS怎么转PDF?5种转换方法对比与2026实测工具推荐
当你拿到OpenDocument电子表格(ODS格式)文件,却需要分享成PDF格式时,转换往往成为一个必要步骤。ODS是LibreOffice等开源办公套件的标准格式,具有高度兼容性和数据完整性,但在跨平台分享和打印时࿰…...
server.crt“: BIO_new_file() failed (SSL: error:8000000D:system library::Permission denied:calling fo
server.crt": BIO_new_file() failed (SSL: error:8000000D:system library::Permission denied:calling fopen(/ Nginx更换ssl证书报错。 解决方案:关闭selinux 在Linux系统中,SELinux(Security-Enhanced Linux)是一种安全模…...
Windows右键菜单终极清理指南:3分钟打造高效工作环境
Windows右键菜单终极清理指南:3分钟打造高效工作环境 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是不是也曾对着电脑右键菜单里密密麻麻的选项…...
Word文档怎么导出为图片?Word如何高效转换图片?2026实测转换方法
在日常工作中,我们经常需要将Word文档转换为图片格式。无论是为了方便分享、创建演示内容,还是为了保护文档格式,将Word导出为图片都是一个常见的需求。本文将详细介绍Word文档导出为图片的多种方法,帮助你根据不同场景选择最适合…...
别再只用yum了!手把手教你用RPM包在CentOS 7.9上安装最新版LibreOffice 7.5.4(含中文包)
告别老旧版本:CentOS 7.9手动安装LibreOffice 7.5.4全攻略 在开源办公软件领域,LibreOffice无疑是当前最活跃、功能最全面的选择之一。然而许多CentOS用户发现,通过系统默认的yum仓库安装的LibreOffice版本往往落后官方最新版数年之久。以Cen…...
手把手教你用复旦微FM7Z045芯片在线调试DDR:JTAG与QSPI模式切换避坑指南
复旦微FM7Z045芯片DDR调试实战:模式切换与JTAG连接深度解析 第一次拿到复旦微FM7Z045开发板时,许多工程师都会遇到一个令人困惑的问题——明明按照手册步骤操作,DDR调试却总是失败。这往往不是代码问题,而是模式选择不当导致的。本…...
UniApp地图开发避坑指南:在nvue页面里搞定iconfont、动态缩放和点聚合的完整流程
UniApp地图开发实战:nvue页面中的高级技巧与性能优化 1. 引言:为什么选择nvue进行地图开发? 在移动应用开发领域,地图功能已经成为许多应用的核心组件。UniApp作为跨平台开发框架,提供了map组件来实现地图功能…...
