文档存储(单独)是否适合搜索文档?



我目前正在考虑如何在数据库中最好地存储网络爬虫结果。在另一个问题中,面向文档的数据库被推荐用于网络爬虫项目:python中的网络爬虫数据库?

现在我想知道map/reduce是否是这种分类和价值生成的正确方法。至少它似乎能够做这样的事情(map仅用于年份或作者等分类,以及用于计算数值的map/reduce,我目前想不出一个例子)。

但是,map-reduce/DocumentStores是否也能够为给定的单词提供正确的文档?在关系数据库中,我必须对某些表使用 JOIN,然后获取包含以下单词的文档:

SELECT * FROM docs d 
JOIN doc_words dw ON dw.doc_id = d.id 
JOIN words w ON dw.word_id = w.id 
WHERE w.word = 'foo'

我想文档存储无法进行这样的操作,因为它们不支持全文索引,并且不打算有很多引用/关系。

更好的选择是混合多个系统吗? 例如,一个用于按单词搜索,一个用于按不同的值搜索(如果存在)(如出版年份、作者等)?我认为 DocumentStore 对于存储元数据来说并不是那么糟糕,因为有时有特定的值,有时没有(如果需要,只要一台服务器的文档太多,DocumentStore 就很容易在多个服务器上使用)。然而,我不确定实现搜索文档集合的最佳方法是什么(包括网页,pdf,图像,它们总是具有不同的元数据,但通常还需要全文索引)。

要提出一个明确的问题:我应该将另一个数据库系统与 DocumentStore 一起使用,还是单独使用 DocumentStores(如何快速搜索单词?)还是单独使用另一个数据库系统?

PS:此类问题的另一个示例是网页之间的链接,该网页也无法很好地保存在DocumentStore中。但是,OrientDB可能会解决此问题,因为它似乎结合了图形数据库和面向文档的数据库。

Checkout RavenDB。它是一个带有 Map/Reduce 查询的文档数据库,在后台使用 Lucene,因此在 Map/Reduce 查询中也完全支持全文搜索。

还支持自定义 Lucene 分析器,因此为进一步的全文扩展有很大的空间。

其他功能(如包含和实时投影)可能会为您提供其他所有内容,而简单的地图/减少功能将丢失。

请参阅 MarkLogic - 它是专门为搜索文档而设计的。 http://developer.marklogic.com/products/marklogic-server/which-nosql

最新更新