数据库爬虫与索引
我们有两个网站,一个是用Ruby on Rails开发的,另一个是用Python(Django)开发的。这两个网站都使用MongoDB作为数据存储。网站是基于登录的,所以用户只能看到自己的数据,而看不到其他用户的数据。此外,MongoDB中有很多模型,这些模型之间是相互关联的。
我们需要开发一个类似于Gmail搜索的功能。在Gmail的搜索框中,有很多字段,比如label:
、to:
、from:
、attachment:
等,用于过滤搜索结果。如果没有选择这些字段,就会进行普通搜索。令人惊讶的是,Gmail的搜索结果在256 kbps的带宽下,任何搜索查询都能在不到1秒的时间内返回结果。
通过在所有模型中调用多个查询来搜索关键词并不可行。为了寻找数据库数据的爬取解决方案,我们查了一下谷歌搜索。
在搜索“搜索引擎”时,有一个结果提到了爬取和索引网页的内容。可用的工具有Lucene Solr+Nutch和Sphinx。但这些工具是用来爬取网页并通过Nutch将关键词存储到数据库中,然后用Solr进行关键词索引和搜索。
搜索“数据库搜索引擎”并没有提供任何具体的结果。
在这个链接中,第二点提到过MongoDB等似乎适用于没有搜索和/或分面需求的场景。这是否意味着在MongoDB上进行爬取和索引并不可行?
从一般的角度来看,数据库中是否存在爬取和索引的概念,无论使用什么数据库工具(MySQL、SQLite、PostgreSQL、MongoDB等)?
更新:
我们开发的网站与Gmail非常相似,只是它不是邮件服务。我们只需要开发一个搜索功能。因此,Gmail用户能够看到自己的邮件,而看不到其他人的邮件。同样,我们网站上的内容也是特定于用户的。希望这能澄清问题。
1 个回答
根据我对你需求的理解,你其实并不需要一个网络爬虫,因为你想要的是对文档的文本进行索引,而不是网页。而且这些文档是个人私有的,所以你需要在搜索范围上设置一些限制。虽然你可以用某种安全的方式去爬取这些文档(并按用户进行组织),但这样做效率很低,而且方法也很间接。
你需要提取数据,并将其存储在一个全文搜索索引系统中。虽然有些数据库可能内置了全文搜索功能,但很多数据库目前需要一个额外的系统,比如ElasticSearch或Lucene。例如,MongoDB的2.4版本计划会有一个全文搜索的预览功能集成到数据库中。
正如我提到的,有些数据库确实有内置的全文搜索功能。但大多数的搜索结果质量和性能评价都不一。考虑到你的需求,使用一个专门的、可扩展的全文搜索解决方案可能是最合适的选择。
所以,当新数据进入你的系统时,你需要在全文搜索系统中对其进行标记和索引。
在不同的数据库系统之间不会有一个通用的索引系统。你需要为最有效的搜索系统进行连接。如果你手动去做这个,结果可能会更好。