作業上の必要性により、多数の Web サイトの全文検索を実装するには PHP を使用する必要があります。
全文検索用の最も人気のある検索エンジン ライブラリは、Apache のサブプロジェクトです。 Jakarta では、シンプルで実用的な API を提供しています。
これらの API を使用すると、あらゆる基本的なテキスト データ (データベースを含む) に対して全文検索を実行できます。
PHP 自体が外部 Java クラスの呼び出しをサポートしているため、最初に Java でクラスを作成しました。
このクラスは、Lucene の API を呼び出して 2 つのメソッドを実装します。
public String createIndex(String indexDir_path,String dataDir_path)
createIndex はインデックス作成メソッドです
渡される 2 つのパラメータは、indexDir_path (インデックス ファイルのディレクトリ) と dataDir_path (インデックス ファイルのディレクトリ) です。インデックス ファイルのディレクトリ)、インデックス ファイルのリスト文字列を返します。
もう 1 つは、渡されたキーワード パラメーター (ss) を通じてインデックスを取得する searchword、index_path はインデックス ファイルのディレクトリです。取得したすべてのファイルを返します。
これはソース コードです。非常にシンプルなので、参照してください: TxtFileIndexer.java
PHP プログラムは、これら 2 つのメソッドを呼び出して Lucene への呼び出しを実装し、それによって全文検索の目的を達成します。
PHP の呼び出しメソッドは次のとおりです:まず、先ほど作成した TxtFileIndexer クラスのインスタンスを作成します。
$tf = 新しい Java(TestLucene.TxtFileIndexer);
$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; //返された結果を出力します
今回も検索してみてください:
$s = $tf->searchword("ここに検索用のキーワードがあります",$index_path) ;
$s を印刷;
PHPで設定できるJavaクラスのパスにも注意してください
そうですよね?
PHP ソースコード: test.php
次に、環境構成について説明します。
まず、Java SDK が必要です。私はバージョン 1.4.2 を使用していますが、他のバージョンでも問題ありません。PHP5、PHP4を試してみました。動作するはずです。
PHP5 の Java 拡張機能は調整されておらず、これまで Java の呼び出しは非常に非効率的で遅かったため、Php/Java Bridge プロジェクトを使用しました。
URL: http://sourceforge.net/projects/php-java-bridge/
現在のバージョンはphp-java-bridge_3.0.8_j2ee.zip です
解凍後、
JavaBridgeWEB-INFcgijava-x86-windows.dll
をc:phpextディレクトリにコピーし、
java-x86-windows.dllの名前をphp_java.dll
に変更します。
2. php.iniを変更する(例)
[Java]
java.class.path = "C:phpextJavaBridge.jar;F:testphp_lucenehtdocs"
java.library.path = "c:phpext;F:testphp_lucenehtdocs 「」
3. Apache を再起動します。
test.php でインデックス ファイルとデータ ファイルのパスを変更できます。
TxtFileIndexer.java の 37 行目は、インデックス作成を html サフィックスを持つファイルのみに制限しており、必要に応じて変更できます。
現状(JavaBridgeはLinuxとFreebsdをサポートしています)によれば、
linuxまたはfreebsd/apache2/php4/lucene/JavaBridge