掌握 ElasticSearch的 _source 过滤
掌握 ElasticSearch的 _source 过滤
- 1. 引言
- 2. `_source` 元数据基础
- 2.1 什么是 `_source` 字段?
- 2.2 `_source` 的基本用法
- 3. 禁用 `_source`
- 3.1 如何禁用 `_source` 字段
- 3.2 禁用 `_source` 的利弊
- 3.3 最佳实践建议
- 4. `_source` 数据源过滤
- 4.1 为什么需要数据源过滤?
- 4.2 两种过滤方式
- 4.2.1 在 Mapping 中定义(不推荐)
- 4.2.2 在 `_search` 请求中定义(推荐)
- 5. `_source` 过滤的最佳实践和注意事项
- 6. 总结
1. 引言
Elasticsearch 是一款强大的分布式搜索和分析引擎,其核心功能之一就是 _search
API。_search
API 允许用户执行复杂的查询,并从 Elasticsearch 索引中检索匹配的文档。在搜索结果中,有一个名为 _source
的特殊字段,它包含了索引文档时的原始 JSON 数据。
_source
元数据在 Elasticsearch 中扮演着重要的角色,它不仅决定了搜索结果的呈现方式,还影响着更新、重建索引等操作。本文档将深入探讨 Elasticsearch 7.10 版本中 _search
API 的 _source
元数据,包括其基本概念、用法、禁用、过滤以及最佳实践。
2. _source
元数据基础
2.1 什么是 _source
字段?
在 Elasticsearch 中,当你索引一个文档时,原始的 JSON 数据会被存储在一个名为 _source
的特殊字段中。默认情况下,_source
字段是启用的,这意味着 Elasticsearch 会完整地保存你提供的 JSON 文档。
在搜索结果中,_source
字段的内容会直接返回,让你能够看到索引文档的原始数据。这对于数据的呈现、调试以及后续处理都非常重要。
2.2 _source
的基本用法
要通过 _search
API 获取 _source
数据,你只需要发起一个正常的搜索请求。ElasticSearch 默认会返回 _source
字段。
示例:
假设我们有一个名为 products
的索引,现在我们插入一条文档数据:
PUT /products/_doc/1
{"name": "高性能笔记本电脑","price": 8999.99,"description": "这是一款高性能的笔记本电脑,配备了最新的处理器和显卡。","tags": ["电脑", "笔记本", "高性能"]
}
然后,我们执行一个简单的搜索请求,查询所有文档:
GET /products/_search
{"query": {"match_all": {}}
}
ElasticSearch 的响应结果如下:
{"took" : 2,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "products","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"name" : "高性能笔记本电脑","price" : 8999.99,"description" : "这是一款高性能的笔记本电脑,配备了最新的处理器和显卡。","tags" : ["电脑","笔记本","高性能"]}}]}
}
可以看到,_source
字段包含了我们索引文档时提供的完整 JSON 数据。
3. 禁用 _source
虽然 _source
字段非常有用,但在某些特殊情况下,你可能会考虑禁用它。
3.1 如何禁用 _source
字段
要禁用 _source
字段,你需要在创建索引的 Mapping 中进行设置。具体来说,就是在 _source
字段的配置中,将 enabled
属性设置为 false
。
示例:
创建一个名为 products_no_source
的索引,并在其 Mapping 中禁用 _source
字段:
PUT /products_no_source
{"mappings": {"_source": {"enabled": false}}
}
现在,我们尝试向这个索引中插入一个文档:
PUT /products_no_source/_doc/1
{"name": "测试商品","price": 100
}
然后,我们执行一个搜索请求:
GET /products_no_source/_search
{"query": {"match_all": {}}
}
你会发现,响应结果中不再包含 _source
字段:
{"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "products_no_source","_type": "_doc","_id": "1","_score": 1.0// 注意:这里没有 _source 字段}]}
}
3.2 禁用 _source
的利弊
禁用 _source
字段可以带来一些好处,但也伴随着一系列的限制。
-
好处:
- 节省存储空间:
_source
字段存储了原始的 JSON 文档,如果文档很大,禁用它可以显著减少索引的存储空间占用。
- 节省存储空间:
-
坏处:
- 不支持
update
、update_by_query
和reindex
API: 这些 API 都依赖于_source
字段来获取文档的原始内容。如果禁用了_source
,这些 API 将无法使用。 - 不支持高亮显示: ElasticSearch 的高亮功能也依赖于
_source
字段。 - 无法进行 reindex、更改 mapping 或升级版本: 这些操作都需要访问原始文档数据。
- 无法调试查询或聚合: 如果没有
_source
字段,你将无法查看索引时使用的原始文档,这会给查询和聚合的调试带来困难。
- 不支持
3.3 最佳实践建议
基于以上利弊分析,通常情况下不推荐禁用 _source
字段。_source
带来的便利性和功能性远远超过了它所占用的存储空间。
如果你仅仅是为了节省磁盘空间,更好的做法是优化你的数据模型,或者使用 Elasticsearch 的索引压缩功能。索引压缩可以在不牺牲功能的前提下,有效地减少存储空间占用。
4. _source
数据源过滤
即使你选择保留 _source
字段(通常也是推荐的做法),你仍然可以通过 _source
过滤来控制搜索结果中返回哪些字段,或者不返回哪些字段。
4.1 为什么需要数据源过滤?
_source
过滤主要有以下几个好处:
- 减少网络传输开销: 如果文档很大,只返回需要的字段可以显著减少网络传输的数据量,提高响应速度。
- 提高响应速度: ElasticSearch 不需要处理和返回整个
_source
字段,可以更快地构建响应结果。 - 保护敏感信息: 你可以选择不返回包含敏感信息的字段,例如密码、密钥等。
4.2 两种过滤方式
ElasticSearch 提供了两种方式来进行 _source
过滤:
- 在 Mapping 中定义(不推荐)
- 在
_search
请求中定义(推荐)
4.2.1 在 Mapping 中定义(不推荐)
你可以在创建索引的 Mapping 中,通过 includes
和 excludes
参数来指定 _source
字段中包含或排除哪些字段。
includes
:指定要包含的字段,支持通配符。excludes
:指定要排除的字段,支持通配符。
示例:
创建一个名为 products_filtered_mapping
的索引,并在其 Mapping 中定义 _source
过滤规则:
PUT /products_filtered_mapping
{"mappings": {"_source": {"includes": ["name","price"],"excludes": ["desc*","tags"]}}
}
我们向索引中插入测试文档:
PUT /products_filtered_mapping/_doc/1
{"name": "测试商品","price": 100,"desc": "一个描述","description": "详细的描述信息","tags":["tag1","tag2"]
}
执行一个搜索请求:
GET /products_filtered_mapping/_search
可以发现,在返回结果中只包含name
和price
字段。
{"took" : 0,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "products_filtered_mapping","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"name" : "测试商品","price" : 100}}]}
}
缺点:
这种方式最大的问题在于 Mapping 一旦创建就无法修改。这意味着你无法灵活地调整 _source
过滤规则,除非重建索引。因此,通常不推荐这种方式。
4.2.2 在 _search
请求中定义(推荐)
更灵活的做法是在 _search
请求中直接指定 _source
过滤规则。这样,你可以根据不同的查询需求,动态地控制返回的字段。
示例:
我们已经有有一个名为 products
的索引。
- 1. 返回特定字段:
GET /products/_search
{"_source": ["name", "price"],"query": {"match_all": {}}
}
这个请求只返回 name
和 price
字段。
- 2. 排除特定字段:
GET /products/_search
{"_source": {"excludes": ["description", "tags"]},"query": {"match_all": {}}
}
这个请求排除了 description
和 tags
字段。
- 3. 使用通配符:
GET /products/_search
{"_source": "name*","query": {"match_all": {}}
}
这个请求返回所有以 name
开头的字段。
- 4.禁用_source
GET /products/_search
{"query":{"match_all": {}},"_source": false
}
- 5. 组合
includes
和excludes
:
GET /products/_search
{"_source": {"includes": ["name","price"],"excludes": ["*.description" // 排除所有以 .description 结尾的字段]},"query": {"match_all": {}}
}
这个请求返回 name
和 price
字段,但排除了所有以 .description
结尾的字段。
5. _source
过滤的最佳实践和注意事项
excludes
不代表不能通过该字段检索: 即使你在_source
中排除了某个字段,这并不意味着你不能通过该字段进行搜索或过滤。_source
过滤只影响搜索结果的返回内容,不影响索引的构建和查询的执行。- 灵活使用通配符: 通配符可以帮助你更简洁地定义过滤规则,但也需要注意通配符的性能影响。过多的通配符可能会导致 Elasticsearch 需要遍历更多的字段。
_source
过滤对性能的影响: 虽然_source
过滤通常可以提高响应速度,因为减少数据传输。但是如果过滤规则过于复杂,可能会增加ES的处理时间。通常情况下,这种影响较小。- 在安全性和性能之间取得平衡: 如果你的文档包含敏感信息,务必使用
_source
过滤来保护这些信息。但同时也要注意,不要过度过滤,以免影响查询的灵活性和性能。 - 结合其他
_search
参数:_source
过滤可以与其他_search
API 参数(例如query
、sort
、from
、size
等)结合使用,实现更精细的查询控制。
6. 总结
_source
元数据是 Elasticsearch 中一个非常重要的概念,它存储了索引文档的原始 JSON 数据。虽然在某些极端情况下可以禁用 _source
,但通常情况下,保留 _source
并利用其提供的过滤功能是最佳选择。
通过 _source
过滤,你可以灵活地控制搜索结果中返回的字段,减少网络传输开销,提高响应速度,并保护敏感信息。
在实际应用中,建议:
- 优先保留
_source
字段。 - 在
_search
请求中定义_source
过滤规则,而不是在 Mapping 中定义。 - 灵活使用
includes
、excludes
和通配符。 - 在安全性和性能之间取得平衡。
相关文章:
掌握 ElasticSearch的 _source 过滤
掌握 ElasticSearch的 _source 过滤 1. 引言2. _source 元数据基础2.1 什么是 _source 字段?2.2 _source 的基本用法 3. 禁用 _source3.1 如何禁用 _source 字段3.2 禁用 _source 的利弊3.3 最佳实践建议 4. _source 数据源过滤4.1 为什么需要数据源过滤?…...
车载音频配置(二)
目录 OEM 自定义的车载音频上下文 动态音频区配置 向前兼容性 Android 14 车载音频配置 在 Android 14 中,AAOS 引入了 OEM 插件服务,使你可以更主动地管理由车载音频服务监督的音频行为。 随着新的插件服务的引入,车载音频配置文件中添加了以下更改: • OEM 自定义的车…...
开目3DCAPP系列:三维制造成本分析与估算软件3DDFC
开目3DDFC 是一款基于 MBD 模型和工艺知识库的专业三维制造成本分析与估算软件,在不依赖详细工艺路线的情况下,根据零件几何信息和精度信息一键式完成零件成本的分析与估算,为面向成本的设计优化提供参考指引,也为企业对外产品报价…...
化学品安全数据表(MSDS)的全面解析与实用指南
SDS(安全数据表),也称为MSDS(材料安全数据表),是用于详细说明化学品的理化特性(如pH值、闪点、易燃性、反应活性等)及其对使用者健康(如致癌、致畸等)潜在危害…...
赛前启航 | Azure 应用开发实战指南:开启创意的无限可能
在 AI 时代,如何高效构建、优化和部署你的应用?如何充分利用微软 Azure 的强大能力,让开发更敏捷,性能更卓越?2 月 21 日 14:00-16:00,微软 AI 开发者挑战赛赛前指导第二场直播,带你全方位掌握 …...
Visual Studio Code的下载安装与汉化
1.下载安装 Visual Studio Code的下载安装十分简单,在本电脑的应用商店直接下载安装----注意这是社区版-----一般社区版就足够用了---另外注意更改安装地址 2.下载插件 重启后就是中文版本了...
home assistant ddns动态域名解析插件
home assistant ddns动态域名解析插件 使用方法 在HACS中搜索 ddns安装(hacs目前还没有合并我的提交,目前不可用),或者 clone https://github.com/weiangongsi/ddns.git, 将 custom_components/ddns目录拷贝至 Home Assistant 配置目录的 custom_compon…...
金融交易算法单介绍
0.背景 股票交易时,常见的订单类型有基础订单和条件订单。 基础订单 市价单限价单碎股单等等 条件订单 止损市价单止损限价单触及市价单(止盈)触及限价单(止盈)跟踪止损市价单跟踪止损限价单等等 除了基础订单和…...
LabVIEW利用CANopen的Batch SDO写入
本示例展示了如何通过CANopen协议向设备写入Batch SDO(批量服务数据对象)。Batch SDO允许用户在一次操作中配置多个参数,适用于设备的批量配置和参数设置。此方法能够简化多个参数的写入过程,提高设备管理效率。 主要步骤…...
正式页面开发-登录注册页面
整体路由设计: 登录和注册的切换是切换组件或者是切换内容(v-if和 v-else),因为点击两个之间路径是没有变化的。也就是登录和注册共用同一个路由。登录是独立的一级路由。登录之后进到首页,有三个大模块:文章分类&…...
vLLM专题(二):安装-CPU
vLLM 是一个 Python 库,支持以下 CPU 变体。选择您的 CPU 类型以查看供应商特定的说明: Intel/AMD x86 vLLM 最初支持在 x86 CPU 平台上进行基本模型推理和服务,支持的数据类型包括 FP32、FP16 和 BF16。 注意 此设备没有预构建的 wheel 包或镜像,因此您必须从源代码构建 v…...
【CSS进阶】常见的页面自适应的方法
在前端开发中,自适应布局(Responsive Design)是一种让网页能够适应不同屏幕尺寸、设备和分辨率的技术。常见的自适应布局方法包括 流式布局、弹性布局(Flexbox)、栅格布局(Grid)、媒体查询&…...
Java编程语言:从基础到高级应用的全面探索
在当今的软件开发领域中,Java无疑是一种极为流行且强大的编程语言。自1995年由Sun Microsystems推出以来,Java凭借其跨平台性、面向对象特性和丰富的API库,迅速成为企业级应用开发的首选语言。本文将带您从Java的基础语法入手,逐步…...
计算机视觉:神经网络实战之手势识别(附代码)
第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络(附代码) 第五章࿱…...
linux 面试题
1. 文件与目录操作 ls 功能:列出目录内容 常用参数: -l:长格式显示(权限、大小、时间等)-a:显示隐藏文件(以.开头的文件)-h:以易读格式显示文件大小(如KB/…...
利用websocket检测网络连接稳定性
浏览器中打开F12,控制台中输入以下内容 > 回车 > 等待结果 连接关闭 表示断网 let reconnectDelay 1000; // 初始重连间隔 let pingInterval null; let socketManuallyClosed false; // 标志是否手动关闭function createWebSocket() {if (socketManuallyCl…...
Go入门之数组与切片
var arr1 [...]int{1, 2, 3}fmt.Println(len(arr1)) 数组长度不能扩展 var arr2 [...]int{0: 100, 5: 101}fmt.Println(len(arr2)) } 指定索引初始化 可以通过for和range遍历 值类型:基本数据类型和数组都是值类型,改变副本的值不会改变本身的值 切片为引用数…...
《Nuxt.js 实战:从放弃到入门》六、打造个性化文字转图片工具
在当今短视频的时代,将文字转化为图片是一个常见且实用的需求,无论是用于社交媒体分享、设计宣传材料,还是制作个性化的视觉内容。今天,我们就来深入剖析一个使用 Vue 3 和 ElementPlus 构建的文字转图片工具的代码…...
软硬链接?
目录 1. 硬链接(Hard Link) 2. 软链接(Symbolic Link,符号链接) 总结: 1. 硬链接(Hard Link) 定义: 硬链接是直接指向文件数据块(inode)的链接。…...
轻松搭建本地大语言模型(二)Open-WebUI安装与使用
文章目录 前置条件目标一、安装 Open-WebUI使用 Docker 部署 二、使用 Open-WebUI(一)访问Open-WebUI(二)注册账号(三)模型选择(四)交互 四、常见问题(一)容器…...
windows Redis Insight 如何查看宝塔docker里的redis数据
1、ping 命令用于测试网络连通性,它只需要目标 IP 地址作为参数,不需要端口号。正确的命令如下: ping 公网地址2、使用 Telnet 测试端口连通性 telnet 公网地址 端口 telnet 47.108.67.228 6379如果连接成功,窗口会变为空白&am…...
Python高级语法之urllib
目录: 1、爬虫的介绍2、urllib的使用2.1、urllib的异常捕获2.2、urllib的实现微博cookie登陆2.3、urllib的handler处理器2.4、urllib的代理服务器2.5、urllib的代理服务池 1、爬虫的介绍 2、urllib的使用 2.1、urllib的异常捕获 2.2、urllib的实现微博cookie登陆 2…...
word$deepseep
1、进入官网地址。 DeepSeek 2、进入DeepSeek的API文档 3、点击DeepSeek开放平台左侧的“API Keys”, 再点击“创建API Key” 4、在弹出的对话框中,输入自己的API Key名称,点击创建。 sk-0385cad5e19346a0a4ac8b7f0d7be428 5、打开Word文档。 6、Word找…...
【koa】05-koa+mysql实现数据库集成:连接和增删改查
前言 前面我们已经介绍了第二阶段的第1-4点内容,本篇介绍第5点内容:数据库集成(koamysql) 也是第二阶段内容的完结。 一、学习目标 在koa项目中正常连接数据库,对数据表进行增删改查的操作。 二、操作步骤 本篇文章…...
【深度学习】分布偏移纠正
分布偏移纠正 正如我们所讨论的,在许多情况下训练和测试分布 P ( x , y ) P(\mathbf{x}, y) P(x,y)是不同的。 在一些情况下,我们很幸运,不管协变量、标签或概念如何发生偏移,模型都能正常工作。 在另一些情况下,我们…...
数据结构_前言
本次我们将进入一个新的阶段啦~ 要注意哦: 在学数据结构之前,我们要先掌握c语言中所学的指针、结构体、内存的存储这几部分,如果还没太掌握的话,那记得去复习回顾一下噢。 下面我们就一起进入数据结构的学习吧! 知识…...
spark任务运行
运行环境 在这里插入代码片 [roothadoop000 conf]# java -version java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01)[roothadoop000 conf]# echo $JAVA_HOME /home/hadoop/app/jdk1.8.0_144[roothadoop000 conf]# vi spark-env.sh …...
由because it is a JDK dynamic proxy that implements温习Spring的代理
由because it is a JDK dynamic proxy that implements温习Spring的代理 项目场景原因分析1、报错位置2、错误原因3、业务需求 解决方案1、注入CGlib代理2、取出原生对象 项目场景 昨日在启动一个SpringBoot项目时,发现启动失败,并在日志中出现了这样的…...
mac相关命令
显示和隐藏usr等隐藏文件文件 terminal输入: defaults write com.apple.Finder AppleShowAllFiles YESdefaults write com.apple.Finder AppleShowAllFiles NO让.bashrc每次启动shell自动生效 编辑vim ~/.bash_profile 文件, 加上 if [ -f ~/.bashrc ]; then. ~/.bashrc fi注…...
Banana Pi OpenWRT One 官方路由器的第一印象
OpenWRT One是OpenWRT开源社区推出的首款官方开发板,与Banana Pi社区共同设计,由Banana Pi制造和发行。路由器采用蓝色铝合金外壳,质感极佳,视觉效果远超宣传图。整体设计简洁,呈长方形,虽然不是特别时尚&a…...
基于SpringBoot的“高考志愿智能推荐系统”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“高考志愿智能推荐系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统首页界面 系统注册页…...
探索Hugging Face:开源AI社区的核心工具与应用实践
引言:AI民主化的先锋 在自然语言处理(NLP)领域,Hugging Face已成为开源社区的代名词。这个成立于2016年的平台,通过提供易用的工具和丰富的预训练模型库,彻底改变了开发者使用和部署AI模型的方式。截至202…...
SVM对偶问题
1、对偶问题数学基础 对偶问题:在线性规划中,每一个线性规划问题(称为原问题)都有一个与之对应的对偶问题。从数学形式上看,如果原问题是求解一个线性目标函数的最大值(或最小值),在满足一系列线性不等式&…...
萃取的实现(三)
探测成员 基于SFINAE,判断一个给定类型T,是否含有名为x的成员。 探测类型成员 判断一个给定类型T,是否含有类型成员size_type,源码如下: #include <type_traits> #include <iostream> #include <vect…...
nodejs版本管理,使用 nvm 删除node版本,要删除 Node.js 的某个版本详细操作
要删除 Node.js 的某个版本并保持 Node Version Manager (nvm) 的管理整洁,可以按以下步骤操作: 步骤 1:查看已安装的 Node.js 版本 nvm ls这会列出你通过 nvm 安装的所有 Node.js 版本。输出类似于: -> v18.17.1v16.20…...
openCV中如何实现滤波
图像滤波用于去除噪声和图像平滑,OpenCV 提供了多种滤波器: 1.1. 均值滤波: import cv2# 读取图像 image cv2.imread("example.jpg")# 均值滤波 blurred_image cv2.blur(image, (5, 5)) # (5, 5) 是滤波核的大小 滤波核大小的…...
vscode通过ssh连接服务器实现免密登录+删除
文章目录 参考: 1、 vscode通过ssh连接服务器实现免密登录删除(吐血总结)...
智能硬件新时代,EasyRTC开启物联音视频新纪元
在万物互联的时代浪潮中,智能硬件正以前所未有的速度融入我们的生活,从智能家居的便捷控制,到智能穿戴设备的健康监测,再到工业物联网的高效管理,智能硬件的应用场景不断拓展。而在这个智能硬件蓬勃发展的背后…...
《机器学习数学基础》补充资料:求解线性方程组的克拉默法则
《机器学习数学基础》中并没有将解线性方程组作为重点,只是在第2章2.4.2节做了比较完整的概述。这是因为,如果用程序求解线性方程组,相对于高等数学教材中强调的手工求解,要简单得多了。 本文是关于线性方程组的拓展,供…...
mysql的rpm包安装
(如果之前下载过mariadb,使用yum remove mariadb卸载,因为mariadb与rpm包安装的mysql有很多相似的组件和文件,会发生冲突,而源码包安装的mysql不会,所以不用删除源码包安装myqsl,只删除mariadb就可以&#…...
TailwindCss的vue3安装使用
按照官网的安装教程,属性最后无法生效,这是自我改良版,添加了额外步骤,但是每次引入新的tailwindcss属性 需要重新跑一次项目 npm下载tailwindcss npm install -D tailwindcss npx初始化tailwind配置 npx tailwindcss init 此时根…...
foobar2000设置DSP使用教程及软件推荐
foobar2000安卓中文版:一款高品质手机音频播放器 foobar2000安卓中文版是一款备受好评的高品质手机音频播放器。 几乎支持所有的音频格式,包括 MP3、MP4、AAC、CD 音频等。不论是经典老歌还是最新的流行音乐,foobar2000都能完美播放。除此之…...
开源多商户商城源码最新版_适配微信小程序+H5+APP+PC多端
在数字化时代,电子商务已经成为各行业不可或缺的一部分,开源多商户商城源码为中小企业和个人开发者提供了快速搭建和定制电商平台的利器。分享一款最新版的开源多商户商城源码,它能够适配微信小程序、H5、APP和PC等多个端口,满足商…...
【matlab】大小键盘对应的Kbname
matlab中可以通过Kbname来识别键盘上的键。在写范式的时候,遇到一个问题,我想用大键盘上排成一行的数字按键评分,比如 Kbname(1) 表示键盘上的数字1,但是这种写法只能识别小键盘上的数字,无法达到我的目的,…...
go语言并发的最佳实践
Go 语言的并发模型是其最强大的特性之一,基于 CSP(Communicating Sequential Processes)理论,通过 goroutine 和 channel 实现轻量级并发. 一、并发核心概念 1. Goroutine 在 Go 语言中,Goroutine 是实现并发编程的…...
超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍
该资料包涵盖了DeepSeek模型的下载、安装、部署以及本地运行的详细指南,适合希望在本地环境中高效运行DeepSeek模型的用户。资料包不仅包括基础的安装步骤,还提供了68G多套独立部署视频教程教程,针对不同硬件配置的模型选择建议,以…...
重看Spring聚焦BeanDefinition分析和构造
目录 一、对BeanDefinition的理解 (一)理解元信息 (二)BeanDefinition理解分析 二、BeanDefinition的结构设计分析 (一)整体结构体会 (二)重要接口和类分析 三、构造 BeanDef…...
从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
一、前言 升级需求:将5.7.35升级到8.0.27, 升级方式 in-place升级【关闭现有版本MySQL,将二进制或包替换成新版本并在现有数据目录上启动MySQL并执行升级任务的方式,称为in-place升级】 原版本 5.7.35 CentOS Linux release 7.9.2009 新版本…...
Node-Red
是什么? ——基于浏览器的流程编辑工具可连接设备、服务器和API应用 一、安装 1、本地安装(Windows) 在电脑上安装 Node.js 环境,然后使用 NPM 安装 Node-RED Node.js介绍: JavaScript 在不同的位置有不一样的解析器 写入 HTML 的 JS 语言,浏览器即它的解析器需要独…...
GO语言的安装以及第一个Go语言程序
1. Go语言的安装与设置 官网:golang.org 国内下载:https://studygolang.com/dl 国内镜像:https://goproxy.cn/ 2. GOland的安装 Go 1.13 及以上(推荐) 打开你的终端并执行 $ go env -w GO111MODULEon $ go env -w GOPROXYhttps://goproxy.cn,direc…...