全文搜索是 MySQL 中的一种索引。索引用于表,可以在创建表时或稍后使用 ALTER TABLE 或 INDEX 在 CHAR 或 TEXT 列上创建。对于大型数据库,将数据加载到没有索引的表中,然后使用 ALTER TABLE(或 INDEX)创建索引将非常快。将数据加载到已有索引的表中将非常慢。
1. 使用 MySQL 全文搜索的前提条件
表类型必须是
全文搜索的字段类型必须是char,text
2.建立全文搜索初步配置
由于MySQL默认配置是索引单词的长度为4,如果要支持汉字,首先要改掉这个。
*Unix 用户需要修改 f,通常这个文件在 /etc/f 中,如果找不到,先用 find / -name 'f' 搜索
在 [] 空格内添加:
= 2
其他属性包括
=gbk
= /home/soft/mysql/share/mysql/-gbk.txt
= /home/soft/mysql/share/mysql/-gbk.txt
稍微解释一下:
代表字典的字符集,目前支持较好的有(UTF-8、gbk、big5)
它是一个单词列表文件,每行包含一个单词及其频率(由几个制表符或空格分隔,用于消除歧义)
表示过滤掉未索引的词汇,每行一个。
添加到索引中的单词的最小长度,默认为4,为了支持中文字符改为2
3.建立全文搜索
创建表时使用关键字标识字段,使用ALTER TABLE(或INDEX)为现有表创建索引。
索引在();
4. 使用全文搜索
在WHERE子句中使用MATCH函数,使用标识符为索引关键字,而IN MODE只需要包含关键字,不管其位置或者是否是起始位置。
* 来自匹配(标签)('旅游' IN MODE);
5.详细说明请访问MySQL官方网站
这是针对 MySQL 5.1 的,不过 4.X 也可以作为参考,基本一样。我使用的是 MySQL 4.1。
MySQL很早就支持全文索引了,目前它是一种只适用于表的索引类型,而且对索引列的数据类型有限制,只能是char、、、text这三种类型的组合。你可以在创建表的时候定义它,也可以在表创建之后通过语句alter table或者index来添加索引。总之,第一种和第二种的效果是一样的,但是两者的效率是有很大差别的。大量的实验证明,对于大量的表来说,先加载数据再定义全文索引的速度,要比向已经定义全文索引的表中插入大量数据的速度好得多。你一定会问:这问什么?其实原因很简单,前者只需要操作你的索引表一次,排序和比较都是在内存中完成然后写入硬盘;而后者则需要从硬盘一个一个的读取索引表,然后再进行比较、写入,速度自然会很慢。 MySQL 通过 match() 和 () 两个函数来实现全文索引查询功能。match() 中的字段名必须与 中定义的字段一致,如果使用模式搜索,也允许 中只包含某个字段,而不用全部列出。 () 定义了需要搜索的字符串,以及要求数据库以何种模式进行全文索引搜索查询。下面的示例介绍了支持的三种搜索模式。
MySQL全文索引与中文分词总结及一般关键词搜索流程
MySQL全文检索中文分词
MySQL 5.1+支持中文的全文搜索及分词插件
如果你在家里用搜索引擎的话,你会发现,只有当整词命中率为0的时候,才会发生分词。
至于如何分词,可以参考百度搜索的测试结果:
如搜索“徐祖宁宁”,结果为“徐祖”+“宁宁”。(搜索姓名时,可能有100个姓氏的词典,自动将姓氏后的第一个字符放在前面。)
·搜索“徐願願”(Xu ),结果为“徐願願”(Xu )。(这意味着“婉願”属于“徐”。同上,因为徐是姓氏。)
·搜索“徐祖誓言宁”,结果为“徐祖”+“誓言宁”。 (因为“愿宁”是一个字,“徐”只有“祖”。)
·搜索“徐祖宁高”,结果为“徐祖宁”。(由于“宁高”不是关键词,“宁”属于首字。而“高”是单个单词,为了提高首字搜索效率,可以省略“高”)
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。