新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     >>计算机科学论坛<<     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 搜索引擎, 信息分类与检索, 语义搜索, Lucene, Nutch, GRUB, Larbin, Weka
    [返回] 计算机科学论坛计算机技术与应用『 Web挖掘技术 』 → 用PHP调用Lucene包来实现全文检索 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 12223 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 用PHP调用Lucene包来实现全文检索 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18406
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    兴趣:
    * XML相关技术
    * 资料收集
    * Ontology Engineering
    * Web架构
    * SW Implementation
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 Web挖掘技术 』 的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 用PHP调用Lucene包来实现全文检索

    [精华] 用PHP调用Lucene包来实现全文检索(原创)

    --------------------------------------------------------------------------------

    http://www.chinaunix.net 作者:z33  发表于:2006-05-19 10:58:34
      

    /*转贴请保留以下信息*/
    作者:[url=http://spaces.msn.com/members/newbdez33/]张杰
    URL:http://spaces.msn.com/members/newbdez33/
    http://www.phpboom.com/

    由于工作需要,需要使用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就是索引文件的目录。返回所有检索到的文件。

    这里是源代码,很简单,大家可以参考一下:[url=http://newbdez33.googlepages.com/TxtFileIndexer.java]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源代码:[url=http://newbdez33.googlepages.com/test.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/
    目前版本是
    [url=http://prdownloads.sourceforge.net/php-java-bridge/php-java-bridge_3.0.8_j2ee.zip?download]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
    环境下运行。

    本文章可能会随时更新,另外这里可以访问:
    [url=http://newbdez33.googlepages.com/php_lucene]用PHP调用Lucene包来实现全文检索

    我的MSN是 z33 <at> 163.com
    欢迎技术探讨:)


       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/5/30 11:40:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Web挖掘技术 』 的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/3/28 21:49:57

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    46.875ms