全球领先的IT技术网站 |首页 |Tags |网站地图

来吧程序猿_新闻资讯

RSS

您现在正在浏览:首页 » 新闻资讯 » 职场 » Mysql全文搜索match against的用法

Mysql全文搜索match against的用法

摘要:全文检索在 MySQL 中就是一个 FULLTEXT 类型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、 VARCHAR 或 TEXT 列上创建对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中,然后再使用 ALTERTABLE (或 CREATE INDEX) 创建索引,这将是非常快的。将数据装载到一个已经有 FULLTEXT索引的表中,将是非常慢的。

 全文检索在 MySQL 中就是一个 FULLTEXT 类型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE CREATE INDEX CHAR VARCHAR TEXT 列上创建对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中,然后再使用 ALTERTABLE ( CREATE INDEX) 创建索引,这将是非常快的。将数据装载到一个已经有 FULLTEXT索引的表中,将是非常慢的。
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_wordlist_charset = gbk
ft_wordlist_file = /home/soft/mysql/share/mysql/wordlist-gbk.txt
ft_stopword_file = /home/soft/mysql/share/mysql/stopwords-gbk.txt
稍微解释一下:
ft_wordlist_charset
表示词典的字符集, 目前支持良好的有(UTF-8, gbk, gb2312,big5)
ft_wordlist_file
是词表文件, 每行包括一个词及其词频(用若干制表符或空格分开,消岐专用)
ft_stopword_file
表示过滤掉不索引的词表, 一行一个.
ft_min_word_len
加入索引的词的最小长度, 缺省是 4, 为了支持中文单字故改为 2

3.
建立全文检索 在建表中用FullText关键字标识字段,已存在的表用 ALTER TABLE ( CREATE INDEX) 创建索引CREATE fulltext INDEX index_name ON table_name(colum_name);
4.
使用全文检索
SELECTWHERE字句中用MATCH函数,索引的关键词用AGAINST标识,IN BOOLEAN MODE是只有含有关键字就行,不用在乎位置,是不是起启位置.SELECT * FROM articles WHERE MATCH (tags) AGAINST ('旅游' IN BOOLEAN MODE);

5.
详细的说明请参数Mysql官方网站 http://dev.mysql.com/doc/refman/5.1/zh/functions.html#fulltext-search
这是Mysql 5.1,不过4.X也可以做为参考,基本一置.我用的就是Mysql 4.1.

MySQL支持全文索引(Full-Text) 已经很久了,目前,fulltext是一种只适用于MyISAM表的一个索引类型,而且对定义索引列的数据类型也有限制,只能是以下三种的组合char varchartextfulltext可以在创建表的同时就一起定义好,或者在表创建完成之后,通过语句alter tablecreate index来追加索引,总之先后的效果是一样的,但是两者的效率却是存在很大差异的,大量的实验证明,对于大数量的表来说,先加载数据再来定义全文索引的 速度要远远优于在一个已经定义好全文索引的表里面插入大量数据的速度。一定会问:这是问什么呢?其实,道理很简单,前者只需要一次性对你的索引列表进行操 作,排序比较都是在内存中完成,然后写入硬盘;后者则要一条一条去硬盘中读取索引表然后再进行比较最后写入,自然这样速度就会很慢。MySQL是 通过match()against()这两个函数来实现它的全文索引查询的功能。match()中的字段名称要和fulltext中定义的字段一致,如 果采用boolean模式搜索,也允许只包括fulltext中的某个字段,不需要全部列出。against()中定义的是所要搜索的字符串以及要求数据 库通过哪种模式去执行全文索引的搜索查询。下面通过一个例子分别介绍一下fulltext所支持的3中搜索模式。

MySQL全文索引与中文分词总结及一般的关键词搜索流程
http://www.tzlink.com/info/show.php?aid=4532

mysql 全文检索 中文分词
http://hi.baidu.com/agg230/blog/item/33d3d50eada260e337d1225b.html

支持中文的MySQL 5.1+ 全文检索分词插件
http://hi.baidu.com/start_and_end/blog/item/6d6ab918b7d3800334fa412e.html

家用一下搜索引擎就会发现,分词的情况只是出现在当整词命中为0的情况下。
而具体怎样分词,大家可以参考一下baidu搜索试验结果:
·
如果搜徐祖宁宁,结果为徐祖”+“宁宁。(搜人名的情况下,它可能有一个百家姓词典,自动将姓后第一个字归前)
·
徐宁愿,结果为徐宁愿。(说明宁愿所有。同上。因为徐是姓。)
·
徐祖宁愿,结果为徐祖”+“宁愿。(因为宁愿是词,故只带。)
·
徐祖宁高,结果为徐祖宁。(因为宁高不是关键字,所以归前词所有。而可能因为是单字,为提高前词搜索效率故被省略。)

0 »

新闻专题

OS X Mavericks 欲与 Windows 8.1 试比高
OS X Mavericks 欲与 Windows 8.1 试比高

微软在美国旧金山举行的Build 2013开发者大会上推出Windows操作系统的下一代更新——Windows 8.1预览版。苹果在旧金山召开了盛大的本年度WWDC(苹果全球开发者大会)大会上推出OS X 操作系统的新版本Mac OS X Mavericks。本文针对这两个全新的系统进行10个回合的对比,看看谁才是目前最出色的桌面系统。

微软 Windows 8.1 毫无新意
微软 Windows 8.1 毫无新意

2013 年 10 月 17 日, 微软发布 Windows 8.1 更新,改进了一些 Windows 8 上饱受诟病的体验,但是毫无惊艳可言,只是在旧系统上的“缝缝补补”,总体来说,有惊喜,无惊艳。

最新资讯