Mongodb是一个nosql数据库,除了全文搜索外,可以在其上运行任何查询,因为它会降低整体性能。 Solr是一个搜索引擎。当我们将这两者结合在一起时,那么我们在两个系统中都没有相同的数据吗?因此,如果我们已经存储了数据,为什么我们不直接将它存储在solr和lucene中。顺便说一下,我不确定solr只存储索引或与数据一起存储。
答案 0 :(得分:4)
好了,我知道原因,因为我们在Solr中配置的字段只存储在lucene中,我们也没有将整个数据存储在lucene中。我们只在lucene中存储搜索条件字段。他们更像是互相完成。用一个例子来解释一下,我说有一个包含40个字段的文档,其中5个是另一个文档。想象一下,我想要查询说我希望文档中的3个特定字段等于某个值,并且在父表的子文档之一中,我有另一个标准,特定字段在一个区间中,另一个标准在另一个区间中包括某些词。为此而不是在mongodb中有额外的索引,我可以通过正确配置solr只在solr中存储这些字段。
答案 1 :(得分:3)
我可能会迟到,但这就是我开始使用solong和mongo的原因 原因是,我将嵌套数据存储在mongodb中,因此即使在根据mongodb的指南进行索引之后查询也太慢了。因此,现在我们开始使用solr进行搜索,使用mongodb来存储数据,并使用solr中的另一个集合进行基于排名的搜索。
我们不会在solr中存储完整数据,只搜索过滤字段和ID,我们利用redis作为缓存来按ID获取数据。
答案 2 :(得分:2)
我在集成Solr和MongoDB方面有一些经验。
我使用Mongo作为数据存储。 Solr充当搜索引擎(服务器)。 因为,Solr给了我更灵活的全文搜索。
答案 3 :(得分:1)
我不是MongoDB专家,但从this blog post来看,MongoDB全文搜索非常基本,就像在关系数据库中一样。这对你来说可能就足够了,也可能不是。 Lucene / Solr提供的搜索features遥遥领先。
请注意,您也可以将Lucene / Solr作为主存储引擎。 Lucene提供ACID以及durability after crashes。