【问题标题】:What is best way to using Elastic search for searching (Via Server vs Direct Java Client)?使用弹性搜索进行搜索的最佳方法是什么(通过服务器与直接 Java 客户端)?
【发布时间】:2017-09-19 07:42:24
【问题描述】:

我是 Elasticsearch 的新手。我想存储产品详细信息的文档。现在我使用 Mongodb 作为我的数据库和 nodejs 服务器。但是 Mongodb 没有 Elasticsearch 这样好的搜索功能。

所以我正在考虑转向 ES。但是我几乎没有如下所述的疑问,请建议我该怎么做。任何建议将不胜感激。

  1. 我是否应该使用 MongoDb 作为存储文档的主数据库并使用 ES 作为辅助数据库来进行高效搜索。或者我是否应该将 ES 作为我唯一的用于存储文档和搜索的数据库。

  2. 同时使用两者对未来有好处吗,否则会使事情变得难以管理。我还读到 ES 不是主数据库的好选择,因为它有时会丢失写操作。

  3. 我应该在 nodejs 中创建一个服务器来执行 ES 操作以执行任何复杂的搜索或 GET、PUT 使用 rest api 还是应该直接在 java 中实现它。

(请注意,我正在制作一个 android 应用程序,所以我应该使用 TransportClient 并直接与 Elasticsearch 交互,或者我应该首先从 android 端向我的服务器发送一个 GET 请求,我的 nodejs 服务器将与 ES 交互并发送响应到我的安卓应用)

  1. 除了搜索部分,ES 在数据库方面的表现与 MondoDb 一样好。

    提前致谢。

【问题讨论】:

    标签: android node.js mongodb elasticsearch full-text-search


    【解决方案1】:

    我在这里冒着一个固执己见的答案的风险。不过我会尽力帮助你:

    1. 我使用 elasticsearch 作为主要数据存储,以防数据不那么重要或只是太大而无法复制。如果您有日志之类的东西,您还可以保留原始日志文件。默认情况下,我会说,使用不同的数据库作为主存储,这样如果你想对搜索索引进行更改,你可以随时重建弹性。
    2. 向您的基础架构添加组件会增加管理工作量。因此,添加 MongoDB 和 Elastic 确实意味着更多的移动部件。但是,它也为您提供了更大的灵活性。除非您要搜索的内容非常基本并且也可以使用 MongoDB 完成,否则我不会太害怕。
    3. 我建议始终在您的搜索引擎前面放置一个应用程序。把它当作一个数据库,你不会把它暴露给世界。
    4. 我不会在您的 Android 应用程序中使用传输客户端。这将意味着安全风险。您希望按照 3 中所述连接到您的后端,并让该应用程序连接到您的搜索集群。

    希望有帮助

    【讨论】:

    • 感谢您的帮助。 1)如果数据不重要,您的意思是什么。我必须存储产品的详细信息,如名称、价格、品牌,所以它很重要。 2)你想让我使用将与 ES 交互的节点 js 服务器。 3)还有一件事,我是否需要将所有 mondodb 文档复制到 ES,以便只复制我想要搜索的字段(即仅投影我想要搜索的文件)。 4)你能指导我如何第一次将mongodb文档复制到ES,我们如何选择我想要索引的字段并重建它们。谢谢
    • 1) 不重要,因为如果你松开它就不是真正的问题。 2) 是的,或者您喜欢的任何其他后端 3) 只是您要搜索的字段 4) 有很多可用的文档。通常我只是将我发送给 Mongo 的文档也发送给 elastic。看看这个:github.com/mongodb-labs/mongo-connector
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 2010-09-09
    相关资源
    最近更新 更多