【问题标题】:Google-like Search Engine in PHP/mySQL [closed]PHP/mySQL 中的类似 Google 的搜索引擎 [关闭]
【发布时间】:2010-10-04 20:57:02
【问题描述】:

我们拥有 OCRed 数千页的报纸文章。每页的报纸、期号、日期、页码和 OCRed 文本都已放入 mySQL 数据库。

我们现在想在 PHP 中构建一个类似 Google 的搜索引擎来查找给定查询的页面。它必须很快,任何搜索都不会超过一秒钟。

我们应该怎么做?

【问题讨论】:

  • 谷歌与纯文本搜索引擎的不同之处在于它研究页面之间的关系。您将如何将您的页面相互关联?链接?关键词/短语 ?如果您没有任何关系,最好使用文本搜索。
  • 我们的 50,000 项数据库需要 mySQL 大约 20 秒来进行纯文本搜索。我们的 OCRed 报纸页面是一个更大的数据集。我们需要更快的类似 Google 的索引和检索方法来在一秒钟内搜索我们的报纸。
  • 搜索引擎不使用 sql 数据库,因为它们会使搜索变慢。您可以使用 Lucene 或编写自己的搜索引擎。 php 不适合开发搜索引擎。
  • 5 年前我问过这个问题。它有 26,000 次观看和 17 次投票。所以现在,5 年后,你觉得它太宽泛了,你把它搁置了????
  • 这个应该再开,多讨论!

标签: php mysql search-engine


【解决方案1】:

检查此Lucene 端口以获取 PHP:

【讨论】:

    【解决方案2】:

    有一些有趣的搜索引擎供您查看。我不知道您所说的“Google like”是什么意思,所以我将忽略这部分。

    • 看看Lucene 引擎。原版是高性能的,但是用 Java 编写的。有一个port of Lucene to PHP(在别处已经提到过),但是太慢了。
    • 认真查看Xapian Project。它很快。它是用 C++ 编写的,因此您很可能必须为您的目标服务器构建它,但它具有 PHP 绑定。

    【讨论】:

      【解决方案3】:

      您的情况表明,您想自己动手;一般搜索引擎的良好起点包括:

      如果您想使用现成的解决方案:

      【讨论】:

      • 哇。为什么要自己写?我真的不认为 OP 的情况有什么值得重新实现最近成为商品功能的价值。
      • OP 说“我们现在要构建”
      【解决方案4】:

      您可能想查看Sphider。根据我的经验,它非常快并且会自动进行索引。它也是开源的,因此您可以获取代码并根据需要对其进行修改。

      【讨论】:

        【解决方案5】:

        您为什么不试试 Google Search Appliance 或 Google Enterprise 之类的东西?它会产生相关成本,但它会让您免于重新发明轮子并为您提供“类似 Google”的搜索。

        【讨论】:

        • 我们更愿意坚持使用 PHP 和 mySQL,因为数据库具有交叉用途,需要与我们网站的其他部分集成。
        【解决方案6】:

        你也可以试试SphinxSearch。 Craigslist 使用 sphinx,它可以连接到 mysql 和 postgresql。

        【讨论】:

        • 嗨,我创建了很多网页,我想在我的网页中搜索任何单词.. 所以,你们的答案对我有用吗?谢谢
        【解决方案7】:

        如果 MySQL 的全文搜索每次查询需要 20 秒,您要么配置错误,要么运行在动力不足的硬件上 - 一些 大型 网站成功地使用了普通的旧 MyISAM 搜索。

        不过,我的票投给了Solr。它基于 Lucene,因此您可以获得该最佳产品的所有丰富性和性能,但使用 RESTful API,使其非常容易from PHP。甚至还有dW article

        【讨论】:

        • 我同意。一路走SOLR。多次集成PHP和SOLR,值得花时间。
        • 是的,20 秒的 MySQL 全文搜索表明有问题。即使在非常低端的系统(单核,512 MB 内存)上,对于超过 250,000 行的全文,SQL + 页面渲染总时间也应该花费大约 0.01 到 0.05 秒——甚至对数据库上的每个关键字执行多个 LIKE 语句,大约250,000 不应该超过一秒钟。听起来很可能这些列都没有被全部索引。对于
        • 嗨,我创建了很多网页,我想在我的网页中搜索任何单词.. 所以,你们的答案对我有用吗?谢谢
        【解决方案8】:

        您可以将所有文件放在 Google Docs 上,然后将结果抓取到您自己的网站上。

        我担心 OCR 的准确性仍然是一个问题,因此搜索要求的一个考虑因素是执行“模糊”搜索的能力。模糊的意思是当 OCR 错误地将“帽子”一词识别为“热”时,搜索引擎将足够智能以返回相似但不准确的结果。在Oracle中,有一个叫做UTL_MATCH的函数可以比较两个字符串的相似度:http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/u_match.htm#ARPLS352

        这样的函数会很有用。

        【讨论】:

          【解决方案9】:

          sqlite 有相当不错的全文搜索能力 (查看 sqlite FTS 3/4 - 出奇的好)

          如果你想要一个简单的 PHP diy 方法来索引使用由被索引的术语的散列分割的大量小文件可以很好地工作并且即使在 php 中搜索也可以非常快如果你小心设计它。 (这个想法是对一个术语进行搜索,只需要搜索一个非常小的文件,其中包含与哈希和记录 ID 匹配的术语 - 如果你想节省 HD 空间,你可以使用位数组切片来表示记录 ID) .. 但是在 php 中对全文的每个单词进行索引会很慢 .. 这部分确实应该在 c 中完成

          对于“模糊”搜索,可以考虑使用变音位哈希。

          对于预先构建的全文工具,请查看以下内容: sqlite FTS 3/4(sqlite 有非常好的全文搜索能力!), 狮身人面像, 基诺搜索 (kinoSearch 有点像 Lucene,但后端是 c,带有一个简单易用的 perl 包装器 - 还有 cLucene,但我认为那仍然是 pre-alpha)

          Java Lucene(或任何基于 Java 的)可能需要留出大量内存来运行 JVM - 如果预算有限,可能不太好

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-09-03
            • 1970-01-01
            • 1970-01-01
            • 2012-04-04
            • 2012-10-30
            • 1970-01-01
            • 2011-08-24
            • 2012-06-04
            相关资源
            最近更新 更多