PHP+MYSQL 簡單實現中文分詞全文索引

來源:互聯網
上載者:User
關鍵字 mysql PHP

仲介交易 HTTP://www.aliyun.com/zixun/aggregation/6858.html">SEO診斷 淘寶客 雲主機 技術大廳

相信很多人都研究過MYSQL的中文全文索引問題,目前MYSQL不支援中文全文索引,無奈~~~

網上找了N多關於PHP+MYSQL中文全文索引的文章都沒有一個好用的,對於一般的菜鳥根本不知道怎麼使用,PHP中文分詞有DDEDE的,DEDE的詞庫不是很強大,還算可以用吧!

還有一個是《SCWS - 簡易中文分詞系統》這個目前對於一般菜鳥根本不知道怎麼用,雖然有人編譯了Windows版的,但安裝還是挺麻煩的,我尚未測試過!

//==========================

廢話不多說了,首先去DEDE下載分詞演算法函數和詞庫;下載位址:HTTP://www.dedecms.com/html/chanpinxiazai/20061229/3.html

裡面有詳細的使用說明,我在這裡舉一個使用的例子;

MYSQL表名:music

欄位:title,tag

  

require("lib_splitword_full.php");

$str = "這裡是你要分詞的內容,一般不要超過1024KB會好一點,否則會很慢!";

$sp = new SplitWord();//具現化

$dd = explode(" ",$sp->SplitRMM($str));

$i=0;

foreach ($dd as $key=>$var) {

if (strlen($var)>2)//UTF8編碼的請設置為3,因為UTF8編碼的中文一般為3個位元組以上,過濾單個字不保存!

{

$str.=base64_encode($var)." ";//由於MYSQL不支援中文全文索引,所以在分詞中我們必須把詞轉換成字母或者數位,這裡我選擇了base64編碼

當然大家還可以把中文轉成區碼,但我測試過區碼的方法,感覺很一般,所以在這樣我推薦大家使用base64

$i++;

}

if ($i>=50) break;//這裡是設置你要存儲多少個片語,如果是文章可能會有N多片語,你可以設置大一點,但如果你對標題分詞的話,50個已經足夠了!

這樣運行未編碼得出來的結果:這裡 分詞 內容 一般 不要 超過 1024KB 一點 否則

base64編碼後的結果:1eLA7w== t9a0yg== xNrI3Q== 0ruw4w== srvSqg== s6y5/Q== MTAyNEtC 0ru14w== t/HU8g==

}

?>

這樣我們就可以把分好詞而且轉換成編碼的分詞存進 tag 欄位了,當然tag欄位必須設置成全文索引 full text 而且6184.html">資料表類型必須為MyISAM。

tag欄位資料類型為CHAR和VARCHAR、text,有關如何創建MYSQL全文索引,大家可以搜索一下《mysql創建索引》遍地開花,到處都是!

下面的例子是根據TAG欄位的內容進行全文索引查詢:

  

include("Mysql.class.php");

$rs = $DB->get_one("select title,tag from music where id=$id");//根據ID讀取title和tag欄位內容

$title = $rs['title'];

$sql = $DB->query("select title,MATCH(tag) AGAINST('".trim($rs['tag'])."' IN BOOLEAN MODE) AS score from music where MATCH(tag) AGAINST('".trim($rs['tag'])."' IN BOOLEAN MODE) ORDER BY score DESC limit 21");//這裡是查詢20條相似的內容,而且按相似的排序,21是因為同一條記錄都會匹配出來!

while ($rs = $DB->fetch_array($sql))

{

if ($rs['title']!=$title)

{

echo $rs['title']."
";

}

}

$DB->close();

?>

如果大家想看效果可以到我的小站看演示:HTTP://www.dj965.com

以上的例子就實現了PHP+MYSQL簡單的中文分詞全文索引!

希望對跟我一樣的菜鳥有一定的説明吧!

本人BLOG:HTTP://hi.baidu.com/web20/

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.