如何在ElasticSearch(搜索引擎)中存储有关系的对象

时间:2013-03-26 13:34:40

标签: java java-ee search search-engine elasticsearch

我打算在我的应用程序中使用ElasticSearch作为搜索存储库。 关于组织方面的最佳实践,我有几个问题 当对象彼此具有关联/关系时,搜索索引中的对象。

据我所知,搜索索引是一个扁平结构,不适用于概念 关系的方式与数据库相同。

假设您有这些域对象:

: - 与 Car

有一对多的关系

汽车: - 由一个 Person 拥有,与 Person 多对一

: - 每个部门都有许多,每个可能属于许多部门,多对多 p>

在搜索索引中存储此内容的最佳方法是什么?有什么选择?例如,我想找到属于某个部门的所有人,或所有汽车超过300马力的人。 如果重要的话,我正在使用Java客户端API。

1 个答案:

答案 0 :(得分:1)

弹性搜索(或Lucene)不是关系数据库,因此您需要展平您的关系模型。

尝试为获得此结构的视图建模 -

Car|Person|Department

这将为您提供查找汽车所需的所有属性。这可以导入到Car的文档中。

类似地

Person|Department

会为您提供所有信息。这有助于您查找Person

Department可以是第三个文件。

每个实体可以有多个文档。但这种关系需要被翻译为实体的财产。