mysql全文检索

MySQL 全文检索的实现 这有朋友聊到他们的系统中要接入全文检索,这让我想起了很久以前为一个很古老的项目添加搜索功能的事儿。一提到全文检索,我们首先就会想到搜索引擎。也就是用一个词、一段文本搜索出匹配的内容。一般这种技术都有对应的实现方式,ES(ElasticSearch)就是专门干这个的,如果你们的业务中明确需要全文检索,或者简单一点说,需要根据关键词搜索出匹配的内容,那就直接用 ES 就好了。无论你怎么调研,都不推荐使用 MySQL 实现这种需求,显而易见,MySQL 作为关系型数据库,本身就不适合做搜索这种需求。 阅读详情

 

http://androider.javaeye.com/blog/643486

 

mysql到版本3.23.23时,开始支持全文检索,通过语句SELECT ... FROM ... MATCH(...)AGAINST(...)来在整个表中检索是否有匹配的,全文索引是一个定义为fulltext的类型索引,应用在myisam表中。值得一提的是对于一个大的数据库来说,把数据装载到一个没有fulltext索引的表中,然后再添加索引,这样速度会非常快,但是把数据装载到一个已经有fulltext索引的表中,这样速度非常慢的。

 

首页要先明白mysql的全文检索原理:mysql使用的是一个非常简单的剖析器来将文本分隔成词,空格、标点等,比如‘welcomtoyou’将分隔为三个词‘welcom’、‘to’、‘you’,但是对中文来说,比如‘人力方网站正式上线’,这将无法分隔,因此目前mysql只支持英文的全文检索。

 

下面我们通过实例来一步步把全文检索的过程解释清楚:

首页我们建立表与初始化数据

Sql代码 复制代码
  1. CREATE TABLE IF NOT EXISTS `category` (      
  2.   `id` int(10) NOT NULL auto_increment,      
  3.   `fid` int(10) NOT NULL,      
  4.   `catname` char(255) NOT NULL,      
  5.   `addtime` char(10) NOT NULL,      
  6.   PRIMARY KEY  (`id`),      
  7.   FULLTEXT KEY `catname` (`catname`)      
  8. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;      
  9.      
  10.      
  11. INSERT INTO `category` (`id`, `fid`, `catname`, `addtime`) VALUES     
  12. (1, 0, 'welcome to you!', '1263363380'),      
  13. (2, 0, 'hello phpjs,you are welcome', '1263363416'),      
  14. (3, 0, 'this is the fan site of you', '1263363673');     
  15.    
 

在具体实例之前,我们分析下msyql全文检索的语法:函数 MATCH() 对照一个文本集(包含在一个 FULLTEXT索引中的一个或多个列的列集)执行一个自然语言搜索一个字符串。搜索字符串做为 AGAINST()的参数被给定。搜索以忽略字母大小写的方式执行。说白了就是MATCH给定匹配的列(fulltext类型索引),AGAINST给定要匹配的字符串,多个用空格、标点分开,mysql会自动分隔。

1、

SQL代码
  1. SELECT * FROM `category` WHERE MATCH(catname) AGAINST('phpjs')  

 

返回结果:

id  fid catname                                addtime  
2  0   hello phpjs,you are welcome 1263363416

匹配出了含有phpjs关键字的行数据。

 

2、

SQL代码
  1. SELECT * FROM `category` WHERE MATCH (catname) AGAINST ('this')  

 

按照上面的思路,第三行数据含有this,因此应该可以匹配出第三行数据的,但事实却奇怪得很,返回结果为空,为什么呢?

原来是mysql指定了最小字符长度,默认是4,必须要匹配大于4的才会有返回结果,可以用SHOW VARIABLESLIKE'ft_min_word_len'来查看指定的字符长度,也可以在mysql配置文件my.ini 更改最小字符长度,方法是在my.ini 增加一行比如:ft_min_word_len = 2,改完后重启mysql即可。

 

3、这里我们要确定把最小字符改为2了,因为3行记录都有‘you’,因此心想,匹配‘you’就可以返回所有结果了

SQL代码
  1. SELECT * FROM `category` WHERE MATCH (catname) AGAINST ('you')  
 

返回结果还是为空,大跌眼镜了吧,这又是为什么呢?

原来mysql在集和查询中的对每个合适的词都会先计算它们的权重,一个出现在多个文档中的词将有较低的权重(可能甚至有一个零权重),因为在这个特定的集中,它有较低的语义值。否则,如果词是较少的,它将得到一个较高的权重,mysql默认的阀值是50%,上面‘you’在每个文档都出现,因此是100%,只有低于50%的才会出现在结果集中。

 

4、有人会想,我不去管权重大小,只要有匹配的就给我返回结果集中,那么该如何做呢?

mysql到 4.0.1 时,可以使用 IN BOOLEAN MODE 修饰语来执行一个逻辑全文搜索

SQL代码
  1. SELECT * FROM `category` WHERE MATCH(catname) AGAINST('you' IN BOOLEAN MODE)  

 

 

总结:1、要注意最小字符的长度;

          2、要注意关键词的权重;

 

ps,一些学习资料:

http://www.111cn.net/database/110/FULLTEXT-mysql.htm

 

http://onlamp.com/pub/a/onlamp/2003/06/26/fulltext.html

 

http://dev.mysql.com/doc/refman/5.1/zh/functions.html#fulltext-query-expansion


激光可燃气体传感器:核心技术环节分析 激光可燃气体传感器核心技术涵盖七个维度:1)TDLAS光谱吸收与调制技术(检测下限ppm级);2)DFB激光器与双闭环温控系统(波长稳定性±0.0036nm);3)微弱信号处理技术(信噪比提升60dB);4)环境补偿算法(温压补偿误差<±1%);5)本质安全防爆设计(ExiaIICT4Ga等级);6)智能边缘计算(STM32L476芯片);7)多重性能验证(响应时间<1秒)。通过微型化、多气体检测等创新,该技术已在工业安全等领域替代传统方案,实现高精度检测。(149字) 阅读详情

相关推荐

基于大模型的急性重症胰腺炎全流程预测与诊疗方案研究

本研究构建了基于大模型的急性重症胰腺炎(SAP)全流程预测与诊疗系统,实现了从术前风险评估到术后康复管理的精准诊疗闭环。通过整合临床信息、实验室检查和影像学等多源数据,模型在测试集上预测准确率达X%,AUC为X,显著优于传统评分系统。研究创新性地将预测结果应用于手术方案制定、麻醉决策、并发症防控及个性化护理,形成智能化诊疗方案。验证结果显示模型具有良好的稳定性和临床适用性,同时配套的健康教育体系提升了患者自我管理能力。尽管存在样本局限性和模型可解释性等不足,该研究为SAP的精准诊疗提供了新范式,未来可通过扩

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1116

聊聊Mysql中的全文检索

我们都知道 InnoDB 在模糊查询数据时使用 "%xx" 会导致索引失效,但有时需求就是如此,类似这样的需求还有很多,例如,搜索引擎需要根据用户数据的关键字进行全文查找,电子商务网站需要根据用户的查询条件,在可能需要在商品的详细介绍中进行查找,这些都不是B+树索引能很好完成的工作。通过数值比较,范围过滤等就可以完成绝大多数我们需要的查询了。但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较,全文索引就是为这种场景设计的。

爱琴孩的博客 3466

YOLOv8实战:5分钟搞定Windows环境下的目标检测模型部署(附常见报错解决方案)

本文详细介绍了在Windows环境下快速部署YOLOv8目标检测模型的实战指南,包括环境配置、模型加载、快速验证及常见报错解决方案。通过5分钟快速入门教程,帮助开发者高效实现计算机视觉应用,特别适合需要快速上手的AI开发者。

weixin_30566063的博客 556

Mysql全文索引

Mysql 全文检索

青青子衿的博客 1万+

两张 300I Duo 部署 Qwen3.5‑32B

开发者成功使用两张华为300IDuo(共4颗Ascend310P3芯片)部署Qwen3/Qwen3.5的30B/32B模型,并公开详细步骤。关键点包括:硬件需两张300IDuo(每芯片44GB显存),软件需CANN≥24.1和MindIE2.3.0专用镜像。部署流程涵盖驱动安装、模型下载(需修改为FP16格式)、容器启动、张量并行配置(TP=4)等环节。实测显示每芯片显存占用20-35GB,系统稳定运行。该方案已在知乎等平台验证可行,适用于Qwen3.5-32B等同类模型。

evering的博客 2254

Carla中如何渲染opendrive车道线和车道标识(全网独家,附代码)

carla是可以单独加载opendrive并渲染路面的,但是无法把车道线渲染出来,这是一个大坑,因为没有车道线就无法给感知输入。楼主已经实现,直接渲染车道线或者带PBR贴图的车道标识。实现起来非常简单,但必须对carla源码以及ue的开发足够了解。在carla源码中有一个很重要的类opendrivegenerator,它是关于opendrive渲染的全部方法,但是你是找不到它实例化的地方的,因为它被定义在蓝图关卡中。网上包括carla官方关于carla源码的分析少之又少,楼主将自己的经验写出来供大家参考。

u013998156的博客 1090

Mysql 简单实现全文检索(FULLTEXT)

Mysql 简单实现全文检索(FULLTEXT) MyISAM 和 InnoDB 存储引擎均支持;

my476530的博客 2439

Labview界面多按钮控件的一种处理方法

当界面中存在多个按钮控件时候,此时如果逐个为每个控件添加事件条件则会显得较为麻烦,此处提供了一种对多控件进行批量处理的方法

miracleis的博客 2702

两万字详解如何使用MySQL的全文本搜索功能进行高级的数据查询和选择

邻近搜索是许多全文本搜索支持的一个特性,它能搜索相邻的词(在相同的句子中、相同的段落中或者在特定数目的词的部分中,等等)。在索引之后,使用两个函数 Match() 和 Against() 执行全文本搜索,其中 Match() 指定被搜索的列, Against() 指定要使用的搜索表达式。等级由MySQL根据行中词的数目、唯一词的数目、整个索引中词的总数以及包含该词的行的数目计算出来。),所以也被检索出来。如果指定多个搜索项,则包含多数匹配词的那些行将具有比包含较少词(或仅有一个匹配)的那些行高的等级值。

白话机器学习 1748

管好 SAP Fiori Launchpad Content:技术目录、业务目录与 KPI 工具的完整治理思路

SAP Fiori Launchpad 作为企业级统一入口,需通过技术目录(源对象)和业务目录(引用编排)分层治理。技术目录由 Launchpad App Manager 维护,负责应用描述对象(Tile 和 Target Mapping)的创建与管理;业务目录由 Launchpad Content Manager 编排,通过引用技术目录对象实现灵活配置。分析型内容则通过 F2814 统一管理。这种分层设计支持应用复用,便于升级维护,是 SAP S/4HANA 项目中实现高效内容治理的关键。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 130

【WorkBuddy从入门到精通实战教程】第 4 章 快速完成第一个 WorkBuddy 任务

摘要:WorkBuddy任务创建指南详细说明了从新建任务到结果验收的全流程。操作步骤包括:选择工作目录、设置模式(Craft/Ask/Plan)、指定AI模型、输入任务说明(需包含目标/输入/动作/约束/输出/验收6要素),可选配Skill等高级设置。文中提供三个入门示例:A)文件整理需保持原文件并生成分类方案;B)会议纪要要求结构化输出且所有内容有原文依据;C)Word转PPT需遵循品牌规范并控制页数。特别强调首次操作应在演练目录测试,处理真实数据前需确认授权范围,输出文件需检查涉密信息并按规范共享。(1

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 1335

mysql的全文检索

1.使用Mysql全文检索fulltext的先决条件 表的类型必须是MyISAM 建立全文检索的字段类型必须是char,varchar,text 2.建立全文检索先期配置 由于Mysql的默认配置是索引的词的长度是4,所以要支持中文单字的话,首先更改这个. *Unix用户要修改my.cnf,一般此文件在/etc/my.cnf,如果没有找到,先查找一下find / -name ‘my.cnf’ 在 [mysqld] 位置内加入: ft_min_word_len = 2 其它属性还有 ft_wordli

qq_38665250的博客 6381

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

mysql 全文检索_MySQL全文检索

一、概述MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。二、语法MATCH (col1,col2,...) AGAINST (expr [search_modifier])search_modifier: {IN BOOLEAN MODE | WITH QUERY EXPANSION }例如:SELECT * FROM tab_name WHE...

weixin_31597865的博客 899

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

mysql 中文全文检索_MySQL中文全文检索

一、概述MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。二、语法例如:SELECT * FROM tab_name WHERE MATCH ('列名1,列名2...列名n') AGAINST('词1 词2 词3 ... 词m');即:MATCH 相当于要匹配的列,而 AGAINST 就是要找的内容。这里的table需要是MyISAM类型的表,c...

weixin_35414437的博客 928

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MySQL 全文检索

MySQL 全文检索支持MySQL 全文检索支持 MyISAM 40以上 InnoDB564以上 全文检索语法 检索方式 简单示例 MySQL全文索引相关配置 注意事项 MyISAM (4.0以上)从MySQL 4.0以上 myisam引擎就支持了full text search 全文搜索。 那么怎么使用了,简单看看: 1.创建一个表,指定支持fulltext的列 CREATE TABLE a

Moxiao__墨箫 1277

mysql 全文检索 语法_MySQL全文检索笔记 转载

1. MySQL 4.x版本及以上版本提供了全文检索支持,但是表的存储引擎类型必须为MyISAM,以下是建表SQL,注意其中显式设置了存储引擎类型CREATE TABLEarticles (idINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,titleVARCHAR(200),bodyTEXT,FULLTEXT (title,body)) ENGI...

weixin_39881802的博客 216

mysql 全文检索 中文_MySQL全文检索笔记

1. MySQL 4.x版本及以上版本提供了全文检索支持,但是表的存储引擎类型必须为MyISAM,以下是建表SQL,注意其中显式设置了存储引擎类型CREATE TABLEarticles (idINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,titleVARCHAR(200),bodyTEXT,FULLTEXT (title,body)) ENGI...

weixin_39521835的博客 159

mysql全文检索语句

MySQL全文检索实现指南 作为一名经验丰富的开发者,我很高兴能帮助刚入行的小白们学习MySQL全文检索的实现方法。全文检索是一种在文本数据中查找关键词的技术,广泛应用于搜索引擎、数据分析等领域。本文将详细介绍MySQL全文检索的实现流程、代码示例和注意事项。 1. 全文检索流程 实现MySQL全文检索的流程可以分为以下几...

weixin_35143166的博客 216

【MySQL技术内幕】32-全文检索

全文检索(Full-Text Search)是将存储于数据库中的整本书或整篇文章中的任意内容信息查找出来的技术。它可以根据需要获得全文中有关章、节、段、句、词等信息,也可以进行各种统计和分析。在之前的 MySQL数据库中, InnoDB存储引擎并不支持全文检索技术。大多数的用户转向 MyISAM存储引擎,这可能需要进行表的拆分,并将需要进行全文检索的数据存储为 MyISAM表。这样的确能够解决逻辑业务的需求,但是却丧失了 InnoDB存储引擎的事务性,而这在生产环境应用中同样是非常关键的。

smart_an的专栏 1444

MySQL中的全文检索(1)

一、概述      MySQL中的全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。二、语法      MATCH (col1,col2,...) AGAINST (expr [search_modifier])      search_modifier: { IN BOOLEAN MODE | WITH QUERY EXPANSION }      例如

navygong的专栏 2万+

mysql全文检索性能

Lucene可以对MYSQL进行全文检索吗 Lucene是可以的,它常见的用例就是在一个或者多个数据库表进行全文检索。虽然MySql有全文检索的功能,但是如果字段和数据量增加,MySql的性能会减低很快。 本回答由网友推荐 Lucene可以对MYSQL进行全文检索吗 Lucene是可以的,它常见的用例就是在一个...

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 677

mysql的检索方法,详解MySQL全文检索方法

1. MySQL 4.x版本及以上版本提供了全文检索支持,但是表的存储引擎类型必须为MyISAM,以下是建表SQL,注意其中显式设置了存储引擎类型CREATETABLEarticles(idINTUNSIGNEDAUTO_INCREMENTNOTNULLPRIMARYKEY,titleVARCHAR(200),bodyTEXT,FULLTEXT(title,body))...

weixin_33289151的博客 661

MySQL全文检索介绍

MySQL的全文检索功能是一种高效搜索和匹配文本字段的方法,特别适用于处理大量文本数据的应用场景。

rock365的博客 658

mysql5.7中文全文检索,让MySQL支持中文全文检索

因为中文词间并没有明显的区隔,所以中文的分词是按照字典、词库的匹配和词的频度统计,或是基于句法、语法分析的分词,而MySQL并不具备此功能,所以MySQL对中文全文检索的支持几乎为零。目前很多网站和系统都提供了全文搜索功能,用户可以输入词或者语句来定位匹配的记录。在后台,可以使用Select查询中的Like语句来执行这种查询,尽管这种方法可行,但对于全文查找而言,这是一种效率极端低下的方法,尤其在...

weixin_28856331的博客 635

MySQL的全文检索

概述 版本说明 MySQL5.5中,只有MyISAM支持全文检索。 MySQL5.6中,InnoDB开始支持全文检索。 MySQL5.7中,可以使用N-Gram插件支持全文检索。此插件支持中/日/韩文。 全文检索的使用限制 只能在类型为CHAR、VARCHAR或者TEXT的字段上创建全文索引。 只支持InnoDB和MyISAM引擎。 一个表只能建立一个全文检索字段。如需要检索多个字段,需要将多个字段一起创建一个索引。 N-Gram全文解析器 MySQL中使用全局变量"ngram_token_siz

just4you的博客 1149

如何使用 MySQL 全文检索

全文检索是一种专门为处理文本数据而设计的查询技术,能够快速地从大量文本数据中查找和提取相关信息。与传统的 LIKE 查询相比,全文检索不仅速度更快,还支持更复杂的搜索功能,例如布尔模式搜索。MySQL 从版本 5.6 开始支持 InnoDB 上的全文索引,5.7.6 开始,内置了 ngram 全文解析器。

全球首个被优快云气死的程序员:阿小信 816
上一篇: VB.net 调用自己封装起来的用VB.net做的DLL
下一篇: 利用Flash AS2.0实现读取php xml数据和插入记录
ahstudy
博客等级 码龄19年 60粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值