`
ythzjk
  • 浏览: 75466 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Zend Search Lucene实现全文搜索收藏

阅读更多

Zend Search Lucene实现全文搜索收藏

新一篇: MySQL的优化  | 旧一篇: 缓存策略的改动

<noscript></noscript>

简介:Zend_Search_Lucene 是一个完全由 PHP 5 编写的通用文本搜索引擎。由于其将索引保存在文件系统中而不需要数据库支持,因此它几乎可以为任何由 PHP 驱动的网站增加搜索能力。Zend_Search_Lucene 支持下列特性:

  • 具有排名功能的搜索——最符合要求的结果出现在最前面
  • 许多强大的查询类型:短语查询、通配符查询、近似查询、范围查询等 
  • 搜索特定的字段,如标题、作者、内容,等等

Zend_Search_Lucene 来源于 Apache Lucene project。要了解关于 Lucene 的更多详情,请访问 http://lucene.apache.org/java/docs/

看了N久,查了许多的文章和例子之后,终于成功运行了,特记录下来,与大家共享。

首先需下载Zend Framework,下载地址:http://framework.zend.com
我这里用的是Preview 0.1.5版.
具体的使用方法请看官方文档,中文文档在这里:http://www.phpeye.com/zf/zend.search.html#zend.search.overview

好,下面请看我的例子。

1、建立索引
你可以对静态页面文件(如新闻网站等)进行索引,也可以对数据库的内容进行索引,总之,一切的数据都
索引。我这里以mysql数据库为例。

createindex.php

<?php
require_once ‘../includes/application_top.php’;
require_once DIR_FS_CATALOG . ‘includes/Zend/Search/Lucene.php’;
if (function_exists(”set_time_limit”) && ! get_cfg_var(’safe_mode’)) {
  set_time_limit(0);
}
$index = new Zend_Search_Lucene(’index’, true);//建立索引对象,TRUE表示一个新的索引
$sql = “SELECT c.categories_name, m.models_id, m.models_name, m.models_series, ” .
         ”m.models_brand, p.products_id, p.products_title…”; //查询数据库产品资料
$result = $class_db->query($sql);
while($row = $result->fetchRow()) {
  $url = ‘http://www.sellcamera.net/detail.php/’ . $row[’products_id’]; //产品链接
  $title = $row[’products_title’];//产品标题
  $description = $models_brand . ‘ ‘ . $models_name . ‘ ‘ . $categories_name; //产品的描述,自己组合它的内容
 // Store document URL to identify it in search result.
  $doc = new Zend_Search_Lucene_Document();//建立一个索引文档
  $doc->addField(Zend_Search_Lucene_Field::UnIndexed(’url’, $url));
  $doc->addField(Zend_Search_Lucene_Field::Text(’title’, $title));
  $doc->addField(Zend_Search_Lucene_Field::Text(’contents’, $description));
  $index->addDocument($doc); //将这个文档加到索引中
}
// Write changes to the index.
$index->commit();//提交,保存索引资料
?>

好的,再运行它,就将网站的所有产品资料的索引保存到指定的目录中了。接下来,我们要做的就是将它们
查找出来。

search.php

<?php
require_once ‘../includes/application_top.php’;
require_once DIR_FS_CATALOG . ‘includes/Zend/Search/Lucene.php’;
$index = new Zend_Search_Lucene(’index’); 
$str = <<< EOT
<form method=get action=”">
<input type=”text” name=”keywords”><input type=”submit”>
</form>
EOT;

echo $str;
$keywords = strtolower($_GET[’keywords’]);
if(! empty($keywords)) {
 $hits = $index->find($keywords);
    echo ‘<br>Search result:<br>’;
    foreach ($hits as $hit) {
        echo ‘<a href=”‘ . $hit->url . ‘”><strong>’ . $hit->title . ‘</strong></a><br>’;
        echo $hit->contents . ‘<hr>’;
    }
}
?>

OK,大功告成,赶快试试吧。

分享到:
评论
1 楼 kingheaven 2009-07-30  
我试了这个类库, 它不知道lucene2.4生成的数据.

相关推荐

    使用zend Framework的lucene进行全文检索

    在本文中,我们将探讨如何使用Zend Framework的Lucene模块进行全文检索,特别是针对中文分词的处理。全文检索是提高网站或应用搜索功能的关键技术,它允许用户输入任意词汇,系统能够快速找到与之相关的内容。Zend ...

    Laravel开发-laravel-zendsearch

    `laravel-zendsearch`是Laravel社区开发的一个集成项目,它将`Zend Search Lucene`(一个强大的全文搜索引擎)与Laravel框架相结合,为开发者提供了一种在本地文件系统上实现高效全文搜索的解决方案。 `Zend Search...

    ZEND FRAMEWORK 1.11.7 中文参考文档

    •Getting Started with Zend_Search_Lucene •Getting Started with Zend_Paginator •Zend Framework Reference •Zend_Acl •Zend_Amf •Zend_Application •Zend_Auth •Zend_Barcode •Zend_Cache •...

    ZendFramework中文文档

    1. Introduction to Zend Framework 1.1. 概述 1.2. 安装 2. Zend_Acl 2.1. 简介 2.1.1. 关于资源(Resource) 2.1.2. 关于角色(Role) 2.1.3. 创建访问控制列表(ACL) 2.1.4. 注册角色(Role) 2.1.5. 定义访问...

    Gratian Server-开源

    在技术层面上,Gratian Server的实现基于 Zend Framework 中的 Zend_Search_Lucene 组件,这是一个功能丰富的全文搜索和索引库。它提供了对多种文档格式的支持,包括HTML、PDF、Word等,能够对这些文件进行高效的...

    ist的matlab代码-typo3-mksearch:使用ZendLucene,ApacheSolr或ElasticSearch的通用的高度

    从理论上讲,可以实现与任何搜索引擎的连接。 当前有用于Zend Lucene,ElasticSearch和Apache Solr的MK搜索连接。 这意味着既有面向入门级用户的纯PHP版本,也有面向高端应用程序的专业客户端-服务器解决方案。 与...

    search-bundle

    它适用于 lucene 搜索库并包含 zend 组件。 安装 在应用内核中 new Ivory\LuceneSearchBundle\IvoryLuceneSearchBundle(), new Lpi\Bundle\SearchBundle\LpiSearchBundle(), 配置 在 app/config/config.yml ...

    MassiveSearchBundle

    默认情况下,它配置为使用Zend Lucene库,该库必须已安装(请参阅composer.json的Recommendations和require-dev部分)。 注意:该捆绑软件位于developmenet下,尚不稳定。 安装 您可以通过将其添加到composer.json...

    Yii框架引用插件和ckeditor中body与P标签去除的方法

    2. 在控制器文件的头部使用`Yii::import`和`require_once`来导入需要的PHP类文件,例如`Zend/Search/Lucene.php`。需要注意的是,`Yii::import`应该在`require_once`之前使用,以确保Yii可以正确地处理文件路径。 ...

Global site tag (gtag.js) - Google Analytics