我们有两个站点,一个是在RoR中开发的,另一个是在Python中开发的(Django)。 MongoDB用作站点的数据存储。这些网站是基于登录的。因此,用户只能看到他们的数据,而不能看到其他用户的数据。此外,MongoDB中有许多模型,这些模型之间是相互关联的。
我们必须开发类似于Gmail搜索的搜索功能。在Gmail搜索框中,有许多字段,例如label:
,to:
,from:
,attachment:
等用于过滤目的。如果未选择这些字段,则执行常规搜索。令人惊讶的是,对于任何搜索查询,Gmail搜索结果在256 kbps带宽速度下的获取时间不到1秒。
通过在所有模型中调用多个查询来搜索关键字是不可行的。对于抓取数据库数据的解决方案,查找了谷歌搜索。
在“搜索引擎”上进行谷歌搜索时,有一个结果提到了抓取和索引网页。可用的工具是Lucene Solr + Nutch和Sphinx。但它用于抓取网页并使用Nutch和索引关键字将关键字存储到数据库中,并使用Solr进行搜索。
Google搜索“数据库搜索引擎”并未提供任何具体结果。
在这个link中,第二点,有人说, MongoDB等似乎用于不需要搜索和/或分面的目的。那么,是否意味着MongoDB上的爬行和索引不可行?
从一般意义上讲,无论数据库工具(MySQL,SQLite,PostgreSQL,MongoDB等)如何,数据库上都有爬行和索引等内容吗?
更新
我们开发的网站与Gmail非常相似,不同之处在于它与邮件服务无关。我们只需要开发一个搜索功能。因此,Gmail用户可以看到他们的邮件,而不是其他邮件。同样,我们网站上的内容特定于用户。希望它澄清问题。
答案 0 :(得分:1)
鉴于您理解它们的要求,您实际上并不需要网络爬虫,因为您要索引文档的文本,而不是网页,文档对个人是私有的,因此您需要对文档进行应用。搜索范围。虽然您可以以某种安全的方式抓取它们(并由用户组织),但它似乎非常低效且非常间接。
您需要提取数据并将其存储在全文搜索索引系统中。虽然某些数据库可能内置了全文搜索,但许多数据库目前需要辅助系统,例如ElasticSearch或Lucene。 MongoDB的2.4版本计划至少预览整合到数据库中的全文搜索。
正如我所提到的,一些数据库内置了全文搜索功能。大多数搜索结果和性能质量都有不同的评论。根据您的要求,您可能会通过专用的可扩展全文搜索解决方案获得最佳服务。
因此,当新数据进入您的系统时,您将在全文搜索系统中对其进行标记和索引。
跨数据库系统不会有通用索引系统。您需要连接它以获得最有效的搜索系统。如果您手动执行此操作,您将获得更好的结果我无论如何都会怀疑。