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类来协调工作的机制我不是很清楚,郁闷了一整天了,求指点好的解决方案。。。
目前环境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 或者发邮件也行
推荐阅读
-
Java中Date()类 日期转字符串、字符串转日期的问题
-
php创建类并调用的实例方法
-
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
-
解决Python3 被PHP程序调用执行返回乱码的问题
-
JSP中如何通过JSP调用类(.java)中的方法
-
php通过COM类调用组件的实现代码
-
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
-
java基础 静态 static 问在多态中,子类静态方法覆盖父类静态方法时,父类引用调用的是哪个方法?
-
PHP调用JAVA的WebService简单实例
-
super performSelector: 解决调用父类私有方法的问题