为什么要将ElasticSearch与Mongo配合使用?

24

最近我读了一些关于将 mongodb 用于存储和 elasticsearch 用于索引/搜索的文章。但我感觉好像还缺少了什么。与仅使用mongo进行数据索引相比,为什么要选择这种方式呢? Elasticsearch带来了哪些好处,是否值得增加复杂性?

3个回答

33

ElasticSearch实现了更多的功能,例如自定义文本分词、自定义词干处理、分面搜索等等。虽然MongoDB的(相对简单的)文本搜索有些功能,但它远远不如ElasticSearch强大。

如果你仅仅是在单个字段中查找单个字符串,那么MongoDB的普通查询系统对此非常适用。如果你需要在多个字段中查找单词,则可以使用MongoDB的文本搜索。如果你需要更多的功能,那么请使用ElasticSearch。


18
一个搜索引擎和一个数据库做的事情有本质上的不同。一个好的搜索引擎(如ElasticSearch)支持更为复杂和详细的索引、属性、高亮等功能。在ElasticSearch中,您还可以获得实时回复。另一方面,搜索引擎不会返回每个与您的查询匹配的文档。相反,它会根据匹配程度对文档进行评分,并返回得分最高的一些文档。当您查询MongoDB等数据库时,您应该期望它返回所有与您的查询匹配的内容。
可以将整个文档存储在ElasticSearch中,但通常这不是最优解。通常情况下,您会将其配置为返回文档ID,然后使用该ID从数据库中获取文档。MongoDB是一种针对基于文档的存储优化的数据库。这就是为什么您会听到人们将它们一起使用的原因。 编辑: 当发布此内容时,它符合建议,但现在可能已经不再是这种情况了。

你能给一个使用案例吗?我认为同时使用两种NoSQL并不是实现某些特殊功能的最佳解决方案。 - Bhavesh Gadoya
这是一个使用案例:https://blog.quarkslab.com/mongodb-vs-elasticsearch-the-quest-of-the-holy-performances.html - rebe100x

4
德里克的回答几乎完美地解决了问题。所有这些背后的问题是:
您想在应用程序中实现哪些功能?
如果您依赖于对大量文本进行深度搜索的能力,ElasticSearch可能是一个不错的选择。如果您想拥有一个灵活的数据存储库,可以处理复杂的特别查询,则Mongo可能适合。如果您对数据存储有不同的要求,通常最好结合两个工具,而不是实施各种变通方法,以使其与一个数据存储一起工作。
选择正确的工具来完成工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接