在處理大量網站內容的全文檢索需求時,Apache Lucene 無疑是目前最成熟、最廣泛採用的開源搜尋引擎庫。作為 Apache Jakarta 專案的子項目,Lucene 提供了簡潔且強大的 API,能夠對任何基於文本的數據(包括資料庫記錄)建立索引並執行高效檢索。
PHP 本身支援透過 PHP/Java Bridge 呼叫外部 Java 類別。本方案的核心思路是:先編寫一個 Java 類別(TxtFileIndexer),封裝 Lucene 的索引建立與查詢邏輯;再在 PHP 中實例化該類別並呼叫其方法,從而達成「PHP 前端、Lucene 後端」的架構。
該類別對外暴露兩個關鍵方法:
完整原始碼請參考 TxtFileIndexer.java。
<?php
// 1. 載入 Java 類別路徑(視實際部署環境調整)
java_require("F:/test/php_lucene/htdocs/lib/");
// 2. 實例化 Java 類別
$tf = new Java("TxtFileIndexer");
// 3. 定義路徑
$data_path = "F:/test/php_lucene/htdocs/data/manual"; // 待索引資料目錄
$index_path = "F:/test/php_lucene/htdocs/data/search"; // 索引輸出目錄
// 4. 建立索引
$s = $tf->createIndex($index_path, $data_path);
print $s; // 輸出索引結果
// 5. 執行檢索
$s = $tf->searchword("here is keyword for search", $index_path);
print $s; // 輸出搜尋結果
?>
php-java-bridge_3.0.8_j2ee.zip。JavaBridgeWEB-INFcgijava-x86-windows.dll 重命名為 php_java.dll,複製到 C:\php\ext。JavaBridgeWEB-INFlibJavaBridge.jar 複製到同一目錄。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"
PHP/Java Bridge 同時支援 Linux 與 FreeBSD,因此同樣的架構可無縫移植至 Linux/FreeBSD + Apache 2 + PHP 4/5 + Lucene + Java Bridge 環境。只需依作業系統替換對應的 java-x86-windows.dll(Linux 為 libjava.so 等)並調整路徑即可。
TxtFileIndexer.java 第 37 行預設僅索引 .html 附檔名檔案,可依需求修改過濾條件。透過 PHP/Java Bridge 整合 Lucene,開發者能以極低的學習成本,為 PHP 應用賦予企業級的全文檢索能力。這套「PHP 呼叫 Java 封裝 Lucene」的模式,不僅解決了 PHP 原生缺乏成熟搜尋庫的短板,更展現了跨語言整合的靈活性。