0

我在一家小型 SaaS 初创公司工作。

作为 SaaS 软件,您创建一个帐户并邀请其他人。

我们有一些实体,例如“产品”,但您可以配置产品的字段。

假设您使用汽车,您可以创建“型号”、“年份”、“重量”等字段。

假设您使用衣服,您可以创建“尺寸”、“性别”等字段。

我们有这个由 SQL 建模,但我想在 ElasticSearch 中有一个副本,用于一般搜索,特别是用于可定制的报告。

为了对此建模,我正在考虑以下选项:

  1. 每个账户实体一个索引

    创建帐户时,我会创建一个名为“product-”之类的索引,它会有自己的架构。

    当帐户的管理员创建或更改字段时,我需要使用 Update By Query 或 Reindex API .. idk。

    删除帐户后,我需要删除索引。

    PRO:每个索引都有一个可靠的模式。

    缺点:动态创建/删除索引听起来很可怕。


  2. 每个实体一个索引。

    这个好像也还行。我会将“account_id”放在每个文档上,并且每次都对其进行过滤。

    每个实体只有一个索引:“产品”、“用户”、“联系人”、“销售”等。

    PRO:更简单

    缺点:每个索引都有多个模式。每个 account_id 一个

    我也不确定如何考虑关系......我可以动态创建关系吗?


  1. 一个索引来统治所有这些。

    一个索引“entities”,包含字段“account_id”、“entity_type”。

    也许我需要这样做才能正确地映射关系。我很困惑。我没有完全理解 join 字段。


有什么我想念的吗?

感谢您阅读到这里:)

4

0 回答 0