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

时间:2011-05-10 16:59:29

标签: database nosql web-crawler document-oriented-db

我目前正在考虑如何在数据库中最好地存储网络抓取结果。在另一个问题中,建议将面向文档的数据库用于Web爬虫项目:Database for web crawler in python?

现在我想知道map / reduce是否是这种分类和价值生成的正确方法。至少它似乎能够做这样的事情(地图只用于分类如年或作者,而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'

我猜DocumentStores不支持这样的操作,因为它们不支持全文索引,并且不打算有很多引用/关系。

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

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

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

2 个答案:

答案 0 :(得分:1)

结帐RavenDB。它是一个带有Map / Reduce查询的文档DB,使用Lucene,因此Map / Reduce查询中也完全支持全文搜索。

也支持自定义Lucene分析器,因此还有很多空间可用于进一步的全文扩展。

其他功能(如“包含”和“实时投影”)可能会为您提供所有其他功能,只会丢失简单的Map / Reduce。

答案 1 :(得分:0)

请参阅MarkLogic - 专门用于搜索文档。 http://developer.marklogic.com/products/marklogic-server/which-nosql