资讯

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

您的位置:首页->资讯中心-> 浅谈:关于MYSQL全文检索的应用
浅谈:关于MYSQL全文检索的应用
2012-10-20 21:37:50 编辑:admin

    环境:LINUX MYSQL4/5(5以上的版本直接可以在插件形式编译进MYSQL内)使用MYSQL的朋友一定有这样的经历,那就是在检索中文的时候往往力不从心。使用LIKE的效率实在不敢恭维,而且对搜索的结果也不是很满意的。 很希望有一个完美的解决方案。但是事实的真相是残酷的。这个完美的方案可能让你绞尽脑汁还是两手空空。

    今天我给大家带来的 MYSQL中文分词全文检索 可能会让您有一种相见恨晚的感觉。下面开始讲解: 

在猪肉还是7块多的时候,我在CU里闲逛。突然看到一个大板(HIGHTMAN)的帖子。(我不记得地址了-______-).大致内容就是修改MYSQL的源码。加入中文分词功能。原理依据的是一个强大的中文词典。(详细可进该大牛主页hightman.cn查看)所以我得声明一下。该功能的版权归HIGHTMAN大牛所有。本人不涉及版权问题。

 可喜的是该牛的MYSQL修改版是在GPL发放的。所在大家不用担心(除非你想自己打磨-______-)。好啰嗦啊,扯了大半天还没到正题。我也觉得我自己好啰嗦,黄金又涨价了,哎。牛奶都从46涨到了65一箱了。

 

----------------------OH YEAH SO HOT!----------------------------

 

开始:

cd/ /home/apps 

wget 

tar zxf mysql-5.1.11-hi1.tgz 

cd mysql-5.1.11-hi1 

#开始编译,加入分词插件 

./configure --prefix=/usr/local/mysql --with-charset=gbk --with-extra-charsets=all --with-plugins=fthightman 

make 

make install

#你如果嫌麻烦也可以 make && make install 该过程比较漫长(取决于机器性能了) #复制my.cnf到系统启动项 

cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf 

#增加mysql用户组 

groupadd mysql 

useradd -g mysql mysql 

#初始化 

cd /usr/local/mysql 

bin/mysql_install_db --user=mysql |注:--user=mysql 初始化表并且规定用mysql用户 

#设置给mysql和root用户设定访问权限 我们先进入mysql目录 

cd /usr/local/mysql 

chown -R root /usr/local/mysql |注:设定root能访问/usr/local/mysq

chown -R mysql /usr/local/mysql/var |注:设定mysql用户能访问/usr/local/mysql/var 

chgrp -R mysql /usr/local/mysql |注:设定mysql组能够访问/usr/local/mysq 

bin/mysqld_safe --user=mysql & |启动之 #设定开机就启动mysql,进入源码目录下 

cd /usr/local/mysql/share/mysql

cp mysql.server /etc/init.d/mysql 

cd /etc/rc3.d 

ln -s ../init.d/mysql S85mysql 

ln -s ../init.d/mysql K85mysql 

cd /etc/rc5.d 

ln -s ../init.d/mysql S85mysql 

ln -s ../init.d/mysql K85mysql 

cd ../init.d 

chmod 755 mysql 

#rc3.d rc5.d明白是怎么回事吧。不懂的自己补习去。 

重启 mysqld 服务器 

whereis mysql 

/etc/init.d/mysql 

service mysql 

/etc/init.d/mysql start|stop|restart 

#以下的情况我们假定您已经有了APCHE PHP环境。 开始:注意。MYSQL默认的字符编码是GBK。所以在这里建的表最好也是GBK的UTF8的需要改一下MYSQL默认编码再进行如下操作 

DATABASEB1 

show databases; 

use db1; 

#DB1里有个表叫TABLE1 TABLE1 字段为: 

aid 

gid 

uid 

atitle 

acontent 

请注意。atitle,acontent 这两个里面放的是我们需要检索的内容。 下面建立全文索引 也就是FULLTEXT 

alter table1 add fulltext ft_gbk(atitle,acontent) with parser hightman; 

这样索引就建成了。 

PHP查询语句为 

select * from table1 where match(atitle,acontent) against('$keyword'); 

返回结果就跟普通一样引用就可以了。 值得一提的是速度非常快。 

100万的数据通常检索不到0.5秒

 

有图为证范例:1.南极快车 在搜索框中输入' PHP mysql教程 ' .' PHP教程 ' 或者其它关键词可看到该插件的强大之处。 近期帖出UTF8编码下的简繁转换一个简洁的实例。

 

广西度易网络科技有限公司 版权所有 桂ICP备13003037号-3 地址:广西南宁市高新区科园大道33号盛世龙腾A座1211号