我打算在我的应用程序中使用ElasticSearch作为搜索存储库。 关于组织方面的最佳实践,我有几个问题 当对象彼此具有关联/关系时,搜索索引中的对象。
据我所知,搜索索引是一个扁平结构,不适用于概念 关系的方式与数据库相同。
假设您有这些域对象:
人: - 与 Car
有一对多的关系汽车: - 由一个 Person 拥有,与 Person 多对一
系: - 每个部门都有许多人,每个人可能属于许多部门,多对多 p>
在搜索索引中存储此内容的最佳方法是什么?有什么选择?例如,我想找到属于某个部门的所有人,或所有汽车超过300马力的人。 如果重要的话,我正在使用Java客户端API。
答案 0 :(得分:1)
弹性搜索(或Lucene)不是关系数据库,因此您需要展平您的关系模型。
尝试为获得此结构的视图建模 -
Car|Person|Department
这将为您提供查找汽车所需的所有属性。这可以导入到Car
的文档中。
类似地
Person|Department
会为您提供所有信息。这有助于您查找Person
Department
可以是第三个文件。
每个实体可以有多个文档。但这种关系需要被翻译为实体的财产。