0

我们有两个站点,一个用 RoR 开发,另一个用 Python(Django)开发。MongoDB 用作站点的数据存储。这些站点是基于登录的。因此,用户只能看到他们的数据,而不能看到其他用户的数据。此外,MongoDB中有许多模型,这些模型之间是相互关联的。

我们必须开发一种类似于 Gmail 搜索的搜索功能。在 Gmail 搜索框中,有许多字段,如、 、label:to:用于过滤目的。如果没有选择这些字段,则进行正常搜索。令人惊讶的是,对于任何搜索查询,以 256 kbps 的带宽速度在不到 1 秒的时间内获取 Gmail 搜索结果。from:attachment:

通过在所有模型中调用多个查询来搜索关键字是不可行的。对于爬取数据库数据的解决方案,谷歌搜索进行了查找。

在“搜索引擎”上进行谷歌搜索时,有一个结果提到了抓取和索引网页。可用的工具是 Lucene Solr+Nutch 和 Sphinx。但它适用于抓取网页并使用 Nutch 将关键字存储到数据库中,并使用 Solr 索引关键字并搜索它们。

在“数据库搜索引擎”上搜索并没有提供任何具体结果。

在此链接中,在第二点中,有人指出MongoDB 等似乎服务于不需要搜索和/或分面的目的。那么,是不是意味着在 MongoDB 上爬取和索引是不可行的呢?

一般来说,有没有像在数据库上爬行和索引的东西,不管数据库工具(MySQL、SQLite、PostgreSQL、MongoDB 等)是什么?

更新:

我们开发的网站与 Gmail 非常相似,只是它与邮件服务无关。我们只需要开发一个搜索功能。因此,Gmail 用户可以看到他们的邮件,而不是其他人的邮件。同样,我们网站上的内容是特定于用户的。希望它能澄清问题。

4

1 回答 1

1

鉴于您的要求,据我所知,您并不真正想要网络爬虫,因为您想要索引文档的文本,而不是网页,并且文档对个人来说是私有的,因此您需要对搜索范围应用文档限制。虽然您可以以某种安全的方式(并由用户组织)抓取它们,但它似乎效率非常低且非常间接。

您需要提取数据并将其存储在全文搜索索引系统中。虽然某些数据库可能内置了全文搜索,但许多目前需要辅助系统,例如ElasticSearch或 Lucene。MongoDB 2.4 版本计划至少将全文搜索预览集成到数据库中。

正如我所提到的,一些数据库已经内置了全文搜索。大多数人对搜索结果的质量和性能的评价褒贬不一。鉴于您的要求,专用的可扩展全文搜索解决方案可能会为您提供最佳服务。

因此,当新数据进入您的系统时,您将在全文搜索系统中对其进行标记和索引。

不会有跨数据库系统的通用索引系统。您需要将其连接起来以获得最有效的搜索系统。如果您手动执行此操作,您将获得更好的结果,无论如何我都会怀疑。

于 2013-02-21T11:56:58.077 回答