RestFul操作ElasticSearch:索引与文档全攻略
RestFul方式操作ES
索引库操作
创建索引库
PUT /索引库名称
{"mappings":{"properties":{"字段名":{"type":"字段类型","analyzer":"分词器","index":"是否参与搜索(布尔值)"},...}}
}
查询索引库
GET /索引库名
删除索引库
/DELETE /索引库名
修改索引库(增加字段)
ES中是禁止修改索引库的,因为修改索引库的操作会导致整个索引库变得不可用。
虽然不支持直接修改,但是支持增加字段。
PUT /索引库名/_mapping
{"properties":{"新字段名":{"type":"字段类型","analyzer":"分词器","index":"是否参与搜索(布尔值)"},...}
}
文档操作
新增文档
POST /索引库名/_doc/文档id
{"字段1":"值1","字段2":"值2","嵌套字段3":{"子字段1":"值3","子字段2":"值4"},
}
新增文档的请求路径为
/索引库名/_doc
,文档id可以不指定,如果不指定会由ES自动生成。
删除文档
DELETE /索引库名/_doc/文档id
修改文档
修改文档有两种方式:
- 全量修改:会完全覆盖原有内容。如果id存在则是先删除旧的数据再添加新的数据,不存在则是直接新增。
- 增量修改:修改指定字段的内容。
POST /索引库名/_doc/文档id
{"字段1":"值1","字段2":"值2","嵌套字段3":{"子字段1":"值3","子字段2":"值4",...},...
}
POST /索引库名/_update/文档id
{"doc":{"要修改的字段名":"修改的值",...}
}
查询文档
GET /索引库名/_doc/文档id
DSL查询
DSL查询的基本语句如下:
GET /索引库名/_search
{"query":{"查询类型":{ //支持的各种查询类型,例如 match、term、range 等。"字段名":"查询值"}}
}
查询所有
查询该索引库下的所有数据一般用match_all,本身是没有任何查询条件的。
GET /索引库名/_search
{"query":{"match_all":{}}
}
全文检索
全文检索是利用用户输入的内容分词,根据倒排索引进行匹配。
match:只允许查询一个字段
multi_match:允许查询多个字段
GET /索引库名/_search
{"query":{"match":{"字段":"搜索值"}}
}
GET /索引库名/_search
{"query":{"multi_match":{"query":"搜索值","fields":["字段1","字段2",..."字段n"]}}
}
精确查询
根据精确词条值查值,一般是keyword、数值、日期、布尔等类型的字段。
range:根据范围进行精确查找,可以是数值,也可以是日期。
term:根据搜索条件精确匹配
GET /索引库名/_search
{"query":{"range":{"字段名":{"gte":最低值,"lte":最高值}}}
}
GET /索引库名/_search
{"query":{"term":{"字段名":{"value":"精确值"}}}
}
地理查询
根据坐标经纬度查询。
geo_distance:查询指定中心点小于某个距离的所有文档。
geo_bounding_box:查询某个坐标点落在某个范围的所有文档。
GET /索引库名/_search
{"query":{"geo_distance":{"distance":"距离值","经纬度字段":"当前经纬度坐标"}}}
}
GET /索引库名/_search
{"query":{"geo_bounding_box":{"字段名":{"top_left":{"lat":最小值,"lon":最大值},"bottom_right":{"lat":最小值,"log":最大值}}}}
}
复合查询
⭐ES中计算得分的方式是基于计算词频的统计计算。早期采用了TF-IDF算法,但是这种算法在词频无限高的时候得分也会趋于无限高。所以后期采用了BM25算法,这种新的算法虽然也是基于词频,但是在词频无限高的时候它会趋于一种平稳的趋势。
复合查询可以将多种查询条件组合到一块进行查询。
bool:布尔查询是一个或多个查询子句的组合。子查询的组合方式有:
- must:必须匹配每个子查询,类似于"与"
- should:选择性匹配子查询,类似于"或"
- must_not:必须不匹配,不参与算分,类似于"非"
- filter:必须匹配,不参与算法
function_score:可以修改文档的相关性算分。
GET /索引库名/_search
{"query":{"bool":{"must":["match":{"字段名":"搜索值"},...],"should":[...],"must_not":[...],"filter":[]}}
}
GET /索引库名/_search
{"query":{"function_score":{"query":{"match":{"字段名":"搜索值"}},"functions":[{"filter":{"term":{"字段名":"匹配值"}},"weight":字段得分权重值}],"boost_mode":"multiply"}}
}
其中的query部分是查询条件
function中是影响算分的相关信息,此例中代表对filter筛选出的文档进行调整算分权重,而别的文档不管。
boost_mode是加权模式,这个例子中代表将
原始得分×10
得出新的分数
查询结果处理
排序
ES支持对搜索结果排序,默认是根据相关度得分进行排序,如果自己指定了排序规则的话,就不会进行相关性得分的计算,查询效率可能更优。
可以用来排序的字段类型有:keyword、数值、地理坐标、日期等。
排序规则可以直接在查询中的"sort"中配置。
GET /索引库名称/_search
{"query":{"match_all":{}},"sort":[{"排序字段名1":"排序规则" //asc desc},...]
}
分页
ES默认只返回前10条数据,如果要查询更多的话就需要用到分页查询了,分页查询会先查到from+size条数据,然后进行排序,最后返回size条数据。
GET /索引库名称/_search
{"query":{"match_all":{}},"from":分页开始位置,"size":获取多少条数据
}
由于分页查询需要查询from+size条数据,并且还涉及到排序,所以对于深度分页,效率并不高。
ES中做了设定最大分页数不能超过10000。
对此ES对深度分页提出了两个解决方案:
search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。但是它知识拿到了上一次最后一条数据的排序值,缺点是只能向后查。(官方推荐使用的方式)
SCro:原理将排序数据形成快照,保存在内存。缺点明显在数据更新时对缓存的处理,官方已经不推荐使用。
高亮
在搜索的时候我们需要在搜索结果中把搜索关键字突出显示。
ES可以做到这件事,原理是:通过对关键字添加标签,在页面中对标签添加css样式即可。
GET /索引库名称/_search
{"query":{"match_all":{}},"heightlight":{"fields":{"要高亮的字段名1":{"pre_tags":"<em>","post_tags":"</em>"},...}}
}
聚合
聚合可以实现对文档的统计、分析、运算等操作。常见的聚合有三类:
- 桶聚合:用来对文档做分组。
- TermAggeregation:按照文档字段值分组
- Date Histogram:按照日期阶梯分组
- 度量聚合:用于计算一些值,例如:
- Avg:平均值
- Max:最大值
- Min:最小值
- Stats:同时求max、min、avg、sum等。
- 管道聚合:以其它聚合的结果为基础做聚合。
使用"aggs"来定义聚合相关的属性,而"size"是指定相关文档的数量。如果只希望拿到聚合结果,那么size可以为0。
桶-字段聚合
GET /索引库名称/_search
{"query":{ //聚合前对数据的处理"match_all":{}},"size":相关文档的数量,"aggs":{"聚合的名称":{ //给聚合取个名称,查询结果中会返回该聚合名称下的聚合结果"terms":{ //聚合的类型,这里是桶聚合下的字段聚合"field":"聚合的字段名","size":希望获取的结果数量}}}
}
度量聚合
GET /索引库名称/_search
{"query":{ //聚合前对数据的处理"match_all":{}},"size":相关文档的数量,// 下面的写法是嵌套聚合,先根据外层条件进行聚合,之后根据内层条件进行再次聚合"aggs":{"聚合的名称":{ //给聚合取个名称,查询结果中会返回该聚合名称下的聚合结果"terms":{ //聚合的类型,这里是桶聚合下的字段聚合"field":"聚合的字段名","size":希望获取的结果数量},"aggs":{"聚合的名称":{ //给聚合取个名称,查询结果中会返回该聚合名称下的聚合结果"stats":{ //聚合的类型,这里的stats可以计算min、max、avg等"field":"聚合的字段名"}}}}}
}
自动补全查询
创建索引库
分词器的选择
我们在浏览器中使用的自动补全功能首先是基于拼音去做自动补全的,其次才是汉字,所以我们还需要学习拼音分词器。
拼音分词器官网:https://github.com/medcl/elasticsearch-analysis-pinyin
安装拼音分词器插件后就可以配置到plugin目录中,重启es即可使用。
拼音分词器使用方式是,在创建索引库的时候指定
"analyzer":"pinyin"
即可。仅仅安装了拼音分词器还不足以支持自动补全,因为拼音分词器很弱智,只能分成拼音,而且还没有汉字。
所以我们就需要实现自定义分词器。
创建索引时候的分词器
elasticsearch中分词器(analyzer)的组成包含三部分:
- character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符以及表情。
- tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik smart
- tokenizer filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等
只有在创建索引库的时候才能创建自定义分词器,在其中指定分词器包含的三个组成部分即可(可以只指定几个部分),而三个组成部分也可以自定义。
PUT /索引库名称
{"settings":{"analysis":{"analyzer":{ //自定义分词器"自定义分词器名称":{"character":"ik_max_word",// "tokenizer":"", //可以设置部分"filter":"pinyin"}},"filter":{ // 自定义tokenizer filter"自定义tokenizer filter名称":{"type":"过滤器类型",// 下面是一些自定义的配置...}}}},"mappings":{"properties":{"字段名":{"type":"字段类型","analyzer":"创建索引时使用的分词器", //这边就可以使用上面设置的自定义拼音分词器了"search_analyzer":"搜索时候使用的分词器", //一般用ik_smart分词器"index":"是否参与搜索(布尔值)"},...}}
}
自定义分词器直接CV即可,傻子才自己写!!!!
搜索时候的分词器
:::color4
自定义的拼音分词器只有在创建索引的时候适合用,并不适合在搜索的时候也使用,这是因为如果我们搜一个中文,它会把中文拆成拼音,再去根据拼音找文档,这样找出来的文档准确定非常低。所以我们需要在创建索引库的时候分别指定sanalyzer和search_analyzer。
:::
索引库的完善
elasticsearch提供了Completion Suggesteri查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。为了提高补全查询的效率,对于文档中字段的类型有一些约束:
- 参与补全查询的字段必须是completion类型
- 字段的内容一般是用来补全的多个词条形成的数组
PUT /索引库名称
{"mappings":{"properties":{"字段名":{"type":"completion","analyzer":"创建索引时使用的分词器", //这边就可以使用上面设置的自定义拼音分词器了},...}}
}
而在插入的时候:
POST /索引库名/_doc
{"字段名":["词条1","词条2",..."词条3"]
}
自动补全使用
区别于DSL查询使用"query",自动补全的使用方式有所不同
GET /索引库名/_search
{"suggest":{"查询名称":{ //自定义查询名称"查询字段":"查询内容","completion":{"field":"补全查询的字段","skip_duplicates":true, //跳过重复的"size":10 //获取前10条结果}}}
}
RestClient方式操作
想要在Java中操作ES,官方提供了RestClient的依赖,当然也可以使用spring-boot-starter-data-elasticsearch相关的依赖。
使用RestClient操作ES的步骤如下:
- 导入依赖
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
- 锁定版本
<properties><java.version>1.8</java.version><elasticsearch.version>7.12.1</elasticsearch.version>
</properties>
- 初始化RestClient
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ElasticsearchConfig {@Bean(destroyMethod = "close")public RestHighLevelClient elasticsearchClient() {RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));return client;}
}
ES数据同步
es数据同步采用rabbitmq,因为rabbitmq本身是可靠的。
在增删改的时候发送消息给ES,去让ES进行同步。
相关文章:
RestFul操作ElasticSearch:索引与文档全攻略
RestFul方式操作ES 索引库操作 创建索引库 PUT /索引库名称 {"mappings":{"properties":{"字段名":{"type":"字段类型","analyzer":"分词器","index":"是否参与搜索(布尔值)"},…...
OpenCV 图像读取与显示
一、知识点: 1、读取图像 (1)、Mat imread( const String & filename, int flags IMREAD_COLOR_BGR ); (2)、返回值: Mat,返回读取的图像。 若读取图像失败,则返回一个空的对象,对象.empty()为true。 (3)、参数filename: String是…...
Django快速入门篇
Django官网 https://docs.djangoproject.com/zh-hans/4.2/ 官方介绍 官方版本 推荐LTS版本,python3.9/3.10 djongo 每两年会出一个LTS版本 关于环节djongo,conda直接安装即可 conda create -n myenv python3.9 conda activate myenv pip install dj…...
C++23 新增扁平化关联容器详解
文章目录 一、引言已有关联容器回顾新容器的引入原因 二、std::flat_set定义与特性代码示例适用场景 三、std::flat_multiset定义与特性代码示例适用场景 四、std::flat_map定义与特性代码示例适用场景 五、std::flat_multimap定义与特性代码示例适用场景 六、与其他容器的比较…...
当PLC遇上电焊机器人:EtherCAT转CANopen上演工业级“语言翻译官”
在汽车自动化产线中,PLC与电焊机器人的高效协同是提升生产效率的关键。但PLC常用的EtherCAT协议与电焊机器人采用的CANopen协议存在通信壁垒,JH-ECT009疆鸿智能EtherCAT转CANopen技术成为打破这一障碍的核心方案。 应用拓扑图 EtherCAT是高速工业以太网协…...
LeetCode 1345. 跳跃游戏 IV(困难)
题目描述 给你一个整数数组 arr ,你一开始在数组的第一个元素处(下标为 0)。 每一步,你可以从下标 i 跳到下标 i 1 、i - 1 或者 j : i 1 需满足:i 1 < arr.lengthi - 1 需满足:i - 1 …...
Linux bash shell的循环命令for、while和until
1、for命令 for命令,允许你创建一个遍历一系列值的循环,每次迭代都使用其中一个 值来执行已定义好的一组命令。 for var in list do commands done # 在list参数中,你需要提供迭代中要用到的一系列值。 # 可以通过几种不同的方法指定列表中的…...
三、【数据建模篇】:用 Django Models 构建测试平台核心数据
【数据建模篇】:用 Django Models 构建测试平台核心数据 前言我们要设计哪些核心数据?准备工作:创建 Django App开始设计数据模型 (Models)1. 通用基础模型 (可选但推荐)2. 项目模型 (Project)3. 模块模型 (Module)4. 测试用例模型 (TestCase…...
Mac如何允许安装任何来源软件?
打开系统偏好设置-安全性与隐私,点击右下角的解锁按钮,选择允许从任何来源。 如果没有这一选项,请到打开终端,输入命令行:sudo spctl --master-disable, 输入命令后回车,输入电脑的开机密码后回车。 返回“…...
云原生主要架构模式
云原生(Cloud Native)是一种利用云计算的优势来构建和运行可扩展、弹性和高效应用程序的方法。它不仅仅是技术的集合,更是一种架构和设计理念。本文将围绕你提出的几部分,深入探讨云原生主要的架构模式,帮助你理解如何利用这些模式构建现代化的应用。 1. 服务化架构模式(…...
Neon数据库:让Postgres更智能的选择!
Neon:革新的Serverless PostgreSQL解决方案 在当今快速发展的技术世界,数据库的效率和灵活性成为众多开发者关注的重中之重。Neon,以其独特的serverless架构,正引领着这一变革。本文将深入探讨Neon的独特构架、应用场景以及具体的…...
《Metasploit框架核心模块解析与安全防护实践》
目录 一、框架模块化设计与安全验证价值 1. 漏洞验证模块(Exploit Modules) 2. 安全评估模块(Auxiliary Modules) 3. 安全响应模块(Post-Exploitation) 4. 载荷安全…...
C#:多线程Task使用
一.Task与Thread Task是架构在Thread之上的,也就是说任务最终还是要抛给线程去执行。Task跟Thread不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务有点类似线程池,但是任务相比线程池有很小的开销和精确的控制。…...
Nginx笔记
一、概述 Nginx一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个电子邮件代理服务器。正向代理服务的是客户端(比如VPN),反向代理服务的是服务端。Nginx是多进程的,有一个Master进程控制多个Worke…...
小米便签源码部署流程
一、准备环境 1. 安装必要工具 Android Studio:最新稳定版(需支持 Kotlin 和 Jetpack Compose)。 JDK:建议 JDK 11 或更高(通过 sdkman 或 brew 安装)。 Git:用于克隆源码。 2. 配置国内镜像源&…...
DAY 30 超大力王爱学Python
知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 步骤 1:创建项目结构 …...
左右边界策略
这是一套完整的交易逻辑策略,涵盖了从函数定义、指标计算、信号生成到资金和仓位管理、加仓和减仓逻辑、以及止损和止盈逻辑的各个方面。 以下对该交易系统进行详细分析: 交易逻辑思路 1. 函数定义 - DZSell 和 DZBuy 函数:这两个函数用于计算卖出和买入的价格区间。它…...
iOS苹果和Android安卓测试APP应用程序的区别差异
在当今这个移动互联网时代,iOS和Android作为两大主流操作系统,它们在测试应用程序时存在哪些差异呢?这不仅是一个技术问题,也是一个市场策略问题。让我们从一个实际案例开始探讨。 假设我们有一个新的社交应用需要在iOS和Android…...
【Python装饰器深潜】从语法糖到元编程的艺术
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选型对比🛠️ 二、实战演示⚙️ 环境配置要求💻 核心代码实现案例1:基础计时装饰器案…...
Kubernetes中微服务JVM监控与自动发现的解决方案
以下是针对 Kubernetes 中微服务 JVM 监控与自动发现的解决方案,结合 Prometheus 的动态发现机制和 Spring Boot 的监控能力,解决 Pod IP 动态变化和当前微服务监控数据暴露匿名随意访问的安全问题。 一、微服务端配置(Spring Boot 微服务) 1. 依赖配置(pom.xml) <…...
mapbox进阶,纯前端geojson转shape,并将shape相关文件压缩成zip压缩包并下载
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️line线图层样式二、🍀纯前端geojson转…...
Oracle ASM Rebalance Power 了解
Oracle ASM Rebalance Power 了解 基本概念 ASM (Automatic Storage Management) 的 Rebalance Power 参数控制磁盘组重新平衡操作的速度和资源使用。当添加、删除或调整 ASM 磁盘时,ASM 会自动执行重新平衡操作来重新分布数据。 ASM_POWER_LIMIT 参数 作用 控…...
sqlite的拼接字段的方法(sqlite没有convert函数)
我在sqlserver 操作方式: /// <summary>///获取当前门店工资列表/// </summary>/// <param name"wheres">其他条件</param>/// <param name"ThisMendian">当前门店</param>/// <param name"IsNotU…...
深入解析 OpenManus:开源 AI 智能体框架的技术原理与实践
深入解析 OpenManus:开源 AI 智能体框架的技术原理与本地部署指南 在当今人工智能快速发展的时代,智能体(Agent)技术正逐渐成为推动自动化和智能化的关键力量。OpenManus,由 MetaGPT 团队开发的开源 AI 智能体框架&am…...
[面试精选] 0001. 两数之和
文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 1. 两数之和 - 力扣(LeetCode) 2. 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个…...
CAP分布式理论
CAP分布式理论 文章目录 CAP分布式理论事务本地事务定义适用场景优点缺点 分布式事务一、分布式事务的定义二、分布式事务的标准与 CAP 理论的关系1. CAP 理论的核心内容2. CAP 理论对分布式事务的指导意义3. 分布式事务的其他关键标 三、总结:CAP 理论与分布式事务…...
如何管理和优化内核参数
Linux 系统中的内核参数(Kernel Parameters)对系统的性能、安全性和稳定性有很大影响。通过调整内核参数,可以优化系统性能、增强网络能力、调整内存管理等。管理和优化内核参数通常涉及以下几个步骤: 1. 查看当前内核参数 在 L…...
sgRNA的靶基因基因组如何获得? for 下游的 T7E1验证
愿武艺晴小朋友一定得每天都开心! 1)在基因组,靶标区域上下游,设计引物(以Zfp532基因为例): a. NCBI(Home - Gene - NCBI)Gene 页面上输入:Zfp532。 b. 在新…...
人工智能+:职业价值的重构与技能升级
当“人工智能”成为产业升级的标配时,一个令人振奋的就业图景正在展开——不是简单的岗位替代,而是职业价值的重新定义。这场变革的核心在于,AI并非抢走工作机会,而是创造了人类与技术协作的全新工作范式。理解这一范式转换的逻辑…...
【前端开发】Uniapp日期时间选择器:实现分钟动态步长设置
技术栈 Uniapp Vue3 uView年份显示前后一年,分钟动态设置间隔 效果图 主体显示 <view class"uni-row selector" click"openPicker"><uni-icons color"#c0c4cc" type"calendar" size"22"></uni-…...
目标检测DN-DETR(2022)详细解读
文章目录 gt labels 和gt boxes加噪query的构造attention maskIS(InStability)指标 在DAB-Detr的基础上,进一步分析了Detr收敛速度慢的原因:二分图匹配的不稳定性(也就是说它的目标在频繁地切换,特别是在训…...
榕壹云上门家政系统:基于Spring Boot+MySQL+UniApp的全能解决方案
一、项目背景:家政服务行业的数字化升级需求 随着城市化进程加快,居民对上门家政服务的需求持续增长。传统家政行业存在服务效率低、信息不透明、管理成本高的问题,亟需通过数字化工具实现服务标准化、流程自动化。榕壹云上门家政系统应运而…...
目标检测DINO-DETR(2023)详细解读
文章目录 对比去噪训练混合查询选择look forward twice 论文全称为:DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 提出了三个新的方法: 首先,为了改进一对一的匹配效果,提出了一种对比去噪训练方法…...
LLM笔记(十)vLLM(1)PagedAttention论文笔记
文章目录 PagedAttention论文笔记论文摘要概览1. 引言问题背景提出的解决方案主要贡献和成果 2. 背景2.1 基于Transformer的大语言模型2.2 LLM服务与自回归生成2.3 LLM的批处理技术 3. LLM服务中的内存挑战3.1 现有系统中的内存管理 4. 方法: PagedAttention 和 vLLMvLLM 系统概…...
5.20 note
不用if else实现递归 原代码 class Solution { public: int mechanicalAccumulator(int target) { if (target 0) return 0; // 终止条件:基准情况 return target mechanicalAccumulator(target - 1); // 递归累加 } }; 变形 class Solution { public: int…...
vuejs处理后端返回数字类型精度丢失问题
标题问题描述 后端返回数据有5.00和3.30这种数据,但是前端展示的时候返回对应分别为5和3.0,小数点后0都丢失了。 接口返回数据展示network-Response: 接口返回数据展示network-Preview: 错误数据效果展示 发现问题 浏览器接口…...
指令烧录ORIN NANO操作系统
1 概述 模组为ORIN NANO 4GB版本 Ubuntu系统为18.04虚拟机 说明:刷机过程会有重新连接USB的操作,烧写过程需要注意虚拟机提示,官方不建议使用虚拟机,建议直接使用ubuntu操作系统的机器。 2 下载烧录所需文件 进入到下载网址&am…...
每日算法刷题Day11 5.20:leetcode不定长滑动窗口求最长/最大6道题,结束不定长滑动窗口求最长/最大,用时1h20min
6. 1695.删除子数组的最大得分(中等) 1695. 删除子数组的最大得分 - 力扣(LeetCode) 思想 1.给你一个正整数数组 nums ,请你从中删除一个含有 若干不同元素 的子数组**。**删除子数组的 得分 就是子数组各元素之 和 。 返回 只删除一个 子…...
List介绍
什么是List 在集合框架中,List是一个接口,继承自Collection Collection也是一个接口,该接口中规范了后序容器中常用的一些方法 Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的,具体如下࿱…...
List更简洁的编码构建
List的链式构建需求 jdk1.8,编码时需要手动构建一个List 传统List构建方式 - 声明列表,依次添加元素; - 利用Arrays.asList方法声明并添加元素 //1 先声明创建 List<String> createList new ArrayList<>();//2 逐个添加元素 c…...
Java 单元测试框架比较:JUnit、TestNG 哪个更适合你?
Java 单元测试框架比较:JUnit、TestNG 哪个更适合你? 在 Java 开发领域,单元测试是保证代码质量的重要环节。而选择一个合适的单元测试框架,对于提升测试效率和代码可靠性至关重要。本文将深入比较 JUnit 和 TestNG 这两个主流的…...
变频器如何通过Profibus DP主站转Modbus RTU/TCP接入到上位机
变频器如何通过Profibus DP主站转Modbus RTU/TCP接入到上位机 在工业自动化领域,Profibus DP和Modbus RTU是两种常见的通信协议。Profibus DP广泛应用于工厂自动化,而Modbus RTU则常用于串行通信。当需要将支持Profibus DP的设备(如变频器&a…...
ElasticSearch性能优化
ES基础概念介绍: 索引:类似于MySQL中的表,它是具有相同特征的一个数据集。文档:格式为JSON格式,类似于MySQL中的一条数据,它是数据存储的基本数据单元,每一条文档都有一个唯一的ID。查询&#x…...
pom.xml中的runtime
在 Maven 的 pom.xml 文件中,<scope> 元素可以指定依赖项的作用范围,而 runtime 是其中的一个作用范围值。以下是 runtime 作用范围的含义: 定义:runtime 作用范围表示该依赖项在编译时不需要,但在运行时需要。…...
第一章走进java世界
第一章 走进 java 世界 1.1 java 语言的特点(小面经) 使用简单、高效 去掉了 C 和 C++中的指针和多重继承技术通过垃圾自动回收机制简化了程序内存管理对于数据类型在不同字长的计算机上实现统一字节数占用完全面向对象 抽象、封装、继承、多态自动内存管理(Auto Garbage C…...
tigase源码学习笔记-事件总线EventBus
前言 最近看到了一些tigase关于异步事件解耦的地方的设计,做一个笔记记录一下。什么是事件总线,我自己对于事件总线的理解是,事件总线是一个对事件(Event)进行集中处理的基于发布订阅模式的一种处理机制。个人拙见&am…...
GO语言学习(六)
GO语言学习(六) 各位支持我的友友们我们现在不知不觉的已经进入第六期了,在上一期我们学习了一些简单的HTTP相关知识,还带大家基本的了解了web的深层原理及实现过程,相信大家应该都有自己的收获了,现在我就带领大家学习一下本期的…...
25.5.20学习总结
做题思路 数列分段 Section IIhttps://www.luogu.com.cn/problem/P1182正如题目所说,我们需要得到一个最小的最大段的值,可能有人将注意力放在分段上,事实上,我们更多的应该关注结果。这是一道二分答案的题,你可以先确…...
山东大学软件学院项目实训-基于大模型的模拟面试系统-Vditor编辑器上传图片
Vditor编辑器图片上传功能 使用Vditor进行图片上传时,会返回图片在后端的相对路径,这在前端是无法进行显示的(如下图) 于是为了将图片正常显示,我采取了和头像上传一样的解决方案,使用阿里云图床进行存储…...
在 Kotlin 中,什么是内联函数?有什么作用?
在 Kotlin 中,内联函数是一种通过 inline 关键字声明的函数,其主要目的是优化高阶函数(即以函数作为参数或返回值的函数)的性能。 内联函数的函数体会在编译时直接插入到调用处,从而避免函数调用的开销,并…...