【发布时间】:2014-01-29 05:44:43
【问题描述】:
我最近阅读了几篇关于mongodb 用于存储和elasticsearch 用于索引/搜索的组合的文章。我觉得我错过了一些东西。你为什么要走这条路而不是using mongo to index 数据? elasticsearch 带来什么好处,是否值得增加复杂性?
【问题讨论】:
标签: mongodb elasticsearch
我最近阅读了几篇关于mongodb 用于存储和elasticsearch 用于索引/搜索的组合的文章。我觉得我错过了一些东西。你为什么要走这条路而不是using mongo to index 数据? elasticsearch 带来什么好处,是否值得增加复杂性?
【问题讨论】:
标签: mongodb elasticsearch
ElasticSearch 实现了更多功能,例如将文本自定义拆分为单词、自定义词干提取、分面搜索等等。虽然 MongoDB 的(相当简单的)文本搜索可以做到这一点,但它不如 ElasticSearch 强大。
如果您所做的只是在单个字段中查找单个字符串,那么 MongoDB 的普通查询系统将非常适合。如果您需要在多个字段中查找单词,那么 MongoDB 的文本搜索将起作用。如果您需要更多的东西,ElasticSearch 就是您的最佳选择。
【讨论】:
搜索引擎和数据库做一些根本不同的事情。一个好的搜索引擎(如 ElasticSearch)支持更精细和复杂的索引、构面、突出显示等。在 ElasticSearch 的情况下,您还可以“实时”获得回复。另一方面,搜索引擎不会返回与您的查询匹配的每个文档。相反,它将根据文档的匹配程度对文档进行评分,并返回得分最高的文档。当您查询 MongoDB 等数据库时,您应该期望它返回与您的查询匹配的everything。
您可以将整个文档存储在 ElasticSearch 中,但这通常不是最佳解决方案。通常,您会将其配置为返回文档 ID,您可以使用它从数据库中获取文档。 MongoDB 是针对基于文档的存储优化的数据库。这就是为什么你听说人们一起使用它们的原因。
编辑:
发布时,它与建议相符,但可能不再如此。
【讨论】:
Derick 的回答非常准确。这一切背后的问题是:
您希望在应用程序中实现哪些功能?
如果您依赖于大量文本中的大量搜索功能,那么 ElasticSearch 可能是一个不错的选择。如果您想拥有一个灵活的数据存储来处理复杂的即席查询,那么 Mongo 可能是一个不错的选择。如果您对数据存储有不同的要求,那么将两种工具组合在一起通常是一件好事,而不是实施各种变通方法以使其仅适用于一个数据存储。
为工作选择合适的工具。
【讨论】: