最近要用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类来协调工作的机制我不是很清楚,郁闷了一整天了,求指点好的解决方案

解决方案 »

  1.   

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

  2.   

    主贴的情况有所进展,我将lucene.jar一起打包后,就不会出现上面的问题。
    但在php里调用自定义类的方法来检索文档,似乎无法命中代码类似:
    <?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写的测试类中就可以正确检索到最匹配“美”字的文档-----------------------------------分割------------------------------------------------
    终于等到回复了,先感谢下~可以说的详细些或者给个简单的示例吗?