elasticsearch,mapping,model-associations,Search,elasticsearch,Mapping,Model Associations" /> elasticsearch,mapping,model-associations,Search,elasticsearch,Mapping,Model Associations" />

ElasticSearch中类型内关联的设计建模

ElasticSearch中类型内关联的设计建模,search,elasticsearch,mapping,model-associations,Search,elasticsearch,Mapping,Model Associations,我在应用程序中使用ElasticSearch增强搜索能力 我们需要做的事情之一是有一种存储不同ElasticSearch类型之间任意关系的方法 假设ElasticSearch索引中有三种类型,例如 客户、生活方式和电影类型 假设用户想要为一个客户关联多种生活方式,用户在应用程序中指定映射,在ElasticSearch中获取客户的docId,生活方式的docId,并将其放入映射器类型中,该映射器类型存储docId对,并将关联类型存储为TextCutorToLiFestyle 以类似的方式,cust

我在应用程序中使用ElasticSearch增强搜索能力

我们需要做的事情之一是有一种存储不同ElasticSearch类型之间任意关系的方法

假设ElasticSearch索引中有三种类型,例如

客户、生活方式和电影类型

假设用户想要为一个客户关联多种生活方式,用户在应用程序中指定映射,在ElasticSearch中获取客户的docId,生活方式的docId,并将其放入映射器类型中,该映射器类型存储docId对,并将关联类型存储为TextCutorToLiFestyle

以类似的方式,customer和MovieGene之间的关联将插入customer和MovieGene的DocID对以及关联类型文本,如CustomerToMovieGene。其思想是在这个映射器类型中合并类型之间的任意关系


这可能是一种有点简单的解决问题的方法,但有人认为这种方法有什么错吗?

纯粹从设计角度来看,我也会选择映射器类型,通过存储两个文档的ID来链接它们,而不是在客户文档中列出电影类型的ID。但是,我将为每个关系引入一个单独的映射器类型。这是CustomerToLifeStyle类型和CustomerToMovie类型。原因是您可能会在映射器文档中存储特定于关系的其他数据。假设您想存储客户对某一类型电影的评价。这些信息在客户与生活方式的关系中没有意义。您希望在mapper文档中存储的附加数据越多,您将看到CustomerToLifeStyle数据和CustomerToMovieStyle数据变得越不同。因此,为每个关系使用单独的类型可以保持您的设计美观和干净。

纯粹从设计角度来看,我也会选择映射器类型,通过存储两个文档的ID来链接它们,而不是在客户文档中列出电影类型的ID。但是,我将为每个关系引入一个单独的映射器类型。这是CustomerToLifeStyle类型和CustomerToMovie类型。原因是您可能会在映射器文档中存储特定于关系的其他数据。假设您想存储客户对某一类型电影的评价。这些信息在客户与生活方式的关系中没有意义。您希望在mapper文档中存储的附加数据越多,您将看到CustomerToLifeStyle数据和CustomerToMovieStyle数据变得越不同。因此,为每个关系设置单独的类型可以使您的设计保持整洁。

如果您想在elasticsearch中对这种关系建模,您应该使用父/子关系,这是elasticsearch的核心概念之一:


这种方法的优点是可以使用标准方法遍历关系和构建查询。如果您使用自己的方法,那么将发生的是您必须在代码中手动执行联接和查找。

如果您想在elasticsearch中对这种关系建模,您应该使用父/子关系,这是elasticsearch的核心概念之一:


这种方法的优点是可以使用标准方法遍历关系和构建查询。如果您使用自己的方法,那么将发生的是您必须在代码中手动执行联接和查找。

我最终创建了映射器类型。我的连接好像起作用了。我认为最好是在elasticsearch顶部有一个RDBMSon支持的连接服务,以处理不同实体之间的任何复杂连接需求。这增加了应用程序的表面积,但从长远来看可能更易于维护。我的连接好像起作用了。我认为最好是在elasticsearch顶部有一个RDBMSon支持的连接服务,以处理不同实体之间的任何复杂连接需求。这增加了应用程序的表面积,但从长远来看可能更易于维护。