NoSQL 用于搜索数百万页?

Posted

技术标签:

【中文标题】NoSQL 用于搜索数百万页?【英文标题】:NoSQL for searching millions of pages? 【发布时间】:2014-09-19 01:56:19 【问题描述】:

我收到了大约 4 到 5 百万张我公司决定删除的旧文档图像。我们正在尝试实现无纸化,但我面临一个我无法完全理解的问题。 我一直使用 SQL 来处理这么多的数据,但现在我只有图像。我已经购买了 ABBYY Fine Reader OCR,它目前正在将所有文件 OCR 转换为 Word 或 PDF。我的问题是他们希望在不到 7-10 秒的时间内搜索大量数据,并通过文件原始图像的下载链接获得所有结果。

我阅读了有关 NoSQL 的信息,但在我看来这不是最好的方法,因为我必须创建一个没有任何架构的表,只需添加每个图像的整个文本以及相应的页码和原始链接文件。据我所知,这需要很长时间。 我还可以使用哪些其他解决方案?

【问题讨论】:

如何使用标准的 RDBMS 和全文搜索?在今天的商品服务器上,几百万行算不了什么。 NoSQL 不是的意思是“走得更快”。 这个问题的结构不够完整,无法给出完整的答案,但 Solr 可能值得一看 - 它内置了对 pdf 文件索引的支持 【参考方案1】:

为了支持搜索一组文档,构建反向索引通常是最好的解决方案。在这里,我假设您希望支持 full text fast search 操作,例如 Google、Bing 等提供的操作……但在您的数据上。

建立反向索引通常涉及将文档拆分为单词,然后将它们单独添加到反向索引中。每个索引条目将包含一个单词作为键,文档名称(或文档的其他标识符)以及单词在文档中的位置作为值。

您可以手动执行此操作,但解析文档、提取单词、消除不重要的单词和索引它们并不是那么简单。使用专用产品更容易。

大多数 RDBMS 支持提供全文索引功能的扩展。例如:

mysql PostgreSQL Oracle MS SQL Server IBM DB2

通常,这些 RDBMS 扩展的效率低于专用引擎。我会推荐以下产品之一:

ElasticSearch,基于 Lucene Apache Solr,基于 Lucene Sphinx

我认为这些产品中的任何一个都可以索引数百万个文档。

【讨论】:

以上是关于NoSQL 用于搜索数百万页?的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop的作用

Hadoop是什么

快速方法按距离搜索数百万个坐标

Booking.com如何在毫秒内搜索数百万个地点

mysql中数百万行的基于键的分区

在 Python 中处理数百万行