| 
 | 
 
 
在java中做全文搜索的話可以使用Lucene以及中文分詞插件。在php中做全文搜素引擎可以使用Sphinx,中文分詞也有很多選擇,使用scws是不錯的選擇。scws的全稱是Simple Chinese Words Segmentation。使用scws有三種方式:一種是使用C語言編寫的scws並在源碼基礎上進行拓展,速度最快但是不易拓展;一種是安裝scws針對php編寫的插件,然後就可以直接在php中調用的scws的api函數,本文介紹的就是這種方法;最後一種是使用php重寫的scws函數庫,優點是不需要安裝額外的插件,缺點是程序的運行效率很低。(具體信息參見http://www.ftphp.com/scws) 
在php中安裝完scws插件後,執行如下語句: 
$str = "在數據庫中儲存層次數據"; 
$temp = array(); 
$cws = scws_new(); 
$cws->set_multi(1); 
$cws->set_charset('utf8'); 
$cws->send_text($str); 
while ($tmp = $cws->get_result()) 
{ 
        $temp[] = $tmp; 
} 
$arrWhere = array(); 
$t = array(); 
foreach($temp as $key=>$value){ 
        foreach($value as $item){ 
                $t[] = $item['word']; 
        } 
} 
pirnt_r($t) 
程序運行後輸出: 
 
| Array |  | ( |  
 |  |   | [0] => 在 |  |   | [1] => 數據庫 |  |   | [2] => 數據 |  |   | [3] => 中 |  |   | [4] => 儲存 |  |   | [5] => 層次 |  |   | [6] => 數據 |  | ) |  
 |  
  
 
 
可以看到分詞結果中有重疊的地方,通過調節$cws->set_multi(1);中參數的值可以調整分詞結果的顆粒度。例如設置$cws->set_multi(2);後輸出結果為: 
 
| Array |  | ( |  
 |  |   | [0] => 在 |  |   | [1] => 數據庫 |  |   | [2] => 數據 |  |   | [3] => 據庫 |  |   | [4] => 中 |  |   | [5] => 儲存 |  |   | [6] => 層次 |  |   | [7] => 數據 |  | ) |  
 |  
  
使用這個中文分詞插件可以做一些應用,比如交友網站上允許用戶輸入模糊搜索信息,用戶可以輸入「浙江杭州22歲有圖」來搜索用戶,經過分詞輸出數組: 
 
| Array |  | ( |  
 |  |   | [0] => 浙江 |  |   | [1] => 杭州 |  |   | [2] => 22 |  |   | [3] => 歲 |  |   | [4] => 有 |  |   | [5] => 圖 |  | ) |  
 |  
  
再在經過一些語義分析後(進行這種限定較多的語義分析並不複雜),就可以得到對應的數據庫查詢條件: 
select * from members where str_provicne="浙江" and str_city="杭州" and int_age=22 and has_pic=1 
 
 |   
 
 
 
 |