Oct
13

今日試左zend既framework 見到佢入面有Lucene 咁就整左個fulltext search既page。咁就放上黎同大家分享下。
先到zend framework下載 所需的library
先講一講folder的結構
├─index.php
├─search.php
├─library
│ └─Zend
index.php
<?php
mysql_connect(DB_HOSTNAME,DB_USER,DB_PASS);
mysql_select_db(DB_NAME);error_reporting(E_ALL|E_STRICT);
set_include_path('.' . PATH_SEPARATOR . './library/');
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');
/*
* ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
*/
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
/*
*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
* 以上部份 資料是utf8 為編碼的這句為重點。如果你是utf8的話必需加入,否則資料會錯誤
*/
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 `Search_test` limit 0,10000"; //拿取需要索引的資料
mysql_query("set names 'utf8'");
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)) {
$url = 'http://www.vincent.idv.hk/?id=' . $row['id']; //網頁位置
$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
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
mysql_connect(DB_HOSTNAME,DB_USER,DB_PASS);
mysql_select_db(DB_NAME);
error_reporting(E_ALL|E_STRICT);
set_include_path('.' . PATH_SEPARATOR . './library/');
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');
Zend_Loader::loadClass('Zend_Search_Lucene_Search_QueryParser');
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
$index = new Zend_Search_Lucene('index');
$query = isset($_GET['query']) ? $_GET['query'] : '';
$query = trim($query);
echo $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);
}
?>
<form method="get" action="search.php">
<input type="text" name="query" value="<?= htmlSpecialChars($query) ?>" />
<input type="submit" value="Search" />
</form>
<?php if (strlen($query) > 0) { ?>
<p>
Found <?= $hits ?> result(s) for query <?= $query ?>.
</p>
<?php foreach ($hits as $hit) { ?>
<h3><?= $hit->title ?> </h3>
<p>
<?= $hit->contents ?><br />
<a href="<?= $hit->url ?>">Read more...</a>
</p>
<?php } ?>
<?php } ?>
Written by 傻仔仔
