我们已经开始在我们的项目中使用elasticsearch,我们将用户数据和他的 friend 列表存储为嵌套对象,并嵌套到存储 friend 列表的嵌套对象,因为我们在进行全局搜索时需要这些数据。
现在我们正在将这些数据与我们的数据库实时同步,因此以 50-100 TPS 实时同步是否有好处,否则将来会产生问题。
我们需要创建复杂的查询来更新数据,因为我们在 2 级管理好友列表。那么如何轻松创建高级脚本,我已经在谷歌中检查过,但没有找到任何详细信息。
如果我的做法有误,请告诉我。
最佳答案
回答你的第一个问题
从 ES6.0 版本开始,自动支持和检测多级嵌套,如果相关嵌套查询存在于另一个嵌套查询中,则会导致内部嵌套查询自动匹配相关嵌套级别(而不是根)。但是有一个警告,索引一个包含 100 个嵌套字段的文档实际上索引了 101 个文档,因为每个嵌套文档都被索引为一个单独的文档。为了防止错误定义的映射,每个索引可以定义的嵌套字段的数量通常使用 index.mapping.nested_fields.limit
限制为 50。此设置允许您限制可以手动或动态创建的字段映射的数量,以防止不良文档导致映射爆炸。因此,回答您的问题,这很好,但是随着您的数据的增长,管理变得更加复杂,并且您面临着 map 爆炸的危险。
回答你的第二个问题
您可能需要在此处提供一些背景信息才能理解为什么您的方法是必要的,但基本上,在社交资料背景下,您正在做的 friend 列表管理始终是一个坏主意,尤其是如果您预计将来会扩展.它可能适用于较小的用例,但在扩展时效果不佳。这是因为,关系变得更加复杂,您最终将拥有太多的多嵌套对象。如前所述,所有因素都保持不变,对于这种情况,您可能需要查看图形数据库。但是,您的方法可能有其他原因,这就是为什么您可能想要列举您的上下文以便我们可以提供更好的建议。
希望这可以帮助!!
关于 friend 到 friend 列表的 Elasticsearch 映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47158367/