MongoDB+;Elasticsearch还是仅Elasticsearch?
我们在那里有一个新项目,用于索引大量数据并提供实时数据。我也有复杂的搜索方面,全文,地理空间 第一个原型是在MongoDB中建立索引,然后是Elasticsearch,因为我读到Elasticsearch不会对存储的文件应用校验和,索引不能完全信任。 但自从上一个版本(1.5版)以来,现在有了校验和,我猜我们是否可以使用Elasticsearch作为主要数据存储?除了Elasticsearch,使用MongoDB还有什么好处 我在Elasticsearch中找不到关于这些功能的最新答案MongoDB+;Elasticsearch还是仅Elasticsearch?,mongodb,elasticsearch,nosql,Mongodb,elasticsearch,Nosql,我们在那里有一个新项目,用于索引大量数据并提供实时数据。我也有复杂的搜索方面,全文,地理空间 第一个原型是在MongoDB中建立索引,然后是Elasticsearch,因为我读到Elasticsearch不会对存储的文件应用校验和,索引不能完全信任。 但自从上一个版本(1.5版)以来,现在有了校验和,我猜我们是否可以使用Elasticsearch作为主要数据存储?除了Elasticsearch,使用MongoDB还有什么好处 我在Elasticsearch中找不到关于这些功能的最新答案 非常感谢
非常感谢好吧,为正确的工作选择正确的工具。如果您需要搜索功能,如全文搜索、刻面等,那么没有什么能比得上成熟的搜索引擎。ElasticSearch(ES)或Solr只是一个选择问题 实际上,您可以将文档馈送(索引)到ES中进行搜索,然后从MongoDB或任何其他数据库获取特定条目的完整详细信息 我可以让你的任务更简单,看看我的开源作品,它使用MongoDB、ES、Redis和RabbitMQ,所有这些都集成在一个地方 请注意,该应用程序是在.Net C#中构建的。讨论使用Mongo而不是/与ES一起使用的参数:
- 内置MongoDB。可能不适合您的所有需求,可能在某些地方很笨拙,但它确实存在,并且在相当长的一段时间前就已经实现了
- ES中唯一的安全性是。但它仅用于生产使用的黄金/白金订阅
- ES是无模式的,但它构建在
之上,并用Lucene
编写。这个工具的核心思想是索引和搜索文档,这种方式需要索引的一致性。在后端,所有文档都应该安装在扁平的Java
索引中,这需要了解ES应该如何处理嵌套文档和值,以及应该如何组织索引以保持速度和数据完整性/一致性之间的平衡。使用ES需要您经常记住一些关于模式的事情。也就是说,由于您可以在不预先放置相应映射的情况下将几乎任何内容索引到ES,ES可以动态地“猜测”映射,但有时会出错,有时隐式映射是有害的,因为一旦放置,就无法通过重新索引整个索引来更改。因此,最好不要将ES视为无模式存储,因为您可以在某个时候使用rake(这会很痛苦:),而是将其视为模式密集型存储,至少在您处理文档时,可以将其分割为具体字段lucene
- 另一方面,Mongo可以“咀嚼并且不留下面包屑”,几乎任何你放进去的东西都可以。在您还记得Mongo将如何从JavaScript角度处理您的数据之前,您的大多数查询都可以正常工作。由于JS是弱类型的,所以您可以使用真正无模式的工作流(如果需要的话,当然可以)
- ES仅限于在不将数据放入搜索索引的情况下处理数据。当您需要存储和检索一些额外的数据(与要搜索的数据相比)时,这个解决方案已经足够好了
- MongoDB支持。这使您能够在同一接口后面处理大量数据。也就是说,您可以在Mongo中存储二进制数据,并从代码的角度在同一接口中检索它
我最近在公司开发了一个功能 我们希望执行一些搜索,并根据结果在多个因素和条件下的相关性对结果进行排序 所以在我的应用程序中,我们已经使用MongoDB作为Db 所以在ElasticSearch index上,我从MongoDB导出了一些我想要执行搜索和筛选的字段。 因此,根据所需的条件,我还准备了mongo查询和elasticsearch查询,并执行了搜索。然后我根据需要对结果进行过滤和排序。 整个流程的设计方式如下:, 即使ES出现错误,mongo也会获取记录。 如果我从ES得到结果,mongo结果将取决于ES结果。 这就是我如何结合使用mongo和ES的方法 另外,不要忘记正确处理所有更新、删除和插入新记录
我只想知道,结果对我来说真的很好。在生产中使用Elasticsearch后,我可以总结出以下几条线索:
- 我们通过反向代理将我们的Elasticsearch集群安全化,该代理在请求时检查客户端证书的真实性,然后再让查询进入:它证明了无论如何都有多种方式来添加身份验证。(如果您需要更精确的安全性,比如使用角色,那么可以添加一些插件来管理权限)
- Elasticsearch映射和设置(调整)是在开始生产之前需要完全理解的非常重要的概念,要想快速了解所有内容的工作原理并不容易
- 集群和水平扩展非常灵活,易于设置
- 套件工具(Kibana、beats等)是收集日志、公开关键数据等的非常方便的方法
- 搜索功能非常先进,当您稍微掌握全文搜索的工作原理(模糊、增强、评分、词干、标记器、分析器等等)时,您真的可以做出惊人的事情
- API有点分散,没有独特的方法来实现某些东西。有些API是真正可以使用的WTF,比如批量插入API:您需要传递二进制数据,使用JSON格式(ofc不要忘记行尾字符),并多次重复某些字段。这是非常冗长的,我想这是我们在p