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

MySQL 全文索引实战:搜索功能的正确打开方式

开场白做搜索功能的时候很多人第一反应是 LIKE ‘%关键词%’数据量小的时候没问题数据一大直接全表扫描。我之前有个项目商品表的 LIKE 搜索在 50 万条数据时就要 3 秒以上根本没法用。后来上了全文索引查询时间降到毫秒级。不过全文索引也有自己的坑——中文分词、停用词、最小搜索长度这些搞不明白一样用不好。全文索引基础创建全文索引-- 建表时创建CREATETABLEarticles(idBIGINTPRIMARYKEYAUTO_INCREMENT,titleVARCHAR(200),contentTEXT,FULLTEXTINDEXft_title_content(title,content));-- 已有表添加ALTERTABLEarticlesADDFULLTEXTINDEXft_title_content(title,content);-- 单列全文索引ALTERTABLEarticlesADDFULLTEXTINDEXft_content(content);基本查询-- 自然语言模式默认SELECT*FROMarticlesWHEREMATCH(title,content)AGAINST(数据库优化);-- 布尔模式SELECT*FROMarticlesWHEREMATCH(title,content)AGAINST(MySQL -OracleINBOOLEANMODE);-- 查询扩展模式SELECT*FROMarticlesWHEREMATCH(title,content)AGAINST(数据库WITHQUERY EXPANSION);MATCH 里的列必须和全文索引定义的列完全一致顺序也要一样。如果索引是(title, content)查询必须写MATCH(title, content)不能写MATCH(content, title)。三种搜索模式自然语言模式默认模式按相关性排序SELECT*,MATCH(title,content)AGAINST(数据库优化)ASscoreFROMarticlesWHEREMATCH(title,content)AGAINST(数据库优化)ORDERBYscoreDESC;相关性分数基于词频TF和逆文档频率IDFMySQL 内部计算不需要我们操心。搜索的是数据库和优化两个词的 OR 组合——包含任意一个词的记录都会返回。布尔模式精确控制搜索逻辑-- 必须包含 MySQL不能包含 OracleSELECT*FROMarticlesWHEREMATCH(title,content)AGAINST(MySQL -OracleINBOOLEANMODE);-- 必须同时包含 MySQL 和 优化SELECT*FROMarticlesWHEREMATCH(title,content)AGAINST(MySQL 优化INBOOLEANMODE);-- 包含 MySQL 或 OracleSELECT*FROMarticlesWHEREMATCH(title,content)AGAINST(MySQL OracleINBOOLEANMODE);-- 包含以数据开头的词SELECT*FROMarticlesWHEREMATCH(title,content)AGAINST(数据*INBOOLEANMODE);-- 必须包含 MySQL且优化权重更高SELECT*FROMarticlesWHEREMATCH(title,content)AGAINST(MySQL 优化INBOOLEANMODE);布尔模式的操作符操作符含义必须包含-不能包含无可选包含则加分*通配符只能后缀“”短语匹配 增减权重()分组~取反降低相关性短语匹配要特别注意-- 精确匹配数据库优化这个短语SELECT*FROMarticlesWHEREMATCH(title,content)AGAINST(数据库优化INBOOLEANMODE);查询扩展模式两步搜索先搜一次用结果中的词再搜一次。适合用户搜索词太少、结果不够的情况。SELECT*FROMarticlesWHEREMATCH(title,content)AGAINST(数据库WITHQUERY EXPANSION);但这个模式容易返回不相关的结果慎用。中文分词问题这是全文索引最大的坑。MySQL 默认的分词器按空格和标点分词中文没有空格整段中文会被当成一个词-- content MySQL数据库优化实战-- 默认分词器会把MySQL数据库优化实战当成一个整体词-- 搜数据库搜不到SELECT*FROMarticlesWHEREMATCH(content)AGAINST(数据库);解决方案一ngram 分词器MySQL 5.7.6-- 建表时指定 ngram 分词器CREATETABLEarticles(idBIGINTPRIMARYKEYAUTO_INCREMENT,titleVARCHAR(200),contentTEXT,FULLTEXTINDEXft_title_content(title,content)WITHPARSER ngram);-- 添加索引时指定ALTERTABLEarticlesADDFULLTEXTINDEXft_content(content)WITHPARSER ngram;ngram 分词器按固定长度把文本切成片段默认 n2二元分词数据库优化 → 数据, 据库, 库优, 优化ngram 的 n 值通过ngram_token_size参数配置范围 1-10默认 2。改这个参数需要重启 MySQL# my.cnf [mysqld] ngram_token_size 2n2 意味着搜索词至少 2 个字符才能命中。搜单个字比如数搜不到。解决方案二手动分词在插入数据前用应用层分词器比如 IK、jieba把中文文本切成词用空格拼接后存储-- 原文MySQL数据库优化实战-- 分词后存储MySQL 数据库 优化 实战INSERTINTOarticles(title,content)VALUES(MySQL数据库优化实战,MySQL 数据库 优化 实战);这种方式灵活分词质量高但增加了应用层复杂度。 ## 全文索引的配置参数 ### ft_min_word_len / innodb_ft_min_token_size 最小索引词长度默认 InnoDB 是 3MyISAM 是 4。长度小于这个值的词不会被索引。 ini# my.cnf[mysqld]innodb_ft_min_token_size1# InnoDBft_min_word_len1# MyISAM改成 1 之后需要重建全文索引ALTERTABLEarticlesDROPINDEXft_content;ALTERTABLEarticlesADDFULLTEXTINDEXft_content(content)WITHPARSER ngram;innodb_ft_cache_size全文索引缓存大小默认 32MB。批量插入大量数据时增大这个值可以提升索引构建速度。ft_query_expansion_limit查询扩展模式的最大扩展词数默认 20。全文索引 vs LIKE维度全文索引LIKE索引利用走全文索引前缀匹配走索引%xx%全表扫描搜索精度分词匹配支持相关性排序模糊匹配无排序中文支持需要 ngram 或手动分词直接支持写入性能需要维护索引写入较慢无额外开销存储开销索引占额外空间无额外空间简单说精确匹配用 LIKE搜索功能用全文索引。实战建议搜索场景用全文索引匹配场景用 LIKE——别拿全文索引当万能的中文必须用 ngram 分词器——否则搜不到东西布尔模式的 和 - 组合最实用——精确控制搜索结果注意最小搜索长度——ngram_token_size2 时搜单个字搜不到全文索引会降低写入性能——不适合频繁更新的表数据量特别大时考虑 Elasticsearch——MySQL 全文索引有上限亿级数据还是上 ES 吧小结全文索引是 MySQL 内置的搜索方案适合中小规模的搜索需求。关键点就三条中文用 ngram 分词器查询用布尔模式精确控制搜索长度注意最小值限制。如果你的搜索需求很复杂拼音搜索、同义词、高亮等还是得上 ElasticsearchMySQL 全文索引搞不定。相关阅读MySQL 官方文档 - Full-Text Searchngram 分词器全文索引布尔模式

相关文章:

MySQL 全文索引实战:搜索功能的正确打开方式

开场白 做搜索功能的时候,很多人第一反应是 LIKE ‘%关键词%’,数据量小的时候没问题,数据一大直接全表扫描。我之前有个项目,商品表的 LIKE 搜索在 50 万条数据时就要 3 秒以上,根本没法用。后来上了全文索引&#x…...

MySQL JSON 类型操作:从入门到不踩坑

开场白 MySQL 5.7 加了 JSON 类型之后,很多人觉得终于可以在关系型数据库里存 JSON 了,不用再拆表了。但说实话,我一开始用 JSON 类型的时候也没少踩坑——查询语法记不住、索引不会建、JSON 路径表达式写错……后来用多了才发现&#xff0c…...

通过Hermes Agent对接Taotoken自定义模型提供方

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Hermes Agent对接Taotoken自定义模型提供方 Hermes Agent是一个流行的AI Agent开发框架,它支持通过统一的接口调用…...

LinkSwift网盘直链下载助手:一站式解决9大网盘下载难题

LinkSwift网盘直链下载助手:一站式解决9大网盘下载难题 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…...

170家具身智能公司名单

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达具身智能:人工智能的下一个浪潮!今年再次被写入《政府工作报告》中,已经成为国家未来重点培育产业。市场方面,具身智能近一年融资更是爆火&…...

【具身智能】最大微信群

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达具身智能:人工智能的下一个浪潮!今年再次被写入《政府工作报告》中,已经成为国家未来重点培育产业。市场方面,具身智能近一年融资更是爆火&…...

云安全与合规

云安全与合规 1. 技术分析 1.1 云安全概述 云安全是云计算的关键考量: 云安全维度数据安全: 加密、访问控制网络安全: 防火墙、VPN身份管理: IAM、SSO合规性: GDPR、SOC2安全责任:服务商: 基础设施安全用户: 数据和应用安全1.2 云安全架构 安全层次物理层: 数据…...

无服务器架构与Serverless

无服务器架构与Serverless 1. 技术分析 1.1 无服务器架构概述 无服务器架构是云计算的重要演进: Serverless特点无需管理服务器事件驱动按需付费自动伸缩Serverless服务:FaaS: 函数即服务BaaS: 后端即服务DBaaS: 数据库即服务1.2 FaaS工作原理 FaaS执行流程事件触发…...

2026论文写作工具红黑榜:AI论文工具怎么选?别再瞎找了!

2026年论文写作工具红黑榜出炉,红榜优先推荐千笔AI、ThouPen、豆包,适配国内学术规范,提升写作效率;黑榜需避开低质免费工具、无真实引用平台、过度依赖全文生成的工具。选择时应按需求匹配三维模型(需求匹配度 - 数据…...

容器化与Kubernetes

容器化与Kubernetes 1. 技术分析 1.1 容器化概述 容器化是现代应用部署的核心技术: 容器化优势轻量级: 共享内核一致性: 环境一致可移植: 跨平台隔离性: 资源隔离容器技术:Docker: 容器引擎containerd: 容器运行时CRI-O: Kubernetes兼容1.2 Kubernetes概述 Kubernet…...

2026年亲测一键生成论文工具指南(高效定稿版)

为解决学术写作中效率与合规两大核心痛点,本文精选8款高适配性AI论文写作工具(按综合优先级排序),围绕中文学术规范适配、真实参考文献生成、格式标准化、高性价比四大核心维度筛选,同时配套分场景精准选型方案与学术合…...

NISQ时代量子机器学习实战:从变分量子电路到混合架构落地

1. 量子机器学习:从NISQ时代的现实挑战到工程实践如果你关注前沿科技,最近几年一定频繁听到“量子计算”和“机器学习”这两个词。当这两个看似在不同轨道上狂奔的领域开始交汇,就诞生了一个充满想象力又极具挑战的新方向——量子机器学习。我…...

【教育科技爆款内容生产核心】:用ChatGPT批量生成带答案解析+难度分级+认知维度标签的脑筋急转弯(附可商用JSON Schema)

更多请点击: https://kaifayun.com 第一章:教育科技爆款内容生产的底层逻辑重构 教育科技领域的“爆款”并非偶然产物,而是内容价值、用户认知路径与算法分发机制三者深度耦合的结果。传统以课程大纲为中心的线性生产范式,正被“…...

利用Taotoken实现多模型备选方案以提升业务连续性

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用Taotoken实现多模型备选方案以提升业务连续性 在中大型企业将AI能力集成到关键业务流程时,服务的连续性与稳定性是…...

开源AI工具真能替代商业方案?2024最新Benchmark数据揭示92%团队忽略的关键短板

更多请点击: https://codechina.net 第一章:开源AI工具真能替代商业方案?2024最新Benchmark数据揭示92%团队忽略的关键短板 2024年Q2由MLPerf与OpenLLM-Bench联合发布的跨模态AI工具基准报告覆盖全球147个生产级AI部署团队,结果显…...

企业团队如何利用Taotoken CLI工具统一配置开发环境与API密钥

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业团队如何利用Taotoken CLI工具统一配置开发环境与API密钥 在团队协作开发中,一个常见的问题是API密钥的管理与开发…...

基于减法优化算法(SABO)优化CNN-BiGUR-Attention风电功率预测研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

2026年一键生成论文工具实测精选:5款神器从构思到提交全流程护航

写论文的焦虑,是每个科研人和学生都无法回避的日常。选题无从下手,文献检索耗时费力,格式排版反复调整,查重降重更是让人抓耳挠腮。到了2026年,AI工具早已不再只是“敲字机器”,而是进化成了能陪你从构思到…...

太顶了!只需输入需求,这几款一键生成论文工具自动生成毕业论文初稿!

毕业季论文焦虑?还在为选题、查资料、写大纲、找文献发愁?现在只需输入需求,AI 论文工具就能一键生成图文并茂的毕业论文初稿,从开题到定稿全流程搞定!千笔AI、ThouPen、豆包、DeepSeek、元宝这五款 AI 论文神器实测&a…...

面向实时决策Agent的Harness微秒级调度

面向实时决策Agent的Harness微秒级调度:从原理到落地,打造低于10us延迟的智能决策系统 副标题:适配量化交易、自动驾驶、工业控制等高实时性场景,确定性延迟保障99.999%调度成功率 摘要/引言 你有没有遇到过这些场景:量化交易策略的决策逻辑晚了5us,原本可以盈利的订单…...

2026必备!AI论文工具测评:最新好用推荐与对比分析

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…...

3分钟让AI自动分层?LayerDivider如何拯救你的PSD编辑噩梦

3分钟让AI自动分层?LayerDivider如何拯救你的PSD编辑噩梦 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为一张扁平插画需要分层编辑而头…...

NS模拟器自动化管理系统:简化游戏兼容性配置的解决方案

NS模拟器自动化管理系统:简化游戏兼容性配置的解决方案 【免费下载链接】ns-emu-tools 一个用于安装/更新 NS 模拟器的工具 项目地址: https://gitcode.com/gh_mirrors/ns/ns-emu-tools NsEmuTools是一款专为Nintendo Switch模拟器用户设计的桌面端管理解决方…...

【图像压缩】基于ADMM的卷积稀疏编码高效算法Matlab实现

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

深入解析Gofile下载器:3倍效率提升的Python多线程下载方案

深入解析Gofile下载器:3倍效率提升的Python多线程下载方案 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader 在文件传输领域,Gofile作为流行的文件共享…...

【车辆路径规划】基于RRT算法的车辆导航工具箱实现附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

MongoDB8.0新特性实战:向量搜索、时序集合与分片集群优化

MongoDB 8.0新特性实战:向量搜索、时序集合与分片集群优化 作者:Crown_22 | AI Agent & Hermes Agent 桌面程序开发者 前言 MongoDB 8.0 是一个重大版本更新,带来了多项面向 AI 和大数据场景的新特性。其中最引人注目的是原生向量搜索(Vector Search)——这让 MongoD…...

Pulumi基础设施即代码实战:用Python和TypeScript管理云资源

Pulumi基础设施即代码实战:用Python/TypeScript管理云资源 作者:Crown_22 | AI Agent & Hermes Agent 桌面程序开发者 前言 Terraform 是基础设施即代码(IaC)领域的霸主,但它使用 HCL(HashiCorp Configuration Language)这种领域专用语言,学习曲线陡峭,调试困难,…...

Solid.js信号驱动架构深度解析:告别虚拟DOM的真正实践

Solid.js信号驱动架构深度解析:告别虚拟DOM的真正实践 作者:Crown_22 | AI Agent & Hermes Agent 桌面程序开发者 前言 2026年的前端框架格局已经发生了深刻变化。React 用 Server Components 重新定义了组件模型,Vue 3.5 用 Vapor 模式抛弃了虚拟 DOM,Svelte 5 用 Ru…...

华为OD机试 新系统 C++实现【社交网络相同爱好好友查询】

社交网络相同爱好好友查询 华为OD新系统机试真题 华为OD新系统上机考试真题 5月13号 200分题型 本题更多语言题解,可点击查看:华为OD机试新系统真题 - 社交网络相同爱好好友查询(C/C/Py/Java/Js/Go)题解 题目内容 在一个社交网络中,用户之间通过"…...