允许用户在 ElasticSearch 索引中定义任意键

Allowing users to define arbitrary keys in ElasticSearch index

我的团队在项目中使用 SearchKick (Rails) 与 ElasticSearch 交互。

一个索引(联系人)由大约 10 个通用的可搜索字段组成,例如姓名、电子邮件、生日、年龄等

此外,我们需要允许程序的用户在一组预定义类型(字符串、整数、布尔值等)中创建自己的自定义字段。

计划是要么为每个用户创建一个唯一索引(实际上可以扩展到低 4 位数字),要么使用单个联系人索引并更新映射以每次添加一个新的自定义字段。我假设整个程序中自定义字段的实际上限为 5k。

唯一索引方法似乎在某些时候肯定会遇到缩放问题。在这种情况下是否符合标准?

如果每个文档仅包含 10 - 20 个字段,那么将那么多字段添加到索引的映射中是否会产生巨大的性能成本?

这里还有其他标准方法吗?

Here 您可以找到一些关于为什么不能有太多索引的详细信息。

Here你可以找到为什么字段限制是1000

恕我直言,为每个用户创建一个索引将是一种矫枉过正的做法。小心具有基本相同的字段但名称略有不同。在前端使用一些自动完成功能,以引导您的用户重复使用字段,而不是添加基本上做同样事情的新字段。这将允许您在将来使用 Reindex API 来进行一些管理并在达到某个点时创建新索引(并删除旧索引)。基本上是某种手动数据库真空。

P.S。有多达 7000 个或更多字段的索引用例,它们似乎工作正常。您始终可以尝试使用一个索引和多个字段的 MVP,并在达到里程碑时尝试通过手动管理对这些字段进行分组。