十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

浅谈MYSQL的全文检索的应用

上一篇 / 下一篇  2009-05-22 20:51:36

51Testing软件测试网o3]&R_$g!g6N

  —— 适百千万数据量以上的站内搜索,平民级的解决方案51Testing软件测试网7F+E*goNM7[&T%`

51Testing软件测试网Q$['| tj'q

  环境:LINUX MYSQL4/5(5以上的版本直接可以在插件形式编译进MYSQL内)51Testing软件测试网C$a Y^-T7L

cr6W F0D|0  使用MYSQL的朋友一定有这样的经历,那就是在检索中文的时候往往力不从心。使用LIKE的效率实在不敢恭维,而且对搜索的结果也不是很满意的。 很希望有一个完美的解决方案。但是事实的真相是残酷的。这个完美的方案可能让你绞尽脑汁还是两手空空。51Testing软件测试网)f8s v3}L4F4P

6Z3Q*Dq*bf$]O0  今天我给大家带来的 MYSQL中文分词全文检索 可能会让您有一种相见恨晚的感觉。51Testing软件测试网9?8_2i3L Rm to;|

51Testing软件测试网JK(@[ [&x'_o

  下面开始讲解:51Testing软件测试网~_+ap tV~

/@F&w/Xt;r1~0  在猪肉还是7块多的时候,我在CU里闲逛。突然看到一个大板(HIGHTMAN)的帖子。(我不记得地址了).51Testing软件测试网,lT2W8}:S(?

w7^]&]$R:| I0  大致内容就是修改MYSQL的源码。加入中文分词功能。原理依据的是一个强大的中文词典。(详细可进该大牛主页hightman.cn查看)51Testing软件测试网+MjUQao8zf_

51Testing软件测试网!uk9S6kW&F]I|

  所以我得声明一下。该功能的版权归HIGHTMAN大牛所有。本人不涉及版权问题。

.c ik4_e:d!O`{0

YJ ww$t6k0  可喜的是该牛的MYSQL修改版是在GPL发放的。所在大家不用担心(除非你想自己打磨)。51Testing软件测试网`!u!\.a(MHfp%^ PPd

51Testing软件测试网t C!| h D lXhb

  好啰嗦啊,扯了大半天还没到正题。我也觉得我自己好啰嗦,黄金又涨价了,哎。牛奶都从46涨到了65一箱了。51Testing软件测试网*dD!v*r]

51Testing软件测试网 j@KN3pI"}

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

?Zr};R0z G051Testing软件测试网~+[-g2yI!e

  开始:51Testing软件测试网%Xg)W'@1XW-}"f

!{Wb aq1Y;r0  cd/ /home/apps51Testing软件测试网$Z d-d^kd1H/C]b7F

51Testing软件测试网uUgo5[E!]8B

  wget http://www.hightman.cn/down/mysql-5.1.11-hi1.tgz51Testing软件测试网sP*qjTD9V

51Testing软件测试网(M5kCT bYh{

  tar zxf mysql-5.1.11-hi1.tgz

Z aQ!m3Rop$y#N)tI'H0

[9k c*|+J"imB0  cd mysql-5.1.11-hi151Testing软件测试网Ps _G l ^

:D4L`8Cr,M&\0  #开始编译,加入分词插件51Testing软件测试网7l!B2`*]%U2u~

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

? Y;RGLN051Testing软件测试网\$^X:H^5@'\6mc q

  make

{"`6em8Yae!k l0

wZ zb+H0  make install

x u]b;}f3m051Testing软件测试网/fo#j a/w&M8~ il

  #你如果嫌麻烦也可以 make && make install 该过程比较漫长(取决于机器性能了)

gm"t"V8L2C*Ad051Testing软件测试网 s;Tq8y"X J NA"C v%j

  #复制my.cnf到系统启动项

6A"r&l:I.w*~3R?o-ck0

-^ ]-dH|7[7}:K0  cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf

Ha'NGz.s+NV0

9ccO)`W'cS3dD0  #增加mysql用户组

f1b4?+q d8W+p051Testing软件测试网,N;T;|5V`nq5w

  groupadd mysql

5KB1H!uyF0

"ctI$dKHm0  useradd -g mysql mysql

;VS \;Z r051Testing软件测试网 q'Q9l~E1oGP5i?I

  #初始化51Testing软件测试网-JTF|oa(Ll

/m UF/Fa3G4sF X0  cd /usr/local/mysql

p7h R LwkUx(ih051Testing软件测试网1a7EK+L8PzQ#v

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

{.S @4_H0u051Testing软件测试网Q,c6JJM7l!K

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

7c?r f!ZAr:T0

@7B$\!g6M&I0  cd /usr/local/mysql

7O(O/w^J051Testing软件测试网;A.R{oV/]i

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

F?j/Z+Wfv%[051Testing软件测试网:C*xHI t2v7I~

  chown -R mysql /usr/local/mysql/var |注:设定mysql用户能访问/usr/local/mysql/var51Testing软件测试网3L W+g K,m,`/pr

51Testing软件测试网rjfAy S ^8kkA

  chgrp -R mysql /usr/local/mysql |注:设定mysql组能够访问/usr/local/mysq51Testing软件测试网j2?sphq_5v'b

G3Rf o`;\0  bin/mysqld_safe --user=mysql & |启动之51Testing软件测试网%S{Xe9U!Y@/M|

]mr^S2X9d0  #设定开机就启动mysql,进入源码目录下51Testing软件测试网fC9h'cmV

`!R;N%^O?+{ rn$b0  cd /usr/local/mysql/share/mysql

D1|$^ hQU O0{0

Mlp+| P Sh:C0  cp mysql.server /etc/init.d/mysql51Testing软件测试网7hT.Z*q Q `n

51Testing软件测试网 Ckx$CsO2`

  cd /etc/rc3.d51Testing软件测试网 n7FG$@ pD*}

,_9r:AH1a@%x.O0  ln -s ../init.d/mysql S85mysql51Testing软件测试网'mGF.z\ gG;S5XS ^ h

M oF6H,xH0  ln -s ../init.d/mysql K85mysql51Testing软件测试网3@3B~$k9i t

$G4LK2t:NI{$?[0  cd /etc/rc5.d51Testing软件测试网(H-B [*R7Rc

51Testing软件测试网8I }_}"mK

  ln -s ../init.d/mysql S85mysql51Testing软件测试网Kwsm I%}H

51Testing软件测试网|"`+Tx5s N

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

5ZO!f Y8]\"\~-S/Vk051Testing软件测试网)f6Sct$QsWh

  cd ../init.d

(W8d4^|G`.U051Testing软件测试网_*@ ku,@(m3@wp0s6B'e

  chmod 755 mysql

V'lW"Yh2QO0

3k`o)X)rCF{)s?0  #rc3.d rc5.d明白是怎么回事吧。不懂的自己补习去。

F)@#j9k&V ~E6_)J9]051Testing软件测试网 gn|J/e7ZY a$P-[/w

  重启 mysqld 服务器51Testing软件测试网 E D%OWO\

1t:\)]Sn%C i!s0  whereis mysql51Testing软件测试网W.W/I:Xbv"PJ!M%L

+q#f7VR8Y0  /etc/init.d/mysql

jv'R'I o*CG au5?0

D8Ho'YQ4r0d$c+L0  service mysql

4Z}O/Z a YP8n)C1L0

*bdp _-A(`&X0  /etc/init.d/mysql start|stop|restart

h-G)j S\1@0

XU$f4a K KZ0  #以下的情况我们假定您已经有了APCHE PHP环境。

1f no$m2v?I6l0

zdp$BA;x0  开始:51Testing软件测试网~5a-|u+f,KG#\

51Testing软件测试网\nTP/Xf

  注意。MYSQL默认的字符编码是GBK。所以在这里建的表最好也是GBK的UTF8的需要改一下MYSQL默认编码再进行如下操作51Testing软件测试网-g;e7aY5zp

51Testing软件测试网QC(F^-^9h l/y D P

  DATABASEB151Testing软件测试网VCDuf f&Q']

51Testing软件测试网*sn:~bj5o,A"A/x(Y

  show databases;51Testing软件测试网/H `yLeA

(JX/N8`%rVp o%NU h.`0  use db1;

qd~d3eB!e051Testing软件测试网 XP%zyCiV'C4`

  #DB1里有个表叫TABLE1

/}/b:^]!E2_t9QY&?051Testing软件测试网 J?1p r(KXW S

  TABLE1 字段为:51Testing软件测试网 s5`7{)K T"S

V Z!N)eE9GdH0  aid51Testing软件测试网8?)~G:gPt e*I;Q o

51Testing软件测试网6z1m aA ` G3K

  gid51Testing软件测试网+w N*p {7s~L$K%V[/|W

51Testing软件测试网Ay;e:D3IV+}

  uid51Testing软件测试网'z9U@3ZC#wv

N9cLs } ^%s{0  atitle

0_7u3CX,R } CJm)O051Testing软件测试网'[ K D ^'F!A O

  acontent

!aka fX5JpD,lG0

sq-tf2c ]V0  请注意。atitle,acontent 这两个里面放的是我们需要检索的内容。

]/Z"e:g"JL5[0

*|,fk'i_$Qs0  下面建立全文索引 也就是FULLTEXT51Testing软件测试网1p }R*j(E"aM

H6F8t| I Q0  alter table1 add fulltext ft_gbk(atitle,acontent) with parser hightman;

%Xa/Y$Z)k5lSZ051Testing软件测试网C-w.I]P T$P[

  这样索引就建成了。

*l^-f_C3Y4Dn0

Kyu{8}'m&a0  PHP查询语句为

5xZ;`5R k[?w XW\0

J0cP;p xT:ea0  select * from table1 where match(atitle,acontent) against('$keyword');51Testing软件测试网5s7t&b z:d8|"Sd;ct

/n nc4SH @}|5J0  返回结果就跟普通一样引用就可以了。

`.\E'C+B6i0

AXfW `2J0  值得一提的是速度非常快。51Testing软件测试网0T [cr ky'u!m#Y

9A-iK&}x^0  100万的数据通常检索不到0.5秒。51Testing软件测试网-p-PG'fq;[;o.{#X


TAG: MySQL MYSQL 全文检索

 

评分:0

我来说两句

Open Toolbar