PHP / mySQL中类似Google的搜索引擎

时间:2009-02-02 05:10:04

标签: php mysql search-engine

我们已经删除了数千页的报纸文章。每页的报纸,问题,日期,页码和OCR文本都已放入mySQL数据库。

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

我们应该怎么做?

9 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:10)

有一些有趣的搜索引擎供您查看。我不知道“谷歌喜欢”是什么意思所以我只是忽略那部分。

  • 看看Lucene引擎。原始版本是高性能的,但是用Java编写。有一个port of Lucene to PHP(已经在其他地方提到过),但它太慢了。
  • 认真看看Xapian Project。它很快。它是用C ++编写的,所以你很可能必须为目标服务器构建它,但是有PHP绑定。

答案 2 :(得分:10)

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

然而,我的投票是Solr。它基于Lucene,因此您可以获得最佳产品的所有丰富性和性能,但使用RESTful API,可以非常轻松地from PHP。甚至有dW article

答案 3 :(得分:4)

您可以将所有文件放在Google文档上,然后将结果写入您自己的网站。

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

这样的功能很有用。

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

为什么不尝试使用Google Search Appliance或Google Enterprise?这将有相关的成本,但它将节省您重新发明轮子,并给你“像谷歌一样”搜索。

答案 6 :(得分:1)

检查此Lucene端口是否为PHP:

答案 7 :(得分:1)

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

答案 8 :(得分:0)

sqlite具有相当不错的全文搜索功能 (查看sqlite FTS 3/4 - 令人惊讶的好)

如果你想要简单的PHP diy方法使用大量小文件进行索引,这些小文件被索引的术语的哈希分开可以很好地工作,如果你小心设计它,即使在php中搜索也可以非常快。 (想法是在一个术语上进行搜索只需要搜索包含与哈希和记录ID相匹配的术语的非常小的文件 - 如果你想节省高清空间,你可以使用比特片来表示记录ID) ..但是对于全文的每个单词的索引在php中会很慢..那部分应该真的在c中完成

对于“模糊”搜索可能会使用metaphone哈希值。

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

Java Lucene(或任何基于Java的东西)可能需要大量的ram才能运行JVM - 所以如果你有预算可能不是那么好