作者:張杰
URL:http://spaces.msn.com/members/newbdez33/
http://www.phpboom.com/
由于工作需要,需要使用PHP實(shí)現對網(wǎng)站內大量數量進(jìn)行全文檢索,
而且目前最流行的全文檢索的搜索引擎庫就是Lucene了,
它是Apache Jakarta的一個(gè)子項目,并且提供了簡(jiǎn)單實(shí)用的API,
用這些API,就可以對任何基本文本的數據(包括數據庫)進(jìn)行全文檢索。
因為PHP本身就支持調用外部Java類(lèi),所以先用Java寫(xiě)了一個(gè)類(lèi),
這個(gè)類(lèi)通過(guò)調用Lucene的API,實(shí)現了兩個(gè)方法:
- public String createIndex(String indexDir_path,String dataDir_path)
- public String searchword(String ss,String index_path)
其中createIndex是創(chuàng )建索引方法,
傳入了兩個(gè)參數分別是indexDir_path(索引文件的目錄),dataDir_path(被索引的文件目錄),返回被索引的文件列表字符串,
另一個(gè)是searchword,通過(guò)傳入的關(guān)鍵字參數(ss)對索引進(jìn)行檢索,index_path就是索引文件的目錄。返回所有檢索到的文件。
這里是源代碼,很簡(jiǎn)單,大家可以參考一下:TxtFileIndexer.java
而PHP程序就調用這兩個(gè)方法,實(shí)現對Lucene的調用,從而達到全文檢索的目的。
PHP的調用方法如下:
先創(chuàng )建一個(gè)我們寫(xiě)的TxtFileIndexer類(lèi)的實(shí)例,
$tf = new Java(‘TestLucene.TxtFileIndexer‘);
然后就按正常PHP類(lèi)的調用方法的方式進(jìn)行調用,首先創(chuàng )建索引:
$data_path = "F:/test/php_lucene/htdocs/data/manual"; //定義被索引內容的目錄
$index_path = "F:/test/php_lucene/htdocs/data/search"; //定義生成的索引文件存放目錄
$s = $tf->createIndex($index_path,$data_path); //調用Java類(lèi)的方法
print $s; //打印返回的結果
這次再試試檢索:
$index_path = "F:/test/php_lucene/htdocs/data/search"; //定義生成的索引文件存放目錄
$s = $tf->searchword("here is keyword for search",$index_path);
print $s;
另外要注意Java類(lèi)的路徑,可以在PHP里設置
java_require("F:/test/php_lucene/htdocs/lib/"); //這是個(gè)例子,我的類(lèi)和Lucene都放到這個(gè)目錄下
這樣就可以了,是不是很簡(jiǎn)單。
PHP源代碼:test.php
接下來(lái)我把環(huán)境配置說(shuō)一下,
首先需要有Java SDK,是必須的,我使用的是1.4.2版的,其它版本應該也沒(méi)問(wèn)題。
PHP5,試過(guò)PHP4,應該可以。
由于PHP5帶的Java擴展沒(méi)調通,并且以前用過(guò)調用Java效率很低,很慢,所以使用了 Php/Java Bridge 這個(gè)項目。
1.下載JavaBridge
URL:http://sourceforge.net/projects/php-java-bridge/
目前版本是
php-java-bridge_3.0.8_j2ee.zip
解包后把
JavaBridge\WEB-INF\cgi\java-x86-windows.dll
JavaBridge\WEB-INF\lib\JavaBridge.jar
復制到 c:\php\ext 目錄下,并把
java-x86-windows.dll 改名為 php_java.dll
2.修改php.ini(例)
extension=php_java.dll
[Java]
java.class.path = "C:\php\ext\JavaBridge.jar;F:\test\php_lucene\htdocs"
java.java_home = "C:\j2sdk1.4.2_10"
java.library.path = "c:\php\ext;F:\test\php_lucene\htdocs"
3.重啟Apache即可。
4.可以找一些文件進(jìn)行索引
在test.php里可以修改索引文件和數據文件的路徑。
TxtFileIndexer.java的37行限制了只索引html后綴的文件,有需要也可以修改。
根據目前的情況(JavaBridge支持Linux和Freebsd),完全可以在
linux或freebsd/apache2/php4/lucene/JavaBridge
環(huán)境下運行。
[返回]

