欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP调用lucene(java类)的问题

程序员文章站 2022-06-02 17:55:20
...
最近要用php+lucene来搭一个检索页面,基本思路是让用户在php输入信息,然后php页面调用lucene进行搜索并返回结果给php,php将结果呈现给用户。

目前环境winXP+PHP5.3+apache2.2+mysql,lucene版本3.5

我的想法是:先用java写了一个调用lucene API的类,实现了基本的检索功能。然后用php调用这个java类来进行检索。

查了下相关文档,php5已经没有php_java.dll扩展,要使用php_java_bridge。
于是下了php_java_bridge5.4 ,照着网上搜到的资料,安装配置基本成功。测试时:
1、可以调用java的内置类。
2、自定义java类(如果只使用了java内置类),编译成class文件后打包成jar文件,用java_require("...")导入后可以调用自定义类。

但现在的问题是:
如果自定义java类中,import了lucene的类(这正是我目前的做法),则在php中调用此java类时会失败,查看javaBridge.jar的日志文件vmbridge.log,错误主要类似:
java.lang.ClassNotFoundException: Unresolved external reference: java.lang.NoClassDefFoundError: org/apache/lucene/store/Directory. -- Unable to call constructor
个人理解似乎是找不到lucene API中的类,导致无法创建对象。


现在能想到的就是直接用php来调用lucene的API接口,不知道可行否,但这样感觉比较麻烦。

本人比较菜,php调用java类来协调工作的机制我不是很清楚,郁闷了一整天了,求指点好的解决方案。。。


回复讨论(解决方案)

可以走http。调用java的接口返回json数据。然后php做相应的展现。没有必要通过扩展和java协作

主贴的情况有所进展,我将lucene.jar一起打包后,就不会出现上面的问题。
但在php里调用自定义类的方法来检索文档,似乎无法命中。。。代码类似:
$lucene = new Java("testLucene.TestLucene");
echo 'path='.$lucene->search(new Java("java.lang.String","美"),new Java("java.lang.String","D:/test/index/"));
?>
同样的代码(也是实例化自定义类后调用search方法)在java写的测试类中就可以正确检索到最匹配“美”字的文档。。。

-----------------------------------分割------------------------------------------------

可以走http。调用java的接口返回json数据。然后php做相应的展现。没有必要通过扩展和java协作

终于等到回复了,先感谢下~

可以说的详细些或者给个简单的示例吗?

我也遇到这问题了,楼主或者其他人如果有解决办法 能否联系一下我啊 QQ784718085 或者发邮件也行