Friend to Friend列表的elasticsearch mapping

时间:2017-11-07 12:44:38

标签: elasticsearch elasticsearch-painless

我们已经开始在我们的项目中使用elasticsearch,我们将用户数据和他的朋友列表存储为嵌套对象,并嵌套到存储好友朋友列表的嵌套对象,因为我们在进行全局搜索时需要这些数据。 现在我们正在将这些数据与我们的数据库实时同步,这样可以实时同步完成50-100 TPS,或将来会产生问题。

我们需要创建复杂的查询以更新数据,因为我们正在管理第二级的朋友列表。所以如何在无痛的情况下创建高级脚本,我已经在谷歌检查了这个,但没有发现任何细节。

如果我这样做的方法有误,请告诉我。

1 个答案:

答案 0 :(得分:1)

回答你的第一个问题

  

这样可以实现50-100 TPS或将来实时同步   它会产生问题

从ES6.0版开始,自动支持并检测多级嵌套,从而导致内部嵌套查询自动匹配相关嵌套级别(而非根),如果它存在于另一个嵌套查询中。但有一点需要注意,使用100个嵌套字段索引文档实际上索引101个文档,因为每个嵌套文档都被索引为单独的文档。为了防止错误定义的映射,可以使用index.mapping.nested_fields.limit将每个索引定义的嵌套字段数限制为50。此设置允许您限制可手动或动态创建的字段映射的数量,以防止错误的文档导致映射爆炸。所以回答你的问题,这很好,但随着你的数据增长,管理变得更加复杂,你冒着映射爆炸的风险。

回答你的第二个问题

  

我们需要创建复杂的查询来更新数据,因为我们是   管理二级朋友列表。所以如何创建高级脚本   在无痛,我已经在谷歌检查过这个,但没有找到任何东西   细节。

您可能需要在此处提供一些上下文,以便能够理解为什么您的方法是必要的,但基本上,在社交个人资料上下文中,管理朋友列表时总是一个坏主意,特别是如果您预期缩放在将来。它可能适用于较小的用例,但在扩展时它不能很好地工作。这是因为,关系变得更加复杂,最终会有太多的多嵌套对象。如上所述,所有因素都保持不变,您可能希望查看此类场景的图形数据库。但是,你可以有其他理由来解释你的方法,这就是为什么你可能想要列举你的背景,以便我们可以提供更好的建议。

希望这会有所帮助!!