干货 | 详述 Elasticsearch 向量检索发展史
1. 引言
向量检索已经成为现代搜索和推荐系统的核心组件。
通过将复杂的对象(例如文本、图像或声音)转换为数值向量,并在多维空间中进行相似性搜索,它能够实现高效的查询匹配和推荐。
图片来自:向量数据库技术鉴赏【上集】(Ele实验室)
Elasticsearch作为一款流行的开源搜索引擎,其在向量检索方面的发展也一直备受关注。本文将回顾 Elasticsearch 向量检索的发展历史,重点介绍各个阶段的特点和进展。以史为鉴,方便大家建立起 Elasticsearch 向量检索的全量认知。
2. 初步尝试:简单向量检索的引入
Elasticsearch 最初并未专门针对向量检索进行设计。然而,随着机器学习和人工智能的兴起,对于高维向量空间的查询需求逐渐增长。
在Elasticsearch的 5.x 版本中,Elastic 爱好者们开始尝试通过插件和基本的数学运算实现简单的向量检索功能。如:一些早期的插件如 elasticsearch-vector-scoring、fast-elasticsearch-vector-scoring 就是为了满足这样的需求。
https://github.com/MLnick/elasticsearch-vector-scoring
https://github.com/lior-k/fast-elasticsearch-vector-scoring
这一阶段的向量检索主要用于基本的相似度查询,例如文本相似度计算。虽然功能相对有限,但为后续的发展奠定了基础。
扩展说明:关于机器学习功能,如果大家对 Elasticsearch 版本更迭感兴趣,印象中当时 6.X 版本推出,非常振奋人心。不过受限于非开源功能,国内的真实受众还相对较少。
3. 官方支持:进一步发展
到 Elasticsearch 7.0 版本,正式开始增加对向量字段的支持,例如通过 dense_vector 类型。这标志着Elasticsearch正式进入向量检索领域,不再只依赖于插件。
dense_vector 最早的发起时间:2018年12月13日,7.6 版本标记为 GA。
https://github.com/elastic/elasticsearch/pull/33022
https://github.com/elastic/elasticsearch-net/issues/3836
关于 dense_vector 类型的使用,推荐阅读:高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索。
这一阶段的主要挑战是如何有效地在传统的倒排索引结构中支持向量检索。通过与现有的全文搜索功能相结合,Elasticsearch能够提供一种灵活而强大的解决方案。
从最初的插件和基本运算,到后来的官方支持和集成,这一阶段为Elasticsearch在向量检索方面的进一步创新和优化奠定了坚实的基础。
4. 专门优化:增强的相似度计算
随着需求的增长,Elasticsearch 团队开始深入研究并优化向量检索性能。这涉及了引入更复杂的相似度计算方法,例如余弦相似度、欧几里得距离等,以及对查询执行的优化。
从 Elasticsearch 7.3 版本开始,官方引入了更复杂的相似度计算方法。特别是 script_score 查询的增强,使用户可以通过 Painless 脚本自定义更丰富的相似度计算。
https://www.elastic.co/guide/en/elasticsearch/reference/7.3/query-dsl-script-score-query.html#vector-functions
核心功能在于允许通过向量之间的夹角计算相似度,用 k 最近邻 (k-NN) 的余弦相似度距离指标,从而为相似度搜索引擎提供支持。广泛用于文本分析和推荐系统。
主要用于解决:复杂相似度需求,提供了更灵活和强大的相似度计算选项,能够满足更多的业务需求。
应用场景体现在:
(1)个性化推荐:通过余弦相似度分析用户的行为和兴趣,提供更个性化的推荐内容;
(2)图像识别和搜索:使用欧几里得距离快速检索与给定图像相似的图像;
(3)声音分析:在声音文件之间寻找相似模式,用于语音识别和分析。
值得一提的是:初始的时候,向量检索支持的维度为:1024,直到 Elasticsearch 8.8 版本,支持维度变更为:2048(这是呼声很高的一个需求)。
https://github.com/elastic/elasticsearch/pull/95257
https://discuss.elastic.co/t/vector-knn-search-with-more-than-1024-dimensions/332819
Elasticsearch 7.x 版本的增强相似度计算功能标志着向量检索能力的显著进展。通过引入更复杂的相似度计算方法和查询优化,Elasticsearch不仅增强了其在传统搜索场景中的功能,还为新兴的机器学习和AI应用打开了新的可能性。
但,这个时候你会发现,如果要实现复杂的向量搜索功能,自己实现的还很多。如果把后面马上提到的深度学习的集成和大模型的出现比作:飞行的汽车,当前的阶段还是“拉驴车”,功能是有的,但用起来很费劲。
5. 深度学习集成与未来展望
大模型时代,向量检索和多模态搜索成为“兵家”必争之地。
多模态检索是一种综合各种数据模态(如文本、图像、音频、视频等)的检索技术。换句话说,它不仅仅是根据文字进行搜索,还可以根据图像、声音或其他模态的输入来搜索相关内容。
为了更通俗地理解多模态检索,我们可以通过以下比喻和示例来加深认识:想象你走进一个巨大的图书馆,这里不仅有书籍,还有各种图片、录音和视频。你可以向图书馆员展示一张照片,她会为你找到与这张照片相关的所有书籍、音频和视频。或者,你可以哼一段旋律,图书馆员能找到相关的资料,或者提供类似的歌曲或视频。这就是多模态检索的魔力!
随着深度学习技术的不断发展和应用,Elasticsearch 已开始探索将深度学习模型直接集成到向量检索过程中。这不仅允许更复杂、更准确的相似度计算,还开辟了新的应用领域,例如基于图像或声音的搜索。尤其在Elasticsearch的 8.x 版本,这一方向得到了显著的推进。
5.1 向量化是前提
如下图所示,先从左往右看是写入,图像、文档、音频转化为向量特征表示,在 Elasticsearch 中通过 dense_vector 类型存储。
从右往左看是检索,先将检索语句转化为向量特征表示,然后借助 K 近邻检索算法(在 Elasticsearch 中借助 Knn search 实现),获取相似的结果。
看中间,Results 部分就是向量检索的结果。
综上,向量检索打破了传统倒排索引仅支持文本检索的缺陷,可以扩展支持文本、语音、图像、视频多种模态。
图片来自:Elasticsearch 官方文档
相信你到这里,应该理解了向量检索和多模态。没有向量化的这个过程,多模态检索无从谈起。
5.2 模型是核心
深度学习模型集成总共可分为三步:
第一步:模型导入和管理:Elasticsearch 8.x 支持导入预训练的深度学习模型,并提供相应的模型管理工具,方便模型的部署和更新。
第二步:向量表示与转换:通过深度学习模型,可以将非结构化数据如图像和声音转换为向量表示,从而进行有效的检索。
第三步:自定义相似度计算:8.x 版本提供了基于深度学习模型的自定义相似度计算接口,允许用户根据实际需求开发和部署专门的相似度计算方法。
关于深度学习,可以是自训练模型,也可以是第三方模型库中的模型,举例:咱们图搜图案例中就是用的 HuggingFace 里的:clip-ViT-B-32-multilingual-v1 模型。

Elasticsearch 支持的第三方模型列表:
| 名称 | 模型释义 |
|---|---|
| BERT | 双向Transformer模型 |
| BART | 序列到序列模型 |
| DPR bi-encoders | 双向编码器检索模型 |
| DistilBERT | 轻量化BERT |
| ELECTRA | 对抗性预训练模型 |
| MobileBERT | 针对移动设备的BERT |
| RoBERTa | 优化版BERT |
| RetriBERT | 检索-focused BERT |
| MPNet | 混合并行网络 |
| SentenceTransformers bi-encoders | 句子转换双向编码器 |
| XLM-RoBERTa | 多语言版RoBERTa |
包括如下的 Hugging Face 模型库也都是支持的。
图片来自:HuggingFace 官方文档 模型是Elasticsearch与深度学习集成的核心,它能将复杂的数据转化为“指纹”向量,使搜索更高效和智能。借助模型,Elasticsearch可以理解和匹配各种非结构化数据,如图像和声音,提供更为准确和个性化的搜索结果,同时适应不断变化的数据和需求。“没有了模型,我们还需要黑暗中摸索很久”。
第三方模型官网介绍:https://www.elastic.co/guide/en/machine-learning/8.9/ml-nlp-model-ref.html#ml-nlp-model-ref-text-embedding
值得一提的是:Elasticsearch 导入大模型需要专属 Python 客户端工具 Eland。
Eland是一个 Python Elasticsearch客户端,让用户能用类似Pandas的API来探索和分析Elasticsearch中的数据,还支持从常见机器学习库上传训练好的模型到Elasticsearch。
Eland是为了与Elasticsearch协同工作而开发的库。它不是Elasticsearch的一个特定版本产物,而是作为一个独立的项目来帮助Python开发者更方便地在Elasticsearch中进行数据探索和机器学习任务。
Eland 更多参见:
https://www.elastic.co/guide/en/elasticsearch/client/eland/current/index.html
https://github.com/elastic/eland
5.3 ESRE 是 Elastic 的未来
前一段时间在分别给两位阿里云、腾讯云大佬聊天的时候,都提到了 Elasticsearch Relevance Engine (ESRE) 才是 Elastic 未来。
ESRE 官方介绍如下:——Elasticsearch Relevance Engine 将 AI 的最佳实践与 Elastic 的文本搜索进行了结合。ESRE 为开发人员提供了一整套成熟的检索算法,并能够与大型语言模型 (LLM) 集成。借助ESRE,我们可以应用具有卓越相关性的开箱即用型语义搜索,与外部大型语言模型集成,实现混合搜索,并使用第三方或我们自己的模型。
ESRE 集成了高级相关性排序如 BM25f、强大的矢量数据库、自然语言处理技术、与第三方模型如 GPT-3 和 GPT-4 的集成,并支持开发者自定义模型与应用。其特点在于提供深度的语义搜索,与专业领域的数据整合,以及无缝的生成式 AI 整合,让开发者能够构建更吸引人、更准确的搜索体验。
在 Elasticsearch 8.9 版本上新了:Semantic search 语义检索功能,对官方文档熟悉的同学,你会发现如下截图内容,早期版本是没有的。
https://www.elastic.co/guide/en/elasticsearch/reference/8.9/semantic-search.html
语义搜索不是根据搜索词进行字面匹配,而是根据搜索查询的意图和上下文含义来检索结果。
更进一步讲:语义搜索不仅仅是匹配你输入的关键字,而是试图理解你的真正意图,给你带来更准确、更有上下文的搜索结果。简单来说,如果你在英国搜索“football”,系统知道你可能想要搜橄榄球,而不是足球(在美国 football 是足球)。
这种智能搜索方式,得益于强大的文本向量化等技术背景,使我们的在线搜索体验更加直观、方便和满意。
为了更清楚的解释由向量检索实现的文本检索——语义检索,这里给个动画演示一下。
动画来自:Elasticsearch 官方文档
视频刚开始,在文本里检索 connection speed requirement, 这点属于早期的倒排索引检索方式,或者叫全文检索中的短语 match_phrase 检索匹配 或者分词 match 检索匹配。这种可以得到结果。
但是,中后半段视频显示,要是咱们要检索:“How fast should my internet be” 怎么办?
其实这里转换为向量检索,fast 和 speed 语义相近,should be 和 required、needs 语义相近,internet 和 connection、wifi 语义相近。所以依然能召回结果。
这突破了传统同义词的限制,体现了语义检索的妙处!
更进一步,我们给出语义检索和传统分词检索的区别,以期望大家更好的理解语义搜索。
| 项目 | 语义搜索 | 传统分词搜索 |
|---|---|---|
| 核心技术 | 基于矢量搜索,机器学习和人工智能 | 基于文本匹配和查询扩展 |
| 搜索目的 | 理解查询的深层意义和上下文 | 直接匹配关键词或扩展的词汇 |
| 处理上下文 | 能够根据搜索者的地理位置、搜索历史等信息调整结果 | 通常不考虑这些额外的上下文信息 |
| 搜索结果的相关性 | 根据查询的意图和上下文排名结果 | 主要基于关键词的频率和位置匹配 |
| 处理同义词和多义词 | 能够理解词语在不同上下文中的意义,并据此返回结果 | 通常使用同义词表或词汇扩展工具,可能不总是理解上下文中的真正意义 |
| 对查询的理解 | 能够区分如“chocolate milk”和“milk chocolate”这样的查询,即使关键词顺序或形式相同 | 可能只是简单地匹配关键词,而不理解它们的真正意思 |
| 学习和适应能力 | 通过机器学习不断改进,根据用户的反馈和行为适应 | 通常基于固定的算法和规则,没有持续学习和适应的能力 |
| 用户体验 | 提供更准确和有上下文的结果,从而提高用户满意度 | 依赖于用户精确输入,可能返回与用户实际意图不匹配的结果 |
总体而言,深度学习集成已经成为Elasticsearch向量检索能力的有力补充,促使它在搜索和分析领域的地位更加牢固,同时也为未来的发展提供了广阔的空间。
6.小结
Elasticsearch 的向量检索从最初的简单实现发展到现在的高效、多功能解决方案,反映了现代搜索和推荐系统的需求和挑战。随着技术的不断演进,我们可以期待Elasticsearch在向量检索方面将继续推动创新和卓越。
说一下最近的感触,向量检索、大模型等新技术的出现有种感觉“学不完,根本学不完”,并且很容易限于“皮毛论”(我自创的词)——所有技术都了解一点点,但经不起提问;浅了说,貌似啥都懂,深了说,一问三不知。
这种情况怎么办?我目前的方法是:以实践为目的去深入理解理论,必要时理解算法,然后不定期将所看、所思、所想梳理成文,以备忘和知识体系化。这个过程很慢、很累,但我相信时间越长、价值越大。
欢迎大家就向量检索等问题进行留言讨论交流,你的问题很可能就是下一次文章的主题哦!
7、参考
1、https://www.elastic.co/cn/blog/text-similarity-search-with-vectors-in-elasticsearch
2、https://www.elastic.co/guide/en/elasticsearch/reference/7.3/query-dsl-script-score-query.html#vector-functions-cosine
3、https://zhuanlan.zhihu.com/p/552249981
4、https://www.elastic.co/cn/what-is/elasticsearch-machine-learning
5、https://www.elastic.co/cn/enterprise-search/generative-ai
6、https://www.elastic.co/cn/blog/may-2023-launch-announcement
7、https://www.analyticsvidhya.com/blog/2022/10/most-frequently-asked-interview-questions-on-knn-algorithm/
8、https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html
9、https://www.elastic.co/cn/blog/how-to-deploy-nlp-text-embeddings-and-vector-search
10、https://www.elastic.co/cn/blog/privacy-first-ai-search-langchain-elasticsearch
11、https://www.youtube.com/watch?v=W_ZUUDJsUtA
推荐阅读
全网首发!从 0 到 1 Elasticsearch 8.X 通关视频
重磅 | 死磕 Elasticsearch 8.X 方法论认知清单
如何系统的学习 Elasticsearch ?
2023,做点事
视频 | Elasticsearch 8.X 企业内训之最佳实践10 讲
Elasticsearch 8.X “图搜图”实战
高维向量搜索:在 Elasticsearch 8.X 中利用 dense_vector 的实战探索

更短时间更快习得更多干货!
和全球 近2000+ Elastic 爱好者一起精进!

大模型时代,抢先一步学习进阶干货!
相关文章:
干货 | 详述 Elasticsearch 向量检索发展史
1. 引言 向量检索已经成为现代搜索和推荐系统的核心组件。 通过将复杂的对象(例如文本、图像或声音)转换为数值向量,并在多维空间中进行相似性搜索,它能够实现高效的查询匹配和推荐。 图片来自:向量数据库技术鉴赏【上…...
mysql常见面试题,高频题目放送
互联网的产品架构是包含这接入层,逻辑处理以及储存层的,其中储存层承载着较多的数据以及持久化的任务,而说到储存层,避免不了说到数据库,在我们面试的时候,数据库的知识题目占比是非常多的: 1.…...
使用 PowerShell 将 Excel 中的每个工作表单独另存为独立的文件
导语:在日常工作中,我们经常需要处理 Excel 文件。本文介绍了如何使用 PowerShell 脚本将一个 Excel 文件中的每个工作表单独另存为独立的 Excel 文件,以提高工作效率。 1. 准备工作 在开始之前,请确保已经安装了 Microsoft Exc…...
python提取pdf图片
import fitz import re import osdef save_pdf_img(path, save_path):path: pdf的路径save_path : 图片存储的路径# 使用正则表达式来查找图片checkXO r"/Type(? */XObject)"checkIM r"/Subtype(? */Image)"# 打开pdfdoc fitz.open(path)# 图片计数im…...
Vue3 表单输入绑定简单应用
去官网学习→表单输入绑定 | Vue.js 运行示例: 代码:HelloWorld.vue <template><div class"hello"><h1>Vue 表单输入绑定</h1><input type"text" placeholder"输入框" v-model"msg"…...
如何解决 Elasticsearch 查询缓慢的问题以获得更好的用户体验
作者:Philipp Kahr Elasticsearch Service 用户的重要注意事项:目前,本文中描述的 Kibana 设置更改仅限于 Cloud 控制台,如果没有我们支持团队的手动干预,则无法进行配置。 我们的工程团队正在努力消除对这些设置的限制…...
近期学习练习
练习: 或: //sqrt是数学库函数,开平方 //头文件为math.h 或...
平台安全之中间件安全
理解中间件 一次web访问的顺序,web浏览器->web服务器(狭义)->web容器->应用服务器->数据库服务器 web服务器 广义:提供广义web服务的软件或主机 狭义:提供w3服务的软件或主机,即Web服务器软件…...
芒果 TV 基于 Flink 的实时数仓建设实践
公司简介:芒果 TV 作为湖南广电旗下互联网视频平台,在“一云多屏,多元一体”的战略指导下,通过内容自制,培植核心竞争力,从独播、独特走向独创,并通过市场化运作完成 A 轮、B 轮融资,…...
尚硅谷大数据项目《在线教育之采集系统》笔记004
视频地址:尚硅谷大数据项目《在线教育之采集系统》_哔哩哔哩_bilibili 目录 P047 P048 P049 P050 P051 P052 P053 P054 P055 P056 P047 /opt/module/datax/job/base_province.json [atguigunode001 ~]$ hadoop fs -mkdir /base_province/2022-02-22 [atgu…...
R语言4_安装BayesSpace
环境Ubuntu22/20, R4.1 你可能会报错说你的R语言版本没有这个库,但其实不然。这是一个在Bioconductor上的库。 同时我也碰到了这个问题,ERROR: configuration failed for package systemfonts’等诸多类似问题,下面的方法可以一并解决。 第…...
TSINGSEE青犀视频安防监控视频平台EasyCVR设备在线,视频无法播放的原因排查
可支持国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等多种协议接入的安防监控视频平台EasyCVR基于云边端一体化架构,具有强大的数据接入、处理及分发能力,可在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、…...
【算法篇C++实现】算法的时间、空间复杂度
文章目录 🚀一、算法的概念🚀二、算法的特征1.可行性2.确定性3.有穷性4.输入5.输出 🚀三、算法的评价1.正确性2.可读性3.健壮性 🚀四、算法的复杂度⛳(一)时间复杂度1、时间复杂度的概念2、大O的渐进表示法…...
On Evaluation of Embodied Navigation Agents 论文阅读
论文信息 题目:On Evaluation of Embodied Navigation Agents 作者:Peter Anderson,Angel Chang 来源:arXiv 时间:2018 Abstract 过去两年,导航方面的创造性工作激增。这种创造性的输出产生了大量有时不…...
【CSS 布局】水平垂直方向居中
【CSS 布局】水平垂直方向居中 单行元素 <div class"container"><div class"item"></div> </div>方式一:relative 和 absolute .container {position: relative;height: 400px;border: 1px solid #ccc;.item {posit…...
Java实现轻量型Web服务器接收http协议提交的RFID读卡信息
示例使用的读卡器:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSock…...
模拟实现消息队列项目(完结) -- 基于MQ的生产者消费者模型
目录 前言 1. 生产者 2. 消费者 3. 启动消息队列服务器 4. 运行效果 结语 前言 在上一章节,我们完成了消息队列的客户端部分,至此我们整个消息队列项目就构建完成了,那我们做的这个消息队列到底有什么效果,以及如何去使用我们自己的消息队列呢?那么本文,就将我们的MQ进行实战操…...
专业商城财务一体化-线上商城+进销存管理软件,批发零售全行业免费更新
订货流程繁琐?订单处理效率低?小程序商城与进销存系统不打通?数据需要手动输入同步?财务与的结算对账需要大量手工处理?零售批发从业者,如何你也有以上烦恼,可以看看进销存小程序订货商城&#…...
深度思考mysql面经
推荐 1 索引下推 Mysql性能优化:什么是索引下推? 1.1 定义 索引下推(Index Condition Pushdown,简称 ICP)是一种数据库优化技术。在传统的数据库查询中,数据库首先使用索引检索来找到符合索引条件的行&…...
2023-08-09力扣每日一题
链接: 1281. 整数的各位积和之差 题意: 十进制每一位的积减去每一位的和 解: 十进制位处理 实际代码: #include<iostream> using namespace std; int subtractProductAndSum(int n) {int t11,t20;while(n){t1*n%10;t…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
