elasticsearch - 设置 ElasticSearch 以仅在每个客户的数据中进行搜索的最佳方式

标签 elasticsearch architecture

我们有一个 SAAS 产品,公司可以在其中创建帐户并填充自己的私有(private)数据。我们正在考虑使用 ElasticSearch 让客户在我们的系统中搜索他们自己的所有数据。

例如,我们将有一个自由文本搜索,用户可以在其中键入任何内容,API 将返回多种不同类型的对象。例如。他们输入 John并且 API 返回匹配包含 John 的名字的用户的用户对象,或包含 John 的电子邮件.或者它也可能返回一个团队名称与 John 匹配的团队对象(例如 John's Team )等。

所以我的问题是:

  • 对于我们想要做的事情,ElasticSearch 是一个明智的选择吗?
    概念视角?
  • 如果我们确实使用 ElasticSearch 会是什么
    索引数据的最佳方法,以便我们可以搜索所有数据
    特定客户?每个客户都有自己的索引吗?
  • 关于我们如何使 ElasticSearch 与数据库 (DynamoDB) 中的数据保持同步,有什么提示吗?如果我们为客户的数据编制索引,然后在数据发生变化时更新数据,那么按计划重新编制数据索引是否也是明智之举?

  • 谢谢!

    最佳答案

    我将尝试根据我自己使用 Elasticsearch 拆分客户数据的经验提供一般性答案:

  • 如果你想快速搜索大量数据,ES 总是一个很好的解决方案——它伴随着二级数据存储的成本,你必须与数据库保持同步。
  • 您不能在一个索引中拥有不同的数据类型,因此情况可能是为每种数据类型和客户创建一个索引(小心,索引会带来开销 - 避免在其中创建太多数据且数据很少) - 或者您创建一个索引每个数据类型并为您的数据添加一个属性,然后您可以使用例如过滤它客户编号。
    您将不得不 denormalize您的数据尽可能从 Elasticsearch 中受益。
  • 如 1 中所述,您需要保持两者同步 - 也有很多方法可以做到这一点。作为一个例子,我们使用事件驱动的方法尽快将关键更新推送到 elasticsearch(小心:它不是 SQL - 所以当你需要读写安全时,你总是会遇到一些并发问题)。对于不是非常关键的数据,我们使用定期更新它们的作业。当您索引具有相同 id 的文档时,它将完全更新。

  • 希望这会有所帮助,请随时提出问题。

    关于elasticsearch - 设置 ElasticSearch 以仅在每个客户的数据中进行搜索的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55805613/

    相关文章:

    architecture - 什么是自以为是的软件?

    .net - Exchange 日历与 Exchange 服务器外部的应用程序服务器集成

    elasticsearch - elasticsearch:如何根据搜索结果中的类型设置自定义记录计数

    elasticsearch - 使用 NEST 5.x 创建 Elasticsearch 索引

    curl - 如何隐藏curl elasticsearch命令的输出消息?

    elasticsearch - 确保在Elasticsearch中的索引上设置设置和映射

    elasticsearch - invalid_argument_exception:只能在文本字段上使用词组前缀查询-不能在类型为[_id]的[_id]上使用

    ios - 有关APNS推送服务器的新电子邮件通知的建议

    c++ - 源和错误运行时组件之间的依赖关系

    database-design - 如何对数据库中的记录进行版本控制