23

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

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

我们应该怎么做?

4

9 回答 9

15

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

于 2009-02-02T05:50:43.367 回答
10

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

  • 看一下Lucene引擎。原版是高性能的,但是用 Java 编写的。有一个Lucene 到 PHP 的端口(已经在别处提到过),但它太慢了。
  • 认真看看Xapian 项目。它很快。它是用 C++ 编写的,因此您很可能必须为您的目标服务器构建它,但具有 PHP 绑定。
于 2009-02-02T05:23:23.923 回答
10

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

但是,我投票支持Solr。它基于 Lucene,因此您可以获得该最佳产品的所有丰富性和性能,但使用 RESTful API,使其非常容易从 PHP中实现。甚至还有一篇 dW 文章

于 2009-02-02T08:44:26.747 回答
4

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

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

像这样的功能会很有用。

于 2012-10-18T16:08:13.063 回答
2

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

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

于 2009-02-02T05:24:48.210 回答
2

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

于 2009-02-02T05:33:51.203 回答
1

检查 PHP 的这个Lucene端口:

于 2009-02-02T05:16:52.343 回答
1

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

于 2009-02-02T05:28:22.413 回答
0

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

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

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

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

Java Lucene(或任何基于 Java 的)可能需要留出大量内存来运行 JVM——所以如果你有预算的话,可能不是那么好

于 2013-02-28T04:32:47.693 回答