我很确定我知道这个问题的答案,但我正在寻找具有更多Elasticsearch经验的人的确认。
假设我有一个包含作者和书籍的数据库。作者可以与0本或更多书籍相关联,并且书籍可以与1个或更多作者相关联。我们希望用户能够搜索作者姓名以查找作者及其所有书籍,并且我们还希望他们能够搜索书名以取回其作者。我们知道会有很多多作者的书籍。
因为Elasticsearch只直接支持一级父子关系,并且因为子级只能有一个父级,所以在我看来,我们需要对数据进行非规范化并使用嵌套对象来建立这种关系。如果我们修改已发布23本书的作者的属性,我们将需要重新索引作者记录和他/她的所有23本书记录。
在我的幻想世界中,我希望这23本书都包含一系列作者ID,以便在重新索引作者时我不必重新索引书籍。看来这肯定可以使用Elasticsearch的父子支持如果一本书只能有一个作者,但由于多对多的要求,我必须使用嵌套对象并重新索引任何任何变化时相关的对象。
这是对的吗?它看起来似乎更多的工作(当然还有更多的更新),但我想以正确的方式做到这一点,而不是引入复杂性,错误和疯狂的“聪明”方式。
任何指导都将不胜感激。
答案 0 :(得分:5)
根据您的问题,我可以放心地假设ES不会是您的主要数据存储。因此,关于如何使你的多对多关系去规范化的主要问题是弄清楚"如何&什么"你会用ES吗?这就是您期望构建的查询。
思考"查询命令"因此设计和反规范化。以下是一些指示:
希望这有一定意义;)