2009年8月2日 星期日

PHP製作中文全文搜尋不求人。

PHP製作中文全文搜尋不求人。

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...

沒有留言:

張貼留言

推到 Twitter!
推到 Plurk!
推到 Facebook!