程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 用PHP調用Lucene包來實現全文檢索

用PHP調用Lucene包來實現全文檢索

編輯:關於PHP編程

由於工作需要,需要使用PHP實現對網站內大量數量進行全文檢索,
而且目前最流行的全文檢索的搜索引擎庫就是Lucene了,
它是Apache Jakarta的一個子項目,並且提供了簡單實用的API,
用這些API,就可以對任何基礎文本的數據(包括數據庫)進行全文檢索。


因為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

解包後把
JavaBridgeWEB-INFcgijava-x86-windows.dll
JavaBridgeWEB-INFlibJavaBridge.jar
復制到 c:phpext 目錄下,並把
java-x86-windows.dll 改名為 php_java.dll


2.修改php.ini(例)
extension=php_java.dll

[Java]
java.class.path = "C:phpextJavaBridge.jar;F:testphp_lucenehtdocs"
java.java_home = "C:j2sdk1.4.2_10"
java.library.path = "c:phpext;F:testphp_lucenehtdocs"

3.重啟Apache即可。

4.可以找一些文件進行索引
在test.php裡可以修改索引文件和數據文件的路徑。
TxtFileIndexer.java的37行限制了只索引html後綴的文件,有需要也可以修改。

根據目前的情況(JavaBridge支持Linux和Freebsd),完全可以在
linux或freebsd/apache2/php4/lucene/JavaBridge
環境下運行。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved