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

es 自动补全

安装拼音分词器

选择es版本对应的pinyin分词器版本

下载后解压,放到es的插件目录下

重启es


自定义分词器

拼音分词器——可选配置

1. 首字母处理配置

keep_first_letter (默认: true)

解释:是否提取每个汉字的首字母组合,用于支持首字母缩写搜索
开启时刘德华[ldh]
关闭时刘德华[](不生成首字母)
应用场景:适用于"ldh"搜索"刘德华"的需求

keep_separate_first_letter (默认: false)

解释:是否将每个汉字的首字母分开存储
开启时刘德华[l,d,h]
关闭时刘德华[ldh]
注意:开启会增加索引体积,但能支持更灵活的搜索(如"l d h")

limit_first_letter_length (默认: 16)

解释:限制首字母结果的最大长度
示例
中华人民共和国 → 默认输出[zhrmghg](7字符)
设置为3时 → [zhr]
用途:控制长文本的首字母结果长度

2. 完整拼音处理

keep_full_pinyin (默认: true)

解释:是否保留每个汉字的完整拼音
开启时刘德华[liu,de,hua]
关闭时刘德华[]
必要性:支持拼音精确搜索的基础配置

keep_joined_full_pinyin (默认: false)

解释:是否将完整拼音连接成一个词
开启时刘德华[liudehua]
关闭时刘德华[liu,de,hua]
优劣:连接后减少索引词项,但会丢失单字搜索能力

3. 非中文处理配置

keep_none_chinese (默认: true)

解释:是否保留原始文本中的非中文字符
开启时刘德华AT2016[liu,de,hua,AT2016]
关闭时刘德华AT2016[liu,de,hua]
重要性:处理混合文本的关键参数

keep_none_chinese_together (默认: true)

解释:是否保持非中文连续字符的完整性
开启时DJ音乐家[DJ,yin,yue,jia]
关闭时DJ音乐家[D,J,yin,yue,jia]
影响:关闭后会显著增加索引词项数量

4. 高级处理配置

none_chinese_pinyin_tokenize (默认: true)

解释:是否将非中文按拼音规则拆分
开启时liudehua2016[liu,de,hua,2,0,1,6]
关闭时liudehua2016[liudehua2016]
特殊用途:处理拼音与数字混合的情况

remove_duplicated_term (默认: false)

解释:是否去除重复的词项
开启时de的[de]
关闭时de的[de,的]
权衡:节省30-50%索引空间,但影响高亮精度

keep_original (默认:false)

解释:是否保留原始的文本
开启时"北京"["北京", "beijing", "bj"]
关闭时"北京"["beijing", "bj"]

5. 系统行为配置

ignore_pinyin_offset (默认: true)

解释:是否忽略拼音分词的位置偏移
开启时:允许重叠分词(节省资源)
关闭时:严格位置约束(保证高亮准确)
版本注意:Elasticsearch 6.0+必须关注此参数


自定义分词器的工作原理

elasticsearch中分词器(analyzer)的组成包含三部分:

  • character filter:在tokenizer之前对文本进行处理。例如删除字符、替换字符
  • tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smart
  • tokenizer filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等


案例

新建用于测试自定义分词器的索引库test

PUT /test
{"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "ik_max_word","filter": "py"  }},"filter": { "py": {"type": "pinyin","keep_full_pinyin": false, # 不保留每个汉字的完整拼音"keep_joined_full_pinyin": true, # 把完整的拼音连成一个长拼音"keep_original": true, # 保留原始的文本"limit_first_letter_length": 16, # 限制首字母的最大长度为16"remove_duplicated_term": true,  # 去除重复的选项"none_chinese_pinyin_tokenize": false  # 不将非中文按拼音规则拆分}}}},"mappings": {"properties": {"words": {"type": "text","analyzer": "my_analyzer","search_analyzer": "ik_max_word"}}}
}

创建倒排索引的时候使用 my_analyzer

查询的时候指定分词器为 ik_max_word

这样就不会出现查询"狮子"的时候,出现虱子有关的词条了


测试

POST /test/_analyze
{"text": ["了却君王天下事junwang天下事"],"analyzer": "my_analyzer"
}
{"tokens" : [{"token" : "了却","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "leque","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "lq","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 0},{"token" : "君王","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 1},{"token" : "junwang","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 1},{"token" : "jw","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 1},{"token" : "天下事","start_offset" : 4,"end_offset" : 7,"type" : "CN_WORD","position" : 2},{"token" : "tianxiashi","start_offset" : 4,"end_offset" : 7,"type" : "CN_WORD","position" : 2},{"token" : "txs","start_offset" : 4,"end_offset" : 7,"type" : "CN_WORD","position" : 2},{"token" : "天下","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 3},{"token" : "tianxia","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 3},{"token" : "tx","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 3},{"token" : "事","start_offset" : 6,"end_offset" : 7,"type" : "CN_CHAR","position" : 4},{"token" : "shi","start_offset" : 6,"end_offset" : 7,"type" : "CN_CHAR","position" : 4},{"token" : "s","start_offset" : 6,"end_offset" : 7,"type" : "CN_CHAR","position" : 4},{"token" : "junwang","start_offset" : 7,"end_offset" : 14,"type" : "ENGLISH","position" : 5},{"token" : "天下事","start_offset" : 14,"end_offset" : 17,"type" : "CN_WORD","position" : 6},{"token" : "tianxiashi","start_offset" : 14,"end_offset" : 17,"type" : "CN_WORD","position" : 6},{"token" : "txs","start_offset" : 14,"end_offset" : 17,"type" : "CN_WORD","position" : 6},{"token" : "天下","start_offset" : 14,"end_offset" : 16,"type" : "CN_WORD","position" : 7},{"token" : "tianxia","start_offset" : 14,"end_offset" : 16,"type" : "CN_WORD","position" : 7},{"token" : "tx","start_offset" : 14,"end_offset" : 16,"type" : "CN_WORD","position" : 7},{"token" : "事","start_offset" : 16,"end_offset" : 17,"type" : "CN_CHAR","position" : 8},{"token" : "shi","start_offset" : 16,"end_offset" : 17,"type" : "CN_CHAR","position" : 8},{"token" : "s","start_offset" : 16,"end_offset" : 17,"type" : "CN_CHAR","position" : 8}]
}

PUT /test/_doc/1
{"words":"身上有虱子"
}PUT /test/_doc/2
{"words":"山里有狮子"
}

执行DSL

GET /test/_search
{"query": {"match": {"words": "虱子"}}
}

指定search_analyzer为ik_max_word前的结果

{"took" : 6,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 2,"relation" : "eq"},"max_score" : 0.33425623,"hits" : [{"_index" : "test","_type" : "_doc","_id" : "1","_score" : 0.33425623,"_source" : {"words" : "身上有虱子"}},{"_index" : "test","_type" : "_doc","_id" : "2","_score" : 0.3085442,"_source" : {"words" : "山里有狮子"}}]}
}

指定search_analyzer为ik_max_word后的结果

{"took" : 2,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 0.9530773,"hits" : [{"_index" : "test","_type" : "_doc","_id" : "1","_score" : 0.9530773,"_source" : {"words" : "身上有虱子"}}]}
}

显然,第二个结果是才是我们所希望的。


自动补全

es提供了completion suggest 查询来实现自动补全的功能,这个查询会匹配用户输入开头的词条并返回。

参与补全查询的字段必须是completion类型的,字段里内容是参与补全的多个词条。


自动补全(DSL实现)

创建一个game索引库,里面仅有一个completion类型的字段——title

PUT /game
{"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "ik_max_word","filter": "py"  }},"filter": { "py": {"type": "pinyin","keep_full_pinyin": false,"keep_joined_full_pinyin": true,"keep_original": true,"limit_first_letter_length": 16,"remove_duplicated_term": true,"none_chinese_pinyin_tokenize": false}}}},"mappings": {"properties": {"title": {"type": "completion","analyzer": "my_analyzer","search_analyzer": "ik_max_word"}}}
}

POST /game/_bulk
{"index":{"_id":1}}
{"title":["原神","开放世界","角色扮演","动作冒险","多平台","米哈游"]}
{"index":{"_id":2}}
{"title":["王者荣耀","MOBA","5v5","竞技","手游"]}
{"index":{"_id":3}}
{"title":["绝地求生","大逃杀","FPS","射击","Steam"]}
{"index":{"_id":4}}
{"title":["英雄联盟","MOBA","PC","竞技","团队合作"]}
{"index":{"_id":5}}
{"title":["崩坏:星穹铁道","角色扮演","回合制","科幻","米哈游"]}

测试案例1

GET /game/_search
{"suggest": {"game_suggest": {"text": "mi","completion": {"field": "title","skip_duplicates":false,"size": 5}}}
}
{"took" : 0,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 0,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"suggest" : {"game_suggest" : [{"text" : "mi","offset" : 0,"length" : 2,"options" : [{"text" : "米哈游","_index" : "game","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"title" : ["原神","开放世界","角色扮演","动作冒险","多平台","米哈游"]}},{"text" : "米哈游","_index" : "game","_type" : "_doc","_id" : "5","_score" : 1.0,"_source" : {"title" : ["崩坏:星穹铁道","角色扮演","回合制","科幻","米哈游"]}}]}]}
}

测试案例2

GET /game/_search
{"suggest": {"game_suggest": {"text": "ha","completion": {"field": "title","skip_duplicates":false,"size": 5}}}
}
{"took" : 0,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 0,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"suggest" : {"game_suggest" : [{"text" : "ha","offset" : 0,"length" : 2,"options" : [ ]}]}
}

RestAPI实现自动补全

@Test
void testSuggest() throws Exception {
SearchRequest request = new SearchRequest("game");
request.source().suggest(new SuggestBuilder().addSuggestion("game_suggest", SuggestBuilders.completionSuggestion("title").prefix("mi").skipDuplicates(false).size(5)));SearchResponse response = client.search(request, RequestOptions.DEFAULT);
CompletionSuggestion completionSuggestion = response.getSuggest().getSuggestion("game_suggest");for (CompletionSuggestion.Entry entry : completionSuggestion.getEntries()) {for (CompletionSuggestion.Entry.Option option : entry) {// 获取补全文本String suggestedText = option.getText().string();// 获取关联文档的_source(如果有)Map<String, Object> source = option.getHit().getSourceAsMap();System.out.println("命中: " + suggestedText);System.out.println("关联文档: " + source);}
}
}
命中: 米哈游
关联文档: {title=[原神, 开放世界, 角色扮演, 动作冒险, 多平台, 米哈游]}
命中: 米哈游
关联文档: {title=[崩坏:星穹铁道, 角色扮演, 回合制, 科幻, 米哈游]}

相关文章:

es 自动补全

安装拼音分词器 选择es版本对应的pinyin分词器版本 下载后解压&#xff0c;放到es的插件目录下 重启es 自定义分词器 拼音分词器——可选配置 1. 首字母处理配置 keep_first_letter (默认: true) 解释&#xff1a;是否提取每个汉字的首字母组合&#xff0c;用于支持首字母…...

NLTK 文本分类与情感分析

在自然语言处理&#xff08;NLP&#xff09;的领域中&#xff0c;文本分类和情感分析是两个非常重要且具有广泛应用的任务。文本分类旨在将文本数据分配到预定义的类别中&#xff0c;而情感分析则专注于确定文本所表达的情感倾向&#xff0c;如积极、消极或中性。Python 的 Nat…...

Android开发常用外部组件及使用指南(上)

文章目录 一、前言二、外部组件的引入方式1. Gradle依赖管理1.1 项目级build.gradle1.2 模块级build.gradle 2. 本地库引入3. 模块化引入 三、网络请求组件1. Retrofit1.1 引入依赖1.2 基本使用1.3 高级特性 2. OkHttp2.1 基本使用2.2 拦截器 四、图片加载组件1. Glide1.1 基本…...

系统架构师2025年论文《系统架构风格》

论企软件架构风格 摘要: 我所在单位是某市主要医院,2017 年 1 月医院决定开发全新一代某市医院预约挂号系统,我担任本次系统的架构师,主要负责整个系统的架构设计工作。该系统旨在优化医院挂号流程,提高患者就医体验,是医院应对医疗信息化变革和提升服务质量的重要举措…...

Linux部署Redis主从

Linux部署Redis主从 1.下载2.安装2.1编译 & 安装 3.修改配置文件4.启动 1.下载 在Redis版本库&#xff1a;https://download.redis.io/releases/ 可根据自己的需求选择下载对应的版本&#xff0c;然后直接下载 2.安装 通过Xftp工具进行上传&#xff0c;选择指定的应用拖…...

【Python 学习笔记】 pip指令使用

系列文章目录 pip指令使用 文章目录 系列文章目录前言安装配置使用pip 管理Python包修改pip下载源 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 当前文章记录的是我在学习过程的一些笔记和思考&#xff0c;可能存在有误解的地方&#xff0c;仅供大家…...

Django DRF实现用户数据权限控制

在 Django DRF 中使用 ModelViewSet 时&#xff0c;若需实现用户仅能查看和操作自己的数据详情&#xff0c;同时允许所有认证用户访问列表&#xff0c;需结合权限类和动态权限分配。以下是具体步骤&#xff1a; 1. 自定义对象权限类 创建一个 IsOwner 权限类&#xff0c;检查…...

eplan许可证与防火墙安全软件冲突

在使用EPLAN电气设计软件时&#xff0c;有时会遇到许可证与防火墙或安全软件之间的冲突。这种冲突可能导致许可证无法激活或软件无法正常运行&#xff0c;给用户带来诸多不便。本文将为您解析EPLAN许可证与防火墙/安全软件冲突的原因&#xff0c;并提供解决方案&#xff0c;帮助…...

《多Agent架构VS千万字长文本VS深度推理引擎——拆解Coze、通义、Kimi的AI终局博弈密码》

Coze、通义和Kimi终局竞争深度分析 技术路线分野&#xff1a;多Agent协同 vs. 超长文本 vs. 结构化提示 架构差异&#xff1a;三者在技术路线上的侧重点各异&#xff0c;塑造了不同的市场边界。Coze&#xff08;“扣子”&#xff09;采用多Agent协同架构&#xff0c;强调插件工…...

《浔川代码编辑器v2.1.0预告》

《浔川代码编辑器v2.1.0预告》 尊敬的浔川代码编辑器用户&#xff1a; 我们很高兴向大家预告即将到来的v2.1.0版本更新计划。以下是各版本的发布时间安排&#xff1a; 版本发布计划 1. **v2.1.0公测版** - 发布时间&#xff1a;待v2.0测试版结束后两周 - 特点&#xff1a;包…...

Python jsonpath库终极指南:json数据挖掘的精准导航仪

Python jsonpath库终极指南&#xff1a;json数据挖掘的精准导航仪 对话实录 小白&#xff1a;&#xff08;抓狂&#xff09;这个 JSON 数据有好多层嵌套&#xff0c;怎么快速拿到最里面的值&#xff1f; 专家&#xff1a;&#xff08;递上探测器&#xff09;用jsonpath库&…...

QT软件安装(12)

文章目录 一、本章说明二、QT软件包资源三、软件安装教程 一、本章说明 注&#xff1a;本节为【基于STM的环境监测系统&#xff08;节点云服务器存储QT界面设计&#xff09;】项目第12篇文章&#xff0c;前面文章已经实现了气体传感数据的采集&#xff0c;并通过4G模块上传至云…...

【人工智能】DeepSeek 的开源生态:释放 AI 潜能的社区协同与技术突破

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 DeepSeek 作为中国 AI 领域的先锋,以其高效的混合专家模型(MoE)和彻底的开源策略,在全球 AI 社区掀起波澜。本文深入剖析 DeepSeek 的开…...

如何选择 Flask 和 Spring Boot

目录 一、选择 Flask 和 Spring Boot 的关键因素如何评价系统的性能1.RPSRPS 的重要性RPS 的评估标准RPS 的计算方法RPS 与并发用户数的关系性能测试中的RPS 2.TPSTPS 的定义TPS 的重要性TPS 与 RPS 的区别TPS 的常见范围计算 TPS 的公式如何提高 TPS 二、后期扩展优化方案Flas…...

在KEIL里C51和MDK兼容以及添加ARM compiler5 version编译器

前言 我们想在一个keil里面可以打开32和51的文件&#xff0c;这样就不需要两个keil了 还有就是现在的keil&#xff0c;比如我用的是5.41的&#xff0c;就没有5版本的处理器&#xff0c;所以要安装 本篇文章我们来详细讲解如何实现上面说的两个内容 准备的东西 1.ARM5编译器 …...

【源码分析】Linux内核ov13850.c

这里写自定义目录标题 1、入口函数&#xff1a;__init sensor_mod_init2、probe函数&#xff1a;ov13850_probe2.1、初始化前的一些准备2.2、设备初始化流程 源码如下 了解运行流程 1、入口函数&#xff1a;__init sensor_mod_init 驱动由 __init 开始 __exit 结束&#xff0c…...

单片机与FPGA的核心差异、优缺点、编程差异、典型应用场景、选型等对比分析

1. 基本概念差异 单片机&#xff08;MCU&#xff09;&#xff1a; 基于冯诺依曼/哈佛架构的微控制器&#xff0c;集成CPU、内存、外设接口&#xff08;如ADC、UART、PWM等&#xff09;&#xff0c;通过软件指令顺序执行任务。 FPGA&#xff1a; 由可编程逻辑单元&#xff08;…...

PCB规则

PCB封装 原理图绘制完成需要检查 DRC 菜单栏——>设计——>检查 DRC 底部侧边栏——>DRC——>检查 DRC 常见问题&#xff1a; 1&#xff09;某个导线/网络标签是一个单网络 网络标签名称不一样 网络标签只有一个 引脚没有使用&#xff0c;但是放置了导线 2&#xf…...

静态存储区(Static Storage Area)的总结

普通的全局变量未初始化&#xff0c;编译阶段放在com段&#xff0c;链接完后放在bss段 在32位系统中&#xff0c;内核空间为1GB​&#xff08;地址范围&#xff1a;0xC0000000-0xFFFFFFFF&#xff09;&#xff0c;用户空间为3GB 高端内存&#xff08;HIGHMEM&#xff09;是32位…...

基于Quill的文档编辑器开发日志(上)——前端核心功能实现与本地存储管理

目录 二、技术选型与架构设计 三、核心功能实现 1. Quill编辑器集成 2. 本地存储管理&#xff08;DocStorage类&#xff09; 3. 文档树渲染与事件绑定 四、效果演示与问题总结 一、项目背景 在开发 Taskflow智能Todo系统 的过程中&#xff0c;文档管理模块是核心功能之一…...

Java | 深拷贝与浅拷贝工具类解析和自定义实现

关注&#xff1a;CodingTechWork 引言 在 Java 开发中&#xff0c;对象的拷贝是一个常见的需求&#xff0c;尤其是在处理复杂数据结构时。深拷贝&#xff08;Deep Copy&#xff09;和浅拷贝&#xff08;Shallow Copy&#xff09;是两种常见的拷贝方式&#xff0c;它们在实现和…...

《巧用DeepSeek快速搞定数据分析》书籍分享

文章目录 前言内容简介作者简介购书链接书籍目录 前言 随着大数据时代的到来&#xff0c;数据分析和人工智能技术正迅速改变着各行各业的运作方式。DeepSeek作为先进的人工智能模型&#xff0c;不仅在自然语言处理领域具有广泛应用&#xff0c;还在数据分析、图像识别、推荐系…...

skynet.cluster 库函数应用

目录 模块概览核心函数解析1. 节点通信2. 节点配置与监听3. 服务注册与查询4. 远程服务代理 底层机制使用场景示例场景1&#xff1a;跨节点数据存储场景2&#xff1a;动态扩展节点 注意事项 以下是对 cluster.lua 模块的详细解析&#xff0c;涵盖其核心功能、函数用途及使用示例…...

精益数据分析(17/126):精益画布与创业方向抉择

精益数据分析&#xff08;17/126&#xff09;&#xff1a;精益画布与创业方向抉择 大家好&#xff01;一直以来&#xff0c;我都希望能和大家一起在创业和数据分析的领域中不断探索、共同进步。今天&#xff0c;我们接着深入学习《精益数据分析》&#xff0c;这次聚焦于精益画…...

同样的接口用postman/apifox能跑通,用jmeter跑就报错500

之前没用过jmeter,第一次用调试压测脚本遇到了问题 一样的接口用postman能跑通&#xff0c;用jmeter跑就报错500&#xff0c;百度很多文章都说是该接口需要加一个‘内容编码’改成utf-8,我加了还是不行 后来我就想到apifox好像有隐藏的header&#xff0c;然后开始比较apifox的…...

编写 Markdown 技术文档示例

文章目录 &#x1f4c4; 建议的文档命名规则&#xff08;文件名&#xff09;✍️ 如何署名与归属标识示例 OpenShift 安装部署前置条件说明文档说明使用说明 &#x1f4c4; 建议的文档命名规则&#xff08;文件名&#xff09; OCP_Install_Prerequisites_Ghostwritten-v1.0-20…...

23种设计模式-结构型模式之享元模式(Java版本)

Java 享元模式&#xff08;Flyweight Pattern&#xff09;详解 &#x1f98b; 什么是享元模式&#xff1f; 享元模式是一种结构型模式&#xff0c;它通过共享相同的对象来减少内存消耗&#xff0c;适用于大量细粒度对象的场景。关键思想是缓存重复出现的对象&#xff0c;避免…...

单例模式:确保唯一实例的设计模式

单例模式&#xff1a;确保唯一实例的设计模式 一、模式核心&#xff1a;保证类仅有一个实例并提供全局访问点 在软件开发中&#xff0c;有些类需要确保只有一个实例&#xff08;如系统配置类、日志管理器&#xff09;&#xff0c;避免因多个实例导致状态混乱或资源浪费。 单…...

gem5-gpu教程04 高速缓存一致性协议和缓存拓扑

高速缓存一致性协议 gem5-gpu 的一大贡献是允许用户灵活地定义 GPU 和 GPU-CPU 间的缓存一致性协议。此功能由 gem5 的 Ruby 模块实现,该模块使用 SLICC 语言定义一致性协议。更多信息请访问 gem5 wiki:[[http://gem5.org/Ruby]]。 缓存拓扑 The topology of the cache hi…...

c++ 互斥锁

为练习c 线程同步&#xff0c;做了LeeCode 1114题. 按序打印&#xff1a; 给你一个类&#xff1a; public class Foo {public void first() { print("first"); }public void second() { print("second"); }public void third() { print("third"…...

Pytest教程:为什么Pytest要用插件模式?

目录 一、历史背景&#xff1a;测试框架的局限性与Pytest的设计哲学 1.1 早期测试框架的困境 1.2 Pytest的模块化设计 二、横向对比&#xff1a;插件机制如何让Pytest脱颖而出 2.1 与Unittest/Nose的对比 2.2 插件模式的架构优势 三、插件模式的核心优势解析 3.1 可扩展…...

JVM 生产环境问题定位与解决实战(七):实战篇——OSSClient泄漏引发的FullGC风暴

本文已收录于《JVM生产环境问题定位与解决实战》专栏&#xff0c;完整系列见文末目录 引言 在前六篇博客中&#xff0c;我们系统性地学习了 JVM 生产环境问题定位与解决的全套工具链&#xff0c;涵盖jps、jmap、jstat、jstack、jcmd 等基础工具的使用技巧&#xff0c;深入剖析…...

缩放点积注意力

Scaled Dot-Product Attention 论文地址 https://arxiv.org/pdf/1706.03762 注意力机制介绍 缩放点积注意力是Transformer模型的核心组件&#xff0c;用于计算序列中不同位置之间的关联程度。其核心思想是通过查询向量&#xff08;query&#xff09;和键向量&#xff08;key&am…...

一个关于相对速度的假想的故事-7

回到&#xff0c; 它其实还可以写成&#xff0c; 也就是说&#xff0c;把 作为1&#xff0c;它的 倍也是存在和成立的。或者说&#xff0c;如果认为 是某一种单位&#xff08;虚数 为单位&#xff09;&#xff0c;那么 的平方 显然也是一种单位&#xff08;-1为单位&#xff09…...

LeetCode算法题(Go语言实现)_57

题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 一、代码实现&#xff08;回溯法&#xff09; func letterCombinatio…...

从GPT-5到Claude 3:大模型竞赛的下一站是什么?

从GPT-5到Claude 3&#xff1a;大模型竞赛的下一站是什么&#xff1f; 引言 随着人工智能技术的飞速发展&#xff0c;大语言模型&#xff08;LLM&#xff09;已经成为推动自然语言处理&#xff08;NLP&#xff09;领域进步的关键力量。自2018年OpenAI推出GPT-1以来&#xff0…...

leetcode - 字符串

字符串 466. 统计重复个数 题目 定义 str [s, n] 表示 str 由 n 个字符串 s 连接构成。 例如&#xff0c;str ["abc", 3] "abcabcabc" 。 如果可以从 s2( )中删除某些字符使其变为 s1&#xff0c;则称字符串 s1( )可以从字符串 s2 获得。 例如&#xf…...

运维打铁:网络基础知识

文章目录 一、网络架构1. 网络架构图2. 各层级功能3. 机房网络常见问题及解决方案 二、交换技术1. 交换技术基础2. 交换技术分类3. 广播域相关概念4. ARP 协议5. 三层交换机6. VLAN&#xff08;虚拟局域网&#xff09; 三、路由技术1. 路由器端口类型及功能2. 路由器功能3. 路由…...

黑马商城-微服务笔记

认识微服务 单体架构 微服务架构 微服务拆分 服务拆分原则 什么时候拆分&#xff1f; ●创业型项目&#xff1a;先采用单体架构&#xff0c;快速开发&#xff0c;快速试错。随着规模扩大&#xff0c;逐 渐拆分。 ●确定的大型项目&#xff1a;资金充足&#xff0c;目标明确&a…...

XCZU19EG-2FFVC1760I Xilinx赛灵思FPGA Zynq UltraScale+MPSoC

XCZU19EG-2FFVC1760I 属于 Zynq UltraScaleMPSoC EG&#xff08;Enhanced General&#xff09;系列&#xff0c;采用 20nm FinFET 工艺制造&#xff0c;该型号的速度等级为 -2&#xff08;0.85V VCCINT&#xff09;、工业级温度&#xff08;-40℃ 至 100℃&#xff09;&#xf…...

第六章 QT基础:3、QT的打包和部署

问题一&#xff1a;什么是打包和部署&#xff1f; 打包和部署是将开发完成的程序分发给用户并使其能够在目标环境中运行的两个重要步骤。 打包&#xff1a;指的是将开发完成的程序及其依赖的所有资源&#xff08;如图标、配置文件、动态链接库、字体等&#xff09;打包成一个可…...

【测试报告】幸运闪烁抽奖系统(Java+Selenium+Jmeter自动化测试)

一、项目背景 幸运闪烁抽奖系统 是一款基于 Spring Boot 实现的前后端分离式的网络抽奖系统&#xff0c;操作便捷&#xff0c;安全可靠。有管理员和普通用户两个角色&#xff0c;支持管理员创建普通用户、新建活动奖品、创建抽奖活动、进行抽奖、通过短信/邮箱通知中奖用户等功…...

块压缩与图片压缩优缺点对比

块压缩与图片压缩优缺点对比 块压缩&#xff08;Block Compression&#xff09; ✅ 优点 硬件加速支持 直接被GPU读取&#xff0c;无需CPU解压显著降低内存带宽消耗&#xff08;适合移动设备&#xff09; 随机访问特性 44/88像素块独立压缩支持直接定位读取特定纹理区域 固…...

C++算法(14):K路归并的最优解法

问题描述 给定K个按升序排列的数组&#xff0c;要求将它们合并为一个大的有序数组。例如&#xff0c;输入数组[[1,3,5], [2,4,6], [0,7]]&#xff0c;合并后的结果应为[0,1,2,3,4,5,6,7]。 解决方案 思路分析 合并多个有序数组的高效方法是利用最小堆&#xff08;优先队列&…...

2025.04.23【Treemap】树状图数据可视化指南

Multi-level treemap How to build a treemap with group and subgroups. Customization Customize treemap labels, borders, color palette and more 文章目录 Multi-level treemapCustomization Treemap 数据可视化指南Treemap 的基本概念为什么使用 TreemapTreemap 的应用…...

2025新一代人工智能技术发展及其应用

新一代人工智能技术发展及其应用 一、人工智能概述&#xff08;一&#xff09;定义&#xff08;二&#xff09;动力&#xff08;三&#xff09;发展脉络 二、新一代人工智能技术&#xff08;一&#xff09;大语言模型&#xff08;二&#xff09;自然语言处理&#xff08;三&…...

vue3中slot(插槽)的详细使用

在 Vue 3 中&#xff0c;slot&#xff08;插槽&#xff09;是一种强大的组件内容分发机制&#xff0c;它允许父组件向子组件传递内容&#xff0c;从而使组件的使用更加灵活。以下是关于 Vue 3 中 slot 的详细介绍 一、默认插槽 这是最基本的插槽形式。子组件中使用定义一个插…...

大模型面经 | 春招、秋招算法面试常考八股文附答案(五)

大家好,我是皮先生!! 今天给大家分享一些关于大模型面试常见的面试题,希望对大家的面试有所帮助。 往期回顾: 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题一) 大模型面经 | 春招、秋招算法面试常考八股文附答案(RAG专题二) 大模型面经 | 春招、秋招算法…...

【PCB工艺】推挽电路及交越失真

推挽电路(Push-Pull Circuit) 推挽电路(Push-Pull Circuit) 是一种常用于功率放大、电机驱动、音频放大等场合的电路结构,具有输出对称、效率高、失真小等优点。 什么是推挽电路? 推挽是指:由两种极性相反的器件(如 NPN 和 PNP、NMOS 和 PMOS)交替导通,一个“推”电…...

接口访问数据库报错问题记录

报错信息&#xff1a; java.sql.SQLException: Access denied for user rootXXX.XX.XX.XX (using password: YES) 解决方法&#xff1a; -- 授予 root 用户从 XXX.XX.XX.XX 访问所有数据库的权限 GRANT ALL PRIVILEGES ON *.* TO 数据库用户XX.XX.XX.XXX IDENTIFIED BY 数…...