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