首页 > php mysql > MYSQL的全文检索的应用,适百千万数据量以上的站内搜索,平民级的解决方案

MYSQL的全文检索的应用,适百千万数据量以上的站内搜索,平民级的解决方案

2010年4月9日

 

浅谈MYSQL的全文检索的应用,适百千万数据量以上的站内搜索,平民级的解决方案

浅谈MYSQL的全文检索的应用,适百千万数据量以上的站内搜索。

环境: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 http://www.hightman.cn/down/mysql-5.1.11-hi1.tgz 

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明白是怎么回事吧。不懂的自己补习去。

重启 mysql服务器

       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编码下的简繁转换一个简洁的实例。

在LINUX下测试,并发处理能力很强。承载能力在每天100万次左右。

当然具体还要根据各人的数据库大小,优化有关。

200万的数据,1G的内存每天可承受30万左右的页面查询量。

可以说是一个平民级的解决方案。

(MYSQL同样还有一个商业的中文检索 好像叫海量什么的。

不过强烈向大家推介CU大版-HIGHTMAN的分词插件。GPL的哦。O-P。

版权所有。HIGHTMAN )

转载于http://www.phpchina.com/index.php?action-viewnews-itemid-35351

php mysql 浏览927 次

本文的评论功能被关闭了.