`
hhr_michael
  • 浏览: 74366 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类
最新评论

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

阅读更多
[全文检索]用PHP调用Lucene包来实现全文检索

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

http://www.chinaunix.net 作者:z33  发表于:2006-06-24 17:43:53
【发表评论】【查看原文】【Php讨论区】【关闭】 

/*转贴请保留以下信息*/
作者:[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包来实现全文检索

分享到:
评论

相关推荐

    Lucene 全文检索实践.pdf

    ### Lucene全文检索实践知识点详解 #### 一、Lucene简介与特性 Lucene是Apache Jakarta项目中的一个子项目,它提供了一套高效、灵活的全文检索解决方案。作为一个开源的文本搜索库,Lucene允许开发者轻松地为各种...

    windows+php+lucene

    这个组合通常用于在Windows环境中构建一个基于PHP的搜索引擎应用,利用Lucene库来实现高效的文本索引和检索功能。 Lucene是Apache软件基金会的一个开放源代码项目,它是一个高性能、全文本搜索库,提供了强大的文本...

    PHP运用java的lucence搜索引擎

    6. **搜索索引**:同样通过JavaBridge调用Lucene的`org.apache.lucene.search.IndexSearcher`和`org.apache.lucene.queryparser.classic.QueryParser`,构建查询并执行搜索。 7. **处理结果**:获取搜索结果后,PHP...

    PHP实例开发源码-八克小说搜索引擎 php版.zip

    PHP可以编写自定义函数实现这些算法,或者使用Lucene等全文检索库。 5. **用户界面**:提供用户友好的搜索界面是必要的,这涉及HTML、CSS和JavaScript的使用。PHP可以通过输出动态HTML并与前端JavaScript交互,实现...

    sphinx 中英文分词检索介绍

    ### Sphinx 中英文分词...综上所述,Sphinx作为一款强大的全文检索引擎,不仅具备高效的索引构建和查询能力,还通过与Coreseek等第三方工具的结合,有效解决了中文分词等问题,成为许多项目中实现全文搜索的理想选择。

    php4.3 mongo memcache solr redis.dll扩展包以及配置方法

    Solr是Apache Lucene项目的一部分,是一个强大的全文搜索引擎。在PHP中,你可以使用Solr PHP客户端库来连接和操作Solr服务器。这个库并不直接作为PHP扩展提供,而是通过Composer进行安装。首先,确保你的PHP环境支持...

    基于PHP的火端搜索php版源码.zip

    1. **全文搜索引擎**:火端搜索的核心是实现对大量文本数据的快速检索。全文搜索引擎不同于传统的关键词搜索,它可以理解文本的语义,提供更精确的搜索结果。这通常涉及到分词、索引构建和查询优化等技术。 2. **...

    多讯中文分词php扩展 v0.1.zip

    分词后的结果可以直接存储,后续可以结合如Sphinx或Lucene这样的全文搜索引擎进行索引和搜索,从而实现快速精准的中文内容查找。 此压缩包中包含的文件如下: 1. "word20100426.dat":这可能是一个更新至2010年4月...

    java开源包1

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包4

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    PHP中 对es中的数据分页 查询

    它是一个基于Lucene的开源全文搜索引擎,具有分布式、实时、高可扩展性以及灵活的数据模型等特点。PHP作为广泛使用的服务器端脚本语言,常常被用于开发与Elasticsearch交互的应用。本文将详细探讨在PHP中如何对...

    php+logstash+elasticsearch,完美解决搜索引擎及快速切片问题

    Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎,它以Lucene库为基础,提供了全文检索、结构化搜索、近实时搜索以及数据分析等多种功能。在PHP+Logstash生成的数据流中,Elasticsearch扮演了数据仓库...

    PHP工程师面试笔试真题(某知名搜索引擎提供商)-附解析.doc

    - Solr比Lucene搜索效率更高,支持HTTP访问,PHP调用方便。 - MySQL的FULLTEXT索引仅在MyISAM引擎下支持,InnoDB自5.6版本起才开始支持全文索引。 - Lucene的CJKAnalyzer适用于中文分词,适合一般的全文检索需求...

    java开源包8

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    java开源包3

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    ElasticSearch实战教程

    ElasticSearch支持分布式,可水平扩展,降低全文检索的学习曲线,可以被任何编程语言调用。 ElasticSearch具有许多版本,每个版本都有其特性。例如,5.x版本具有Lucene 6.x,性能提升,默认打分机制从TF-IDF改为BM ...

    Java资源包01

    WebSocket4J 是一个用 Java 实现的 WebSocket 协议的类库,可使用 Java 来构建交互式 Web 应用。WebSocket4J 并未实现客户端通讯协议,所以不能用它来连接 WebSocket 服务器。 Struts验证码插件 JCaptcha4Struts2 ...

    Laravel开发-laravel-zendsearch

    总的来说,`laravel-zendsearch`为Laravel开发者提供了一个简单易用的本地搜索引擎解决方案,通过整合`Zend Search Lucene`,可以在Laravel应用中快速实现全文搜索功能,提升用户体验。但也要根据项目的具体需求和...

Global site tag (gtag.js) - Google Analytics