当前位置: 首页 > news >正文

【实战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年前旧新闻占据Top578%查询缺乏时间衰减因子
短文本过匹配5字标题新闻得分高于千字深度报道62%案例长度归一化参数不当
语义理解缺失"苹果"优先匹配水果新闻45%查询缺乏同义词/语义扩展
字段权重失衡正文匹配噪声过大87%请求title权重配置不合理
  • 时间衰减因子(Time Decay Function)
    • 时间衰减因子的核心原理是构建一个基于时间的函数,该函数会依据文档的时间戳(如创建时间、更新时间),随着时间推移逐渐降低文档的权重。通常来说,文档越新,其权重越高;文档越旧,权重越低
    • 常见的衰减函数类型
      • 线性衰减(Linear Decay):按照固定速率随时间降低权重。
        • 在这里插入图片描述
      • 指数衰减(Exponential Decay):以指数形式快速降低权重。
        • 在这里插入图片描述
      • 高斯衰减(Gaussian Decay):基于高斯分布来降低权重
        • 在这里插入图片描述
    • 作用和优势
      • 突出近期数据:在新闻、社交媒体等场景中,近期的内容通常更有价值和关注度,使用时间衰减因子可以让近期的文档在搜索结果中排名更靠前。
      • 反映数据时效性:在数据分析和统计中,给予近期数据更高的权重,能更准确地反映当前的趋势和情况。

1.3 性能基线数据

指标初始值目标值
CTR18%28%
P@1057%90%
平均响应时间1200ms750ms
长尾查询准确率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 字段权重调整策略

字段初始权重优化权重调整依据
title35点击日志分析
content10.8文本长度归一化
entity_tags02实体识别准确率提升
author0.51.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参数调优

参数默认值优化值调整效果
k11.20.8降低短文本过匹配
b0.750.65加强长度归一化
boost_modesummultiply增强时间因子影响力

5. 效果验证与生产部署

5.1 A/B测试结果对比

指标对照组实验组提升幅度
CTR18.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 性能指标变化

指标优化前优化后变化率
平均响应时间1240ms730ms-41.1%
90%分位延迟2400ms1350ms-43.8%
CPU利用率82%68%-17.1%
GC停顿时间4.2s/m2.1s/m-50%

6. 监控体系与持续优化

6.1 监控指标矩阵

指标类型监控项报警阈值优化动作
相关性指标CTR波动±5%持续2小时触发相关性复盘
性能指标P99延迟>1200ms查询结构优化
业务指标用户搜索退出率>25%语义模型更新
系统指标JVM Old GC频率>5次/分钟堆内存扩容

6.2 持续优化机制

数据收集
问题识别
参数调整
A/B测试
全量部署

关键结论与经验沉淀

优化效果总结

  1. 时间衰减因子:使新闻CTR提升38%。
  2. BM25参数调整:解决短文本过匹配问题。
  3. 多字段组合策略:提升首屏准确率至89.6%。
  4. 语义扩展模型:使长尾查询满意度翻倍。

核心经验

    1. 建立量化评估体系(NDCG+人工评估)。
    • NDCG(Normalized Discounted Cumulative Gain,归一化折损累计增益)是信息检索领域中用于评估搜索结果排序质量的重要指标。
      在这里插入图片描述
    1. 采用渐进式参数调整策略
    1. 构建自动化测试流水线
    1. 实现动态权重调整机制

附录:优化工具链

工具类型具体工具应用场景
相关性评估RankLibNDCG@10计算
查询分析Elasticsearch Profile查询耗时分解
语义扩展ES Synonym API同义词库管理
效果可视化Kibana LensCTR趋势分析
  • RankLib
    • 在 Elasticsearch(ES)中,RankLib 是一个强大的开源学习排序(Learning to Rank, LTR)工具包,它能够帮助用户利用机器学习算法来优化搜索结果的排序
    • 传统的 Elasticsearch 搜索结果排序通常基于 TF-IDF(词频 - 逆文档频率)等简单的统计方法,而 RankLib 可以结合更多的特征和机器学习模型,使得搜索结果的排序更加符合用户的实际需求
  • Elasticsearch Profile
    • 是 Elasticsearch 提供的一个强大的调试和性能分析工具,用于深入了解查询执行的详细过程和性能瓶颈。
    • 性能优化。当查询执行时间过长时,可以使用 Profile 功能找出耗时的操作和分片,从而有针对性地优化查询语句、调整索引配置或增加硬件资源。
    • 能够帮助开发者和运维人员更好地理解和优化 Elasticsearch 的查询性能。
  • ES Synonym API
    • 在 Elasticsearch(ES)中,同义词(Synonym)在提升搜索准确性和召回率方面起着重要作用,它允许用户将多个词视为等同的,从而使搜索更加灵活。
    • 通常通过配置同义词过滤器(Synonym Filter)并将其集成到自定义分析器中来使用同义词。配置同义词有静态和动态两种方式。
      • 1. 静态同义词配置
        • 静态同义词配置是将同义词规则直接写在配置文件或者请求体中。
      • 2. 动态同义词配置
        • 动态同义词配置允许在不重启 ES 集群的情况下更新同义词规则,通常借助文件来存储同义词规则。
  • Kibana Lens
    • Kibana Lens 是 Elastic Stack 中 Kibana 提供的一个可视化工具它简化了数据可视化的过程,使用户无需编写复杂的查询或脚本,就能快速创建各种交互式可视化图表

相关文章:

【实战ES】实战 Elasticsearch:快速上手与深度实践-3.2.3 案例:新闻搜索引擎的相关性优化

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 Elasticsearch新闻搜索引擎相关性优化实战3.2.3 案例&#xff1a;新闻搜索引擎的相关性优化项目背景1. 相关性问题诊断与分析1.1 初始查询DSL示例1.2 问题诊断矩阵1.3 性能基…...

SQL经典查询

查询不在表里的数据&#xff0c;一张学生表&#xff0c;一张学生的选课表&#xff0c;要求查出没有选课的学生&#xff1f; select students.student_name from students left join course_selection on students.student_idcourse_selection.student_id where course_selecti…...

体验开源openeuler openharmony stratovirt模拟器

文档 openeuler社区面向数字基础设施的开源操作系统 openharmony社区 OpenHarmony是由开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目, 目标是面向全场景、全连接、全智能时代、基于开源的方式&#xff0c;搭建一个智能终端设备操作系统…...

【C++】:STL详解 —— 红黑树

目录 平衡二叉查找树 红黑树的概念 红黑树的五大性质 红黑树的效率 红黑树和AVL树的比较 插入与删除操作 内存与实现复杂度 经典性能数据对比 总结 对旋转的基本理解 旋转的作用 左旋&#xff08;Left Rotation&#xff09; 右旋&#xff08;Right Rotation&#xf…...

蓝桥试题:蓝桥勇士(LIS)

一、题目描述 小明是蓝桥王国的勇士&#xff0c;他晋升为蓝桥骑士&#xff0c;于是他决定不断突破自我。 这天蓝桥首席骑士长给他安排了 N 个对手&#xff0c;他们的战力值分别为 a1,a2,...,an​&#xff0c;且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战&#xf…...

Trae IDE新建C#工程

目录 1 结论 2 项目结构 3 项目代码 1 结论 新建C#工程来说&#xff0c;Trae的Chat比DeepSeek的Coder好用。 2 项目结构 MyWinFormsApp/ │ ├── Program.cs ├── Form1.cs ├── Form1.Designer.cs ├── MyResources/ │ └── MyResources.resx └── MyWin…...

Linux基础--进程管理

目录 静态查看进程 使用命令: ps 动态查看进程 使用命令: top 关闭进程: 使用命令: kill 查看进程占用端口 使用命令: ss ​编辑 查看某端口是否被进程占用 使用命令: lsof 作业管理 进程后台运行: 使用命令: jobs 将后台进程调回前台 使用指令: fg 将前台进…...

Java面向对象(详细解释)

第一章 Static关键字 1.static的介绍以及基本使用 1.概述&#xff1a;static是一个静态关键字 2.使用&#xff1a; a.修饰一个成员变量&#xff1a; static 数据类型 变量名 b.修饰一个方法&#xff1a; 修饰符 static 返回值类型 方法名&#xff08;形参&#xff09;{…...

qt ui相关的第三方库插件库

Qt UI相关的第三方库和插件库有很多&#xff0c;能帮助开发者提高开发效率&#xff0c;扩展UI功能&#xff0c;增强可用性和美观度。以下是一些常见的第三方库和插件&#xff1a; 1. QCustomPlot 功能&#xff1a;用于在Qt应用程序中创建交互式的二维绘图。特点&#xff1a;支…...

详解动态规划算法

动态规划 一、动态规划的核心思想二、动态规划的步骤1. 定义状态&#xff08;State&#xff09;2. 确定状态转移方程&#xff08;State Transition Equation&#xff09;3. 确定边界条件&#xff08;Base Case&#xff09;4. 填表&#xff08;Table Filling&#xff09;或递归计…...

LINUX网络基础 [五] - HTTP协议

目录 HTTP协议 预备知识 认识 URL 认识 urlencode 和 urldecode HTTP协议格式 HTTP请求协议格式 HTTP响应协议格式 HTTP的方法 HTTP的状态码 ​编辑HTTP常见Header HTTP实现代码 HttpServer.hpp HttpServer.cpp Socket.hpp log.hpp Makefile Web根目录 H…...

慕慕手记项目日志 项目从开发到部署多环境配置 2025-3-8

慕慕手记项目日志 项目从开发到部署多环境配置 2025-3-8 现在是已经到了课程的第十章了&#xff0c;开始进行配置项目环境了。现在要完成的任务是项目可以正常运行&#xff0c;而且可以自由切换配置&#xff0c;开发/测试。 下面是当前的目录结构图&#xff1a; 现在来解释一…...

华为配置篇-OSPF基础实验

OSPF 一、简述二、常用命令总结三、实验3.1 OSPF单区域3.2 OSPF多区域3.3 OSPF 的邻接关系和 LSA 置底 一、简述 OSPF&#xff08;开放式最短路径优先协议&#xff09; 基本定义 全称&#xff1a;Open Shortest Path First 类型&#xff1a;链路状态路由协议&#xff08;IGP&…...

闭包:JavaScript 中的隐形大杀器

你可能已经在很多地方听说过闭包这个词&#xff0c;尤其是涉及到 JavaScript 的作用域和异步操作时。闭包是 JavaScript 中非常核心的概念&#xff0c;然而它又非常容易让开发者感到困惑。今天我们就来深入剖析闭包&#xff0c;帮助你真正理解它的工作原理&#xff0c;以及如何…...

【消息队列】数据库的数据管理

1. 数据库的选择 对于当前实现消息队列这样的一个中间件来说&#xff0c;具体要使用哪个数据库&#xff0c;是需要稍作考虑的&#xff0c;如果直接使用 MySQL 数据库也是能实现正常的功能&#xff0c;但是 MySQL 也是一个客户端服务器程序&#xff0c;也就意味着如果想在其他服…...

玩转ChatGPT:GPT 深入研究功能

一、写在前面 民间总结&#xff1a; 理科看Claude 3.7 Sonnet 文科看DeepSeek-R1 那么&#xff0c;ChatGPT呢&#xff1f; 看Deep Research&#xff08;深入研究&#xff09;功能。 对于科研狗来说&#xff0c;在这个文章爆炸的时代&#xff0c;如何利用AI准确、高效地收…...

Centos8部署mongodb报错记录

使用mongo ops安装mongodb6.0.4副本集报错 error while loading shared libraries: libnetsnmpmibs.so.35: cannot open shared object file: No such file or directory 解决 yum install net-snmp net-snmp-devel -y建议&#xff1a;初始化系统时把官网上的依赖包都装一遍 即…...

2024四川大学计算机考研复试上机真题

2024四川大学计算机考研复试上机真题 2024四川大学计算机考研复试机试真题 历年四川大学计算机考研复试机试真题 在线评测&#xff1a;https://app2098.acapp.acwing.com.cn/ 分数求和 题目描述 有一分数序列&#xff1a; 2/1 3/2 5/3 8/5 13/8 21/13… 求出这个数列的前 …...

前端面试题 口语化复述解答(从2025.3.8 开始频繁更新中)

背景 看了很多面试题及其答案。但是过于标准化&#xff0c;一般不能直接用于回复面试官&#xff0c;这里我将总结一系列面试题&#xff0c;用于自我复习也乐于分享给大家&#xff0c;欢迎大家提供建议&#xff0c;我必不断完善之。 Javascript ES6 1. var let const 的区别…...

更多文章请查看

更多文章知识请移步至下面链接&#xff0c;期待你的关注 如需查看新文章&#xff0c;请前往&#xff1a; 博主知识库https://www.yuque.com/xinzaigeek...

vulnhub靶场之【digitalworld.local系列】的vengeance靶机

前言 靶机&#xff1a;digitalworld.local-vengeance&#xff0c;IP地址为192.168.10.10 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 kali采用VMware虚拟机&#xff0c;靶机选择使用VMware打开文件&#xff0c;都选择桥接网络 这里官方给的有两种方式&#xff…...

MySql的安装及数据库的基本操作命令

1.MySQL的安装 1.1进入MySQL官方网站 1.2点击下载 1.3下拉选择MySQL社区版 1.4选择你需要下载的版本及其安装的系统和下载方式 直接安装以及压缩包 建议选择8.4.4LST LST表明此版本为长期支持版 新手建议选择红框勾选的安装方式 1.5 安装包下载完毕之后点击安装 2.数据库…...

中性点直接接地电网接地故障Simulink仿真

1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2017Ra&#xff09;软件。建议采用matlab2017 Ra及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09; 2.系统仿真图&#xff1a; 3.中性点直接接地电网接地故障基本概念&#xff08;本仿…...

Linux16-数据库、HTML

数据库&#xff1a; 数据存储&#xff1a; 变量、数组、链表-------------》内存 &#xff1a;程序运行结束、掉电数据丢失 文件 &#xff1a; 外存&#xff1a;程序运行结束、掉电数据不丢失 数据库&#xff1a; …...

SpireCV荣获Gitee 最有价值开源项目称号

什么是GVP&#xff1f; GVP全称Gitee Valuable Project&#xff0c;意思为Gitee最有价值开源项目。作为GVP称号的获得者&#xff0c;SpireCV在开源社区中展现出了卓越的实力和影响力&#xff0c;为开源软件的发展和推广做出了积极的贡献。 这一荣誉不仅充分肯定了过去阿木实验…...

open-webui+deepseek api实现deepseek自由

虽然deepseek是免费的&#xff0c;但是官网的体验感太差。 所以才会有某种想法&#xff0c;想要更加舒服的使用deepseek。 1.Python虚拟环境 这个我就不多赘述&#xff0c;切记Python版本一定要和open-webui制定的版本一致。 2.deepseek api 去这个网站充点钱&#xff08;…...

Hadoop八股

Hadoop八股 HadoopMapReduce考点MR on Yarn 分布式工作原理shuffle&#xff1a;MapTask 和 ReduceTask的处理流程MR中的MapTask 和 ReduceTask 的数量决定MR和Spark两者Shuffle的区别简单讲一下map- reduce 原理**MapReduce 的核心概念****MapReduce 的工作流程****MapReduce 的…...

.NET Core全屏截图,C#全屏截图

.NET Core全屏截图&#xff0c;C#全屏截图 使用框架&#xff1a; WPF.NET 8 using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Text; using System.Threading.Tasks; using System.W…...

ajax之生成一个ajax的demo示例

目录 一. node.js和express ​二. 使用express创建后端服务 三. 创建前端 一. node.js和express ajax是前端在不刷新的情况下访问后端的技术&#xff0c;所以首先需要配置一个后端服务&#xff0c;可以使用node.js和express。 首先生成一个空项目&#xff0c;新建main目录…...

软件工程笔记下

从程序到软件☆ 章节 知识点 概论☆ 软件的定义&#xff0c;特点&#xff0c;生存周期。软件工程的概论。软件危机。 1.☆软件&#xff1a;软件程序数据文档 &#xff08;1&#xff09;软件&#xff1a;是指在计算机系统的支持下&#xff0c;能够完成特定功能与性能的包括…...