【问题标题】:PHP-based search frameworks基于 PHP 的搜索框架
【发布时间】:2010-10-16 02:47:39
【问题描述】:

我将创建一个需要高级搜索功能的小型网站。由于重新发明轮子并不是一件值得做的事情,所以我做了一些谷歌搜索,发现有一些基于 PHP 的搜索框架,其中一个集成到 Zend 框架中。

我想在框架中拥有什么:

  1. 全文和目录搜索功能
  2. 显示按相关性排序的结果
  3. 能够按类别过滤结果
  4. 按各种标准对结果进行排序
  5. 快速搜索
  6. 不需要快速插入

由于该网站将包含相当多的静态内容(一些文本和产品目录),我可能会使用一些预先生成的索引。

是否有任何(免费)框架可以满足上述要求?建议、提示和想法非常受欢迎。如果您能分享您实施搜索系统的经验,那就太好了。

【问题讨论】:

    标签: php frameworks full-text-search search


    【解决方案1】:

    绝对使用SOLR。 Solr 使用 lucene。这对中/大型网站有用吗....

    好在你可以从 solr 请求 php 序列化格式的结果...

    编辑:

    这就是你要找的东西,我完全忘记了:Lucene Port To PHP by Zend

    【讨论】:

      【解决方案2】:

      看看 Omega(基于 Xapian)-a link to the Xapian project page

      您可以在 cgi 方面集成它。因为它基于令人眼花缭乱的快速 Xapian,如果设置正确,它将是最快的选项之一。它可以做你要求的一切(包括搜索结果的相关性、索引网络服务器文档(html、pdf、word、excel、sql 数据库......)做'stemming'等......)

      另一个(也是非常好的选择)当然是Apache Lucene --> 您引用的 Zend 框架中包含的就是这个(“Zend Search”)。它可以做所有相同的技巧,虽然我个人更喜欢 Xapian。

      编辑:如果我没记错的话,请注意 Omega(和 Xapian)是 GPL 而 Apache Lucene 是 LGPL。

      【讨论】:

      • 请注意 - Xapian 似乎是 GPL 许可的,这意味着,如果您从代码中引用它,您的代码也必须是 GPL。
      • 感谢您的评论,我会更新帖子,因为这可能与提问者非常相关。
      • 如果您正在查看 Zend_Search_Lucene,请确保获得 php|architect 的 1 月刊。它包括一篇文章,其中提到了它的常见缺陷。
      • 感谢您提供有关许可证的答案和信息。这将是一个小项目,因此托管公司可能无法通过 cgi 进行集成。但是 Apache Lucene 似乎是 Zend 实现的一个不错的选择。谢谢,Till,我去看看杂志。
      • 这些是如何基于 PHP 的?
      【解决方案3】:

      我最近开发了一个建议全文搜索,用于我基于 Zend Framework 的 Web 应用程序 - 我找不到任何适合我要求的现成解决方案,所以我全力以赴开发了一个简单的(全文)关键字搜索机制从头开始。我发现以下文章很有帮助:

      http://devzone.zend.com/node/view/id/1304

      http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

      我现在拥有的是一个系统,它根据在数据库中保存(或更新)项目时生成的“文本摘要”来匹配项目。我有一个名为 kw_search_summary 的表,其中包含每个项目的文本摘要(生成的脚本)、它的 id 和它的类别 id。 'summary' 列是 mysql 全文索引,所以我只需 MATCH() 汇总列 AGAINST() 给定表达式,并按相关性显示结果。构建这个查询的代码看起来有点像这样:

          $select = $this->db->select()
                       ->from(array('kwi' => 'kw_search_index'),
                              array('id','prodcatid','itemid','useradid','summary','relevance' => "match(summary) against($safeExp in boolean mode)"))
                       ->where("match(summary) against($safeExp in boolean mode)")
                       ->order('relevance desc')
                       ->limitPage($currentPage,self::RESULTS_PER_PAGE);
      

      希望这至少有点帮助。

      【讨论】:

        【解决方案4】:

        如果网站只有静态内容,您可能需要使用 CMS,例如 JoomlaDrupal。两者都有很好的搜索系统。但是,搜索实际上取决于您拥有的内容类型。如果只是搜索页面的 HTML,那是一回事,但在数据库中搜索特定型号的产品是另一回事,在这种情况下,您需要购物车/电子商务系统而不是 CMS。

        【讨论】:

        • 感谢您的回答。好吧,我实际上是在寻找一个可以集成到我的项目中的搜索系统,而不是一个完整的 CMS 或电子商务包。
        猜你喜欢
        • 2011-01-11
        • 2012-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多