PHP製作中文全文搜尋不求人。
10月 16th, 2007 由 傻仔仔 發表 於 12:10 am
PHP 中文全文搜尋 FullText Search 連中文分詞 (只需PHP就能使用Lucene)
前兩日發表過一份關於 ZEND FRAMEWORK 既SEARCH ENGINE 既文章E篇係加強版.
這一次最大的分别是支援了中文分詞。上一個版本只支援英文。而這個版本支援了中文全文搜尋及中文分詞功能已把PROGRAM 簡化 改得容易明白。
按此下載原始檔 (SOURCE CODE)
先說明資料夾內容
│ config.php 資料庫連接設定
│ index_file.php 製作索引的檔案
│ search.php 主程式,搜尋程式。
└─Zend <–主頁的CLASS LIBRARY
Config.php
mysql_select_db(DB_NAME);
//DB_HOSTNAME : 資料庫位置E.G localhost
// DB_USERNAME : 資料庫用戶名稱
// DB_PASSWORD : 資料庫用戶密碼
// DB_NAME : 使用的資料庫名稱
?>
index_file.php
error_reporting(E_ALL|E_STRICT);set_include_path('.' . PATH_SEPARATOR . './Zend/');
include "Zend/Loader.php";
Zend_Loader::loadClass('Zend_Search_Lucene');
Zend_Loader::loadClass('Zend_Search_Lucene_Document');
Zend_Loader::loadClass('Zend_Search_Lucene_Analysis_Analyzer_Common_Phpbean');
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Phpbean());
if (function_exists("set_time_limit") && ! get_cfg_var('safe_mode')) {
set_time_limit(0);
}
$index = new Zend_Search_Lucene('index', true);
$sql = "
SELECT `id` , `title` , `description`
FROM `data_table` "; //拿取需要索引的資料
mysql_query("set names 'utf8'");
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)) {
$url = 'http://www.vincent.idv.hk/' . $row['d']; //網頁位置
$title = $row['title'];//主題
$description = $row["description"]; //描述
//儲存網頁的位置以在搜尋結果中連結.
$doc = new Zend_Search_Lucene_Document();//建立新的索引文件
$doc->addField(Zend_Search_Lucene_Field::UnIndexed('url', $url));
$doc->addField(Zend_Search_Lucene_Field::Text('title', $title,'utf-8'));
$doc->addField(Zend_Search_Lucene_Field::Text('contents', $description,
'utf-8'));
$index->addDocument($doc); //把索引文件加到索引中
}
$index->commit();//提交,及保存索引
search.php
include_once("config.php");
error_reporting(E_ALL|E_STRICT);
set_include_path('.' . PATH_SEPARATOR . './Zend/');
include "Zend/Loader.php";
Zend_Loader::loadClass('Zend_Search_Lucene');
Zend_Loader::loadClass('Zend_Search_Lucene_Exception');
Zend_Loader::loadClass('Zend_Search_Lucene_Document');
Zend_Loader::loadClass('Zend_Search_Lucene_Analysis_Analyzer_Common_Phpbean');
Zend_Loader::loadClass('Zend_Search_Lucene_Search_QueryParser');
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
new Zend_Search_Lucene_Analysis_Analyzer_Common_Phpbean());$index = new Zend_Search_Lucene('index');
$query = isset($_GET['query']) ? $_GET['query'] : '';
$query = trim($query);
if(strlen($query)>0){
try {
$query2 = Zend_Search_Lucene_Search_QueryParser::parse($query, "utf-8");
$hits = $index->find($query2);
}
catch (Zend_Search_Lucene_Exception $ex) {
$hits = array();
}
$numHits = count($hits);
}
?>
0) { ?>
Found result(s) for query .
title ?> score ?>
contents ?>Read more...
沒有留言:
張貼留言