首页 > 开发 > PHP > 正文

用PHP调用Lucene包来实现全文检索

2024-05-04 22:59:54
字体:
来源:转载
供稿:网友
由于工作需要,需要使用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
解包后把
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
环境下运行。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表