用php來實現lucene包來實現全文檢索

由於PHP自己就支持調用外部Java類,因此先用Java寫了一個類,
這個類經過調用Lucene的API,實現了兩個方法: 

    * public String createIndex(String indexDir_path,String dataDir_path)
    * public String searchword(String ss,String index_path)

其中createIndex是建立索引方法,
傳入了兩個參數分別是indexDir_path(索引文件的目錄),dataDir_path(被索引的文件目錄),返回被索引的文件列表字符串,
另外一個是searchword,經過傳入的關鍵字參數(ss)對索引進行檢索,index_path就是索引文件的目錄。返回全部檢索到的文件。

這裏是源代碼,很簡單,你們能夠參考一下:TxtFileIndexer.java

而PHP程序就調用這兩個方法,實現對Lucene的調用,從而達到全文檢索的目的。
PHP的調用方法以下: 
先建立一個咱們寫的TxtFileIndexer類的實例,

    $tf = new Java('TestLucene.TxtFileIndexer');

而後就按正常PHP類的調用方法的方式進行調用,首先建立索引:

    $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類的方法
    print $s;  //打印返回的結果

此次再試試檢索:

    $index_path = "F:/test/php_lucene/htdocs/data/search";  //定義生成的索引文件存放目錄
    $s = $tf->searchword("here is keyword for search",$index_path);
    print $s;

另外要注意Java類的路徑,能夠在PHP裏設置

    java_require("F:/test/php_lucene/htdocs/lib/");  //這是個例子,個人類和Lucene都放到這個目錄下

這樣就能夠了,是否是很簡單。

PHP源代碼:test.php


接下來我把環境配置說一下,
首先須要有Java SDK,是必須的,我使用的是1.4.2版的,其它版本應該也沒問題。
PHP5,試過PHP4,應該能夠。

因爲PHP5帶的Java擴展沒調通,而且之前用過調用Java效率很低,很慢,因此使用了 Php/Java Bridge 這個項目。

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.能夠找一些文件進行索引
在test.php裏能夠修改索引文件和數據文件的路徑。
TxtFileIndexer.java的37行限制了只索引html後綴的文件,有須要也能夠修改。

根據目前的狀況(JavaBridge支持Linux和Freebsd),徹底能夠在
linux或freebsd/apache2/php4/lucene/JavaBridge
環境下運行。
php

相關文章
相關標籤/搜索