当前位置: 首页 > 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...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...