【实战ES】实战 Elasticsearch:快速上手与深度实践-3.2.3 案例:新闻搜索引擎的相关性优化
👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路
文章大纲
- Elasticsearch新闻搜索引擎相关性优化实战
- 3.2.3 案例:新闻搜索引擎的相关性优化
- 项目背景
- 1. 相关性问题诊断与分析
- 1.1 初始查询DSL示例
- 1.2 问题诊断矩阵
- 1.3 性能基线数据
- 2. 索引结构与字段权重优化
- 2.1 字段映射优化方案
- 2.2 字段权重调整策略
- 3. 时间衰减与语义增强方案
- 3.1 时间衰减函数配置
- 3.2 语义扩展方案
- 4. 查询结构重构与参数调优
- 4.1 优化后查询DSL
- 4.2 `BM25`参数调优
- 5. 效果验证与生产部署
- 5.1 `A/B`测试结果对比
- 5.2 性能指标变化
- 6. 监控体系与持续优化
- 6.1 监控指标矩阵
- 6.2 持续优化机制
- 关键结论与经验沉淀
- 优化效果总结
- 核心经验
- 附录:优化工具链
Elasticsearch新闻搜索引擎相关性优化实战
3.2.3 案例:新闻搜索引擎的相关性优化
项目背景
某主流新闻平台日均处理3.2亿次搜索请求,面临以下挑战:
- 数据特征:
6000万新闻文档,平均正文长度1200字,含多语言内容 - 用户痛点:
旧新闻过度出现在热点事件搜索结果中- 短标题新闻相关性得分异常
- 多字段组合查询准确率不足58%
- 业务目标:
CTR提升至25%+- 首屏结果准确率
>90% 平均搜索响应时间<800ms
1. 相关性问题诊断与分析
1.1 初始查询DSL示例
// 向 Elasticsearch 发送 GET 请求,目标是对 news 索引执行搜索操作GET /news/_search
{// query 部分用于定义具体的查询逻辑,是搜索请求的核心部分"query": {// multi_match 是一种查询类型,可在多个字段上执行匹配查询"multi_match": {// query 指定要搜索的文本内容,这里是搜索与“人工智能发展”相关的文档"query": "人工智能发展",// fields 指定要在哪些字段上进行搜索,使用数组形式列出多个字段"fields": [// title^3 表示在 title 字段上进行搜索,并且为该字段设置权重为 3// 意味着在 title 字段中匹配到的内容对文档相关性的贡献更大,会提升文档的排序"title^3",// content 表示在 content 字段上进行搜索,该字段默认权重为 1"content"]}}
}
title^3 表示 title 字段的权重为 3,也就是说在匹配时,title 字段中出现匹配词的文档会比 content 字段中出现匹配词的文档获得更高的相关性分数。
1.2 问题诊断矩阵
| 问题类型 | 典型表现 | 影响范围 | 根因分析 |
|---|---|---|---|
时间敏感性不足 | 3年前旧新闻占据Top5 | 78%查询 | 缺乏时间衰减因子 |
短文本过匹配 | 5字标题新闻得分高于千字深度报道 | 62%案例 | 长度归一化参数不当 |
语义理解缺失 | "苹果"优先匹配水果新闻 | 45%查询 | 缺乏同义词/语义扩展 |
字段权重失衡 | 正文匹配噪声过大 | 87%请求 | title权重配置不合理 |
- 时间衰减因子(Time Decay Function)
- 时间衰减因子的核心原理是构建一个基于时间的函数,该函数会依据文档的时间戳(如创建时间、更新时间),随着时间推移逐渐降低文档的权重。通常来说,文档越新,其权重越高;文档越旧,权重越低。
- 常见的衰减函数类型
线性衰减(Linear Decay):按照固定速率随时间降低权重。指数衰减(Exponential Decay):以指数形式快速降低权重。高斯衰减(Gaussian Decay):基于高斯分布来降低权重
- 作用和优势
- 突出近期数据:在新闻、社交媒体等场景中,近期的内容通常更有价值和关注度,使用时间衰减因子可以让近期的文档在搜索结果中排名更靠前。
- 反映数据时效性:在数据分析和统计中,给予近期数据更高的权重,能更准确地反映当前的趋势和情况。
1.3 性能基线数据
指标 | 初始值 | 目标值 |
|---|---|---|
| CTR | 18% | 28% |
| P@10 | 57% | 90% |
| 平均响应时间 | 1200ms | 750ms |
| 长尾查询准确率 | 32% | 65% |
- 在
Elasticsearch(ES)相关的评估中,P@10通常是指Precision at 10,即前 10 个搜索结果的精确率,它是信息检索领域常用的评估指标。精确率(Precision)衡量的是检索结果中相关文档的比例。P@10具体是指在检索系统返回的前 10 个搜索结果中,相关文档所占的比例。其计算公式为:

较高的 P@10值意味着搜索系统能够在靠前的位置展示更多相关的内容,从而提升用户体验。- 在
优化搜索算法、调整索引结构或尝试不同的查询方式时,通过比较不同设置下的 P@10 值,可以判断哪种策略或模型能够产生更相关的前 10 个搜索结果,进而选择更优的方案。
2. 索引结构与字段权重优化
2.1 字段映射优化方案
// 向 Elasticsearch 发送 PUT 请求,用于创建一个名为 news 的索引
PUT /news
{// mappings 用于定义索引中文档的字段类型和相关配置"mappings": {// properties 部分定义了索引中各个字段的具体设置"properties": {// title 字段用于存储新闻的标题"title": {// type 指定字段类型为 text,适用于存储较长的文本内容"type": "text",// analyzer 指定对该字段进行分词时使用的分析器,这里使用 ik_max_word 分析器// ik_max_word 是 IK 分词器的一种模式,会将文本尽可能地拆分成更多的词"analyzer": "ik_max_word",// fields 用于为字段创建多字段,每个子字段可以有不同的配置"fields": {// std 是 title 字段的子字段"std": {// type 指定子字段类型为 text"type": "text",// analyzer 指定对该子字段进行分词时使用的分析器,这里使用 standard 标准分析器// 标准分析器会根据通用规则对文本进行分词"analyzer": "standard"}}},// content 字段用于存储新闻的正文内容"content": {// type 指定字段类型为 text"type": "text",// analyzer 指定对该字段进行分词时使用的分析器,这里使用 ik_smart 分析器// ik_smart 是 IK 分词器的另一种模式,会进行更智能的分词,拆分出的词相对较少"analyzer": "ik_smart",// position_increment_gap 指定在数组类型的文本字段中,不同元素之间的位置增量间隔// 这里设置为 100,意味着在进行短语查询等操作时,不同元素之间的位置间隔为 100"position_increment_gap": 100},// publish_time 字段用于存储新闻的发布时间"publish_time": {// type 指定字段类型为 date,用于存储日期和时间信息"type": "date"},// entity_tags 字段用于存储新闻的实体标签,如人物、地点等标签"entity_tags": {// type 指定字段类型为 keyword,适用于存储不需要分词的精确值,如标签、ID 等"type": "keyword"}}}
}
2.2 字段权重调整策略
| 字段 | 初始权重 | 优化权重 | 调整依据 |
|---|---|---|---|
| title | 3 | 5 | 点击日志分析 |
| content | 1 | 0.8 | 文本长度归一化 |
| entity_tags | 0 | 2 | 实体识别准确率提升 |
| author | 0.5 | 1.2 | 权威作者权重增强 |
3. 时间衰减与语义增强方案
3.1 时间衰减函数配置
GET /news/_search
{// query 部分用于定义搜索的具体查询逻辑"query": {// function_score 是一种特殊的查询类型,允许我们根据自定义函数来修改文档的相关性得分"function_score": {// query 子句是基础查询,用于筛选出符合特定条件的文档// 这里的 ... 表示需要根据实际需求填写具体的查询条件,例如可以是 match 查询、term 查询等"query": { ... },// functions 是一个数组,包含一个或多个自定义的评分函数,用于调整文档的得分"functions": [{// exp 表示使用指数衰减函数来计算文档的得分"exp": {// publish_time 是文档中的日期字段,该函数将基于这个字段的值进行衰减计算"publish_time": {// scale 指定衰减的时间范围,这里设置为 30d 表示 30 天// 意味着在 30 天内,文档的得分会按照指数函数进行衰减"scale": "30d",// decay 表示衰减的程度,这里设置为 0.5// 即经过 30 天后,文档的得分会降低到原来的 0.5 倍"decay": 0.5}},// weight 是对当前函数计算出的得分进行加权,这里设置为 2// 意味着指数衰减函数计算出的得分会乘以 2"weight": 2}],// boost_mode 指定基础查询得分和函数得分的组合方式// 这里设置为 sum 表示将基础查询的得分和函数计算出的得分相加,得到最终的文档得分"boost_mode": "sum"}}
}
3.2 语义扩展方案
PUT /news/_settings{// analysis 部分用于配置索引的文本分析相关设置,包括分词器、过滤器等"analysis": {// filter 用于定义在文本分析过程中使用的过滤器,过滤器可以对分词后的词项进行修改、删除、替换等操作"filter": {// tech_synonyms 是自定义的过滤器名称,用于处理技术术语的同义词替换"tech_synonyms": {// type 指定过滤器的类型,这里使用 "synonym" 表示这是一个同义词过滤器"type": "synonym",// synonyms 是一个数组,用于定义具体的同义词规则"synonyms": [// 表示 "AI"、"人工智能" 和 "人工智慧" 这三个词互为同义词// 在文本分析时,遇到其中任何一个词,都会将其替换为其他同义词"AI, 人工智能, 人工智慧",// 表示 "ML"、"机器学习" 和 "機器學習" 这三个词互为同义词// 同样,在文本分析时会进行相应的替换"ML, 机器学习, 機器學習"]}},// analyzer 用于定义自定义的分析器,分析器由分词器和一系列过滤器组成,用于对文本进行分词和处理"analyzer": {// ik_smart_syno 是自定义的分析器名称"ik_smart_syno": {// type 指定分析器的类型,这里使用 "custom" 表示这是一个自定义分析器"type": "custom",// tokenizer 指定分析器使用的分词器,这里使用 "ik_smart"// ik_smart 是 IK 分词器的一种模式,会进行更智能的分词,拆分出的词相对较少"tokenizer": "ik_smart",// filter 是一个数组,指定分析器在分词后使用的过滤器// 这里使用前面定义的 "tech_synonyms" 过滤器,用于处理同义词替换"filter": ["tech_synonyms"]}}}
}
4. 查询结构重构与参数调优
4.1 优化后查询DSL
GET /news/_search{// query 部分定义了搜索的具体查询逻辑"query": {// bool 查询是一种组合查询,允许将多个子查询组合在一起,通过不同的逻辑关系来筛选文档"bool": {// must 子句中的查询条件必须被满足,文档才会被包含在搜索结果中"must": {// multi_match 查询用于在多个字段上进行匹配查询"multi_match": {// query 指定要搜索的文本内容,这里是搜索与“人工智能发展”相关的文档"query": "人工智能发展",// fields 指定要在哪些字段上进行搜索,使用数组形式列出多个字段"fields": [// title.std^5 表示在 title 字段的 std 子字段上进行搜索,并且为该字段设置权重为 5// 意味着在 title.std 字段中匹配到的内容对文档相关性的贡献更大,会提升文档的排序"title.std^5",// content^0.8 表示在 content 字段上进行搜索,该字段的权重为 0.8"content^0.8"],// type 指定 multi_match 查询的类型,这里使用 "best_fields"// best_fields 类型会在每个字段上分别执行查询,然后选择得分最高的字段的得分作为文档的最终得分"type": "best_fields",// tie_breaker 用于处理多个字段得分相同的情况// 当多个字段得分相同时,会将其他字段得分乘以 tie_breaker 的值后与最高得分相加,得到最终得分// 这里设置为 0.3"tie_breaker": 0.3}},// should 子句中的查询条件是可选的,如果文档满足其中一个或多个条件,会增加其相关性得分"should": [{// term 查询用于精确匹配字段的值// 这里是精确匹配 entity_tags 字段的值是否为 "AI""term": {"entity_tags": "AI"}},{// match 查询用于对字段进行全文匹配// 这里是匹配 author 字段中是否包含 "科技专栏""match": {"author": "科技专栏"}}],// filter 子句中的查询条件用于过滤文档,不影响文档的相关性得分"filter": [{// range 查询用于筛选字段值在某个范围内的文档// 这里是筛选 publish_time 字段的值大于等于当前时间减去 180 天(精确到天)的文档"range": {"publish_time": {"gte": "now-180d/d"}}}]}}
}
4.2 BM25参数调优
| 参数 | 默认值 | 优化值 | 调整效果 |
|---|---|---|---|
| k1 | 1.2 | 0.8 | 降低短文本过匹配 |
| b | 0.75 | 0.65 | 加强长度归一化 |
| boost_mode | sum | multiply | 增强时间因子影响力 |
5. 效果验证与生产部署
5.1 A/B测试结果对比
| 指标 | 对照组 | 实验组 | 提升幅度 |
|---|---|---|---|
| CTR | 18.2% | 27.8% | +52.7% |
| 首屏准确率 | 57.3% | 89.6% | +56.4% |
| 旧新闻出现率 | 34.7% | 6.2% | -82.1% |
长尾查询满意度 | 31.5% | 63.8% | +102.5% |
5.2 性能指标变化
指标 | 优化前 | 优化后 | 变化率 |
|---|---|---|---|
| 平均响应时间 | 1240ms | 730ms | -41.1% |
| 90%分位延迟 | 2400ms | 1350ms | -43.8% |
CPU利用率 | 82% | 68% | -17.1% |
GC停顿时间 | 4.2s/m | 2.1s/m | -50% |
6. 监控体系与持续优化
6.1 监控指标矩阵
| 指标类型 | 监控项 | 报警阈值 | 优化动作 |
|---|---|---|---|
| 相关性指标 | CTR波动 | ±5%持续2小时 | 触发相关性复盘 |
| 性能指标 | P99延迟 | >1200ms | 查询结构优化 |
| 业务指标 | 用户搜索退出率 | >25% | 语义模型更新 |
| 系统指标 | JVM Old GC频率 | >5次/分钟 | 堆内存扩容 |
6.2 持续优化机制
关键结论与经验沉淀
优化效果总结
- 时间衰减因子:使新闻CTR提升38%。
- BM25参数调整:解决短文本过匹配问题。
- 多字段组合策略:提升首屏准确率至89.6%。
- 语义扩展模型:使长尾查询满意度翻倍。
核心经验
-
- 建立量化评估体系(
NDCG+人工评估)。
NDCG(Normalized Discounted Cumulative Gain,归一化折损累计增益)是信息检索领域中用于评估搜索结果排序质量的重要指标。

- 建立量化评估体系(
-
- 采用
渐进式参数调整策略
- 采用
-
- 构建自动化测试流水线
-
- 实现动态权重调整机制
附录:优化工具链
| 工具类型 | 具体工具 | 应用场景 |
|---|---|---|
| 相关性评估 | RankLib | NDCG@10计算 |
| 查询分析 | Elasticsearch Profile | 查询耗时分解 |
| 语义扩展 | ES Synonym API | 同义词库管理 |
| 效果可视化 | Kibana Lens | CTR趋势分析 |
RankLib- 在 Elasticsearch(ES)中,
RankLib 是一个强大的开源学习排序(Learning to Rank, LTR)工具包,它能够帮助用户利用机器学习算法来优化搜索结果的排序。 - 传统的 Elasticsearch 搜索结果排序通常基于 TF-IDF(词频 - 逆文档频率)等简单的统计方法,而
RankLib 可以结合更多的特征和机器学习模型,使得搜索结果的排序更加符合用户的实际需求。
- 在 Elasticsearch(ES)中,
Elasticsearch Profile- 是 Elasticsearch 提供的一个
强大的调试和性能分析工具,用于深入了解查询执行的详细过程和性能瓶颈。 - 性能优化。当查询执行时间过长时,可以使用
Profile功能找出耗时的操作和分片,从而有针对性地优化查询语句、调整索引配置或增加硬件资源。 - 能够帮助开发者和运维人员更好地理解和优化 Elasticsearch 的查询性能。
- 是 Elasticsearch 提供的一个
ES Synonym API- 在 Elasticsearch(ES)中,
同义词(Synonym)在提升搜索准确性和召回率方面起着重要作用,它允许用户将多个词视为等同的,从而使搜索更加灵活。 - 通常通过配置同义词过滤器(
Synonym Filter)并将其集成到自定义分析器中来使用同义词。配置同义词有静态和动态两种方式。1. 静态同义词配置- 静态同义词配置是将同义词规则直接写在配置文件或者请求体中。
2. 动态同义词配置- 动态同义词配置允许在不重启 ES 集群的情况下更新同义词规则,通常借助文件来存储同义词规则。
- 在 Elasticsearch(ES)中,
Kibana Lens- Kibana Lens 是 Elastic Stack 中
Kibana 提供的一个可视化工具,它简化了数据可视化的过程,使用户无需编写复杂的查询或脚本,就能快速创建各种交互式可视化图表。
- Kibana Lens 是 Elastic Stack 中
相关文章:
【实战ES】实战 Elasticsearch:快速上手与深度实践-3.2.3 案例:新闻搜索引擎的相关性优化
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch新闻搜索引擎相关性优化实战3.2.3 案例:新闻搜索引擎的相关性优化项目背景1. 相关性问题诊断与分析1.1 初始查询DSL示例1.2 问题诊断矩阵1.3 性能基…...
HCIA复习拓扑实验
一.拓扑图 二.需求 1.学校内部的HTTP客户端可以正常通过域名www.baidu.com访问到百度网络中HTTP服务器 2.学校网络内部网段基于192.168.1.0/24划分,PC1可以正常访问3.3.3.0/24网段,但是PC2不允许 3.学校内部路由使用静态路由,R1和R2之间两…...
企业如何选择研发项目进度管理软件?盘点15款实用工具
这篇文章介绍了以下工具: 1. PingCode; 2. Worktile; 3. 腾讯 TAPD; 4. 华为 DevCloud; 5. 亿方云; 6. 阿里云效; 7. CODING 码云; 8. 明道云; 9. 进度猫; 10. 轻流等。 …...
(二 十 二)趣学设计模式 之 备忘录模式!
目录 一、 啥是备忘录模式?二、 为什么要用备忘录模式?三、 备忘录模式的实现方式四、 备忘录模式的优缺点五、 备忘录模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...
conda 配置新环境时package will be install 和 package will be download 的区别
install 和 download 的区别 package will be downloaded下的包:这一类显示的是需要从 conda 仓库或其他指定的源下载的软件包。这些软件包通常是 .tar.bz2、.tar.xz 或 .conda 格式的压缩包。这些包会被下载到本地缓存目录(通常是 ~/.conda 或 C:\Users…...
第本章:go 切片
注意: 切片必须要初始化 才能使用 ,切片是引用类型 a :[]int{} // 这上叫始化 此时并没有申请内存 // 如果要追加值的话: append ints : append(a, 1, 2, 3)a : make([]int,5) // 声明切片类型var a []string //声明一…...
P6412题解
原题 题目描述 现在有一个 1 ∼ n 1\sim n 1∼n 的排列 a a a,将序列中的元素依次放进一个 BST 里,求 BST 中插入函数的执行次数。 注意:第一个数已经作为 BST 的根。 如果您无法理解上面说的话,这里有一份伪代码: insert( number x, node n )c+1;if x is less tha…...
关于AI数据分析可行性的初步评估
一、结论:可在部分环节嵌入,无法直接处理大量数据 1.非本地部署的AI应用处理非机密文件没问题,内部文件要注意数据安全风险。 2.AI(指高规格大模型)十分适合探索性研究分析,对复杂报告无法全流程执行&…...
编程考古-Borland历史:《.EXE Interview》对Anders Hejlsberg关于Delphi的采访内容(中)
为了纪念Delphi在2002年2月14日发布的25周年(2020.2.12),这里有一段由.EXE杂志编辑Will Watts于1995年对Delphi首席架构师Anders Hejlsberg进行的采访记录。在这次采访中,Anders讨论了Delphi的设计与发展,以及即将到来的针对Windows 95的32位版本。 Q. 编译器引擎本身是用…...
SQL 窗口函数之lead() over(partition by ) 和 lag() over(partition by )
lag() over() 与 lead() over() 函数是跟偏移量相关的两个分析函数,通过这两个函数可以在一次查询中取出同一字段的前 N 行的数据 (lag) 和后 N 行的数据 (lead) 作为独立的列, 从而更方便地进行进行数据过滤。这种操作可以代替表的自联接,并且 LAG 和 L…...
【基础知识】回头看Maven基础
背景 项目过程中,对于Maven的pom.xml文件,很多时候,我通过各种参考、仿写,最终做出想要的效果。 但实际心里有些迷糊,不清楚具体哪个基础的配置所实现的效果。 今天,特意回过头来,了解Maven的基…...
Manus+Ollama实现本地大模型部署和应用测试
这几天Manus即DeepSeek后又突然火爆,我也进行了跟踪测试,特记录一下分享给大家,目前来看,Manus的确是一个可以进行任务分解的自动化解决方案,将其他AI需要多次繁杂的迭代对话做了较大的改进,相当于用户抛出…...
labelimg标注的xml标签转换为yolo格式标签
本文不生产技术,只做技术的搬运工!!! 前言 在yolo训练时,我们需要对图像进行标注,而使用labelimg标注时如果直接选择输出yolo格式的数据集,则原始数据的很多信息无法被保存,因此一版…...
【Python 数据结构 9.树】
我装作漠视一切,其实我在乎的太多,但我知道抓得越紧越容易失去 —— 25.3.6 一、树的基本概念 1.树的定义 树是n个结点的有限集合,n0时为空树。当n大于0的时候,满足如下两个条件: ① 有且仅有一个特定的结点ÿ…...
LLM 学习(二 完结 Multi-Head Attention、Encoder、Decoder)
文章目录 LLM 学习(二 完结 Multi-Head Attention、Encoder、Decoder)Self-Attention (自注意力机制)结构多头注意力 EncoderAdd & Norm 层Feed Forward 层 EncoderDecoder的第一个Multi-Head AttentionMasked 操作Teacher Fo…...
计算机网络软考
1.物理层 1.两个主机之间发送数据的过程 自上而下的封装数据,自下而上的解封装数据,实现数据的传输 2.数据、信号、码元 码元就是数字通信里用来表示信息的基本信号单元。比如在二进制中,用高电平代表 “1”、低电平代表 “0”,…...
从高资源到低资源语言的全覆盖:Manus AI的数据革命与迁移学习策略
在全球化语境下,多语言手写识别的最大挑战并非技术本身的复杂性,而是语言资源的极度不均衡——英语、中文等高资源语言拥有海量标注数据,而藏语、斯瓦希里语等低资源语言往往仅有零星样本。Manus AI通过数据生态构建与知识迁移技术,打破了这一资源垄断,实现了从高资源到低…...
《白帽子讲 Web 安全》之身份认证
目录 引言 一、概述 二、密码安全性 三、认证方式 (一)HTTP 认证 (二)表单登录 (三)客户端证书 (四)一次性密码(OTP) (五)多因…...
VBA 数据库同一表的当前行与其他行的主键重复判断实现方案
目的,判断是否主键重复,不重复则登录新数据,重复则不登录。 定义类型: DataRecord tableName 表名 rowNumber 行号 columnName 列名 data 数据 想要实现的代码逻辑如下: 模拟数据库的登录过程。假设…...
FreeRTOS第17篇:FreeRTOS链表实现细节05_MiniListItem_t:FreeRTOS内存优化
文/指尖动听知识库-星愿 文章为付费内容,商业行为,禁止私自转载及抄袭,违者必究!!! 文章专栏:深入FreeRTOS内核:从原理到实战的嵌入式开发指南 1 为什么需要迷你列表项? 在嵌入式系统中,内存资源极其宝贵。FreeRTOS为满足不同场景需求,设计了标准列表项(ListItem_…...
2025最新群智能优化算法:山羊优化算法(Goat Optimization Algorithm, GOA)求解23个经典函数测试集,MATLAB
一、山羊优化算法 山羊优化算法(Goat Optimization Algorithm, GOA)是2025年提出的一种新型生物启发式元启发式算法,灵感来源于山羊在恶劣和资源有限环境中的适应性行为。该算法旨在通过模拟山羊的觅食策略、移动模式和躲避寄生虫的能力&…...
网络基础(一)【网络发展/认识协议/网络 VS 系统/以太网通信原理/重谈协议/网络中的地址管理】
网络基础(一) 1. 网络的发展2. 认识协议3. 网络 VS 系统4. 以太网通信原理5. 重谈协议6. 网络中的地址管理 1. 网络的发展 最开始时,计算机之间相互独立。 但是为了协作完成一些任务,就产生了计算机之间相互通讯的需求,…...
支付宝当面付java,php,sdk下载
SDK & Demo 获取 - 支付宝文档中心 开放平台服务端 SDK 为了帮助开发者调用开放接口,支付宝提供了开放平台服务端 SDK,包含 Java、PHP、NodeJS、Python 和 .NET 等语言版本,DEMO 中封装了签名 & 验签、HTTP 接口请求等基础功能。 详…...
学习threejs,Animation、Core、CustomBlendingEquation、Renderer常量汇总
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️Animation常量汇总1.1.1 循…...
常用无功功率算法的C语言实现(二)
0 前言 尽管数字延迟法和积分移相法在不间断采样的无功功率计算中得到了广泛应用,但它们仍存在一些固有缺陷。 对于数字延迟法而言,其需要额外存储至少1/4周期的采样点,在高采样频率的场景下,这对存储资源的需求不可忽视。而积分移相法虽然避免了额外的存储开销,但为了抑制…...
易基因特异性R-loop检测整体研究方案
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 01.技术简述 R-loop是由DNA:RNA 杂交体和被置换的单链DNA组成的三链核酸结构,广泛参与基因转录、表观遗传调控及DNA修复等关键生物学过程。异常的R-loop积累会导致基因组不稳…...
装饰器模式--RequestWrapper、请求流request无法被重复读取
目录 前言一、场景二、原因分析三、解决四、更多 前言 曾经遇见这么一段代码,能看出来是把request又重新包装了一下,核心信息都不会改变 后面了解到这叫 装饰器模式(Decorator Pattern) :也称为包装模式(Wrapper Pat…...
STM32-I2C通信协议
目录 一:什么是I2C通信协议 二:I2C通信 三:I2C时序图 四:面试常见问题 一:什么是I2C通信协议 I2C(Inter-Integrated Circuit)协议是一种串口通信协议,用于在集成电路之间传输数…...
Unity开发——CanvasGroup组件介绍和应用
CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染顺序的组件。 一、常用属性的解释 1、alpha:控制UI的透明度 类型:float,0.0 ~1.0, 其中 0.0 完全透明,1.0 完全不透明。 通过调整alpha值可以实现UI的淡入淡…...
头歌作业-mysql数据库系统(全部)
每个作业只包含重要的建表代码,需要先进入数据库,创建基本的数据库之后才能使用下述命令创建表结构 MySql数据库-初识MySql 第一关:创建数据库 create database MyDb;第二关:创建表 create table t_emp(id int,name varchar(32…...



