【发布时间】:2014-04-25 11:31:26
【问题描述】:
Mongodb 是一个 nosql 数据库,任何查询都可以在上面运行,除了全文搜索,因为它会降低整体性能。 Solr 是一个搜索引擎。当我们将这两者整合在一起时,我们在两个系统中是否拥有相同的数据?因此,如果我们已经要存储数据,为什么我们不直接将其存储在 solr 和 lucene 中。顺便说一句,我不确定 solr 何时仅存储索引或与数据一起存储。
【问题讨论】:
Mongodb 是一个 nosql 数据库,任何查询都可以在上面运行,除了全文搜索,因为它会降低整体性能。 Solr 是一个搜索引擎。当我们将这两者整合在一起时,我们在两个系统中是否拥有相同的数据?因此,如果我们已经要存储数据,为什么我们不直接将其存储在 solr 和 lucene 中。顺便说一句,我不确定 solr 何时仅存储索引或与数据一起存储。
【问题讨论】:
好的,现在我知道原因了,因为只有我们在 Solr 中配置的字段将存储在 lucene 中,我们也不会将整个数据存储在 lucene 中。我们只将搜索条件字段存储在 lucene 中。他们更像是彼此完成。举例说明,假设我有一个包含 40 个字段的文档,其中 5 个是另一个文档。想象一下,我想做一个查询,说我希望文档中的 3 个特定字段等于某个值,并且在父表的一个子文档中,我有一个特定字段的另一个标准是在一个区间内,另一个是包括某些词。为此,我可以通过正确配置 solr 仅将这些字段存储在 solr 中,而不是在 mongodb 中拥有额外的索引。
【讨论】:
我可能迟到了,但这就是我开始在 mongo 中使用 solr 的原因。
原因是,我将嵌套数据存储在 mongodb 中,因此即使按照 mongodb 的指南进行索引后,查询也太慢了。因此,现在我们开始使用 solr 进行搜索,使用 mongodb 存储数据,并在 solr 中使用另一个集合进行一些基于排名的搜索。
我们不会将完整数据存储在 solr 中进行搜索,只是过滤字段和 ID,我们利用 redis 作为缓存来按 ID 获取数据。
【讨论】:
【讨论】:
我不是 MongoDB 专家,但从 this blog post 来看,MongoDB 全文搜索非常基础,很像关系数据库。这对您来说可能已经足够,也可能不够。 Lucene/Solr 提供的搜索features 遥遥领先。
请注意,您也可以将 Lucene/Solr 作为主要存储引擎。 Lucene 提供ACID 和durability after crashes。
【讨论】: