淺談MYSQL的全文檢索索引的應用

來源:互聯網
上載者:User

—— 適百千萬資料量以上的站內搜尋,平民級的解決方案

  環境: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秒。

轉自:http://www.51testing.com/html/87/n-130087.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.