浅谈MYSQL的全文检索的应用

发表于:2009-5-22 10:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

  —— 适百千万数据量以上的站内搜索,平民级的解决方案

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

  重启 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秒。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号