【发布时间】:2013-03-26 13:34:40
【问题描述】:
我将在我的应用程序中使用 ElasticSearch 作为搜索存储库。 关于组织方面的最佳实践,我有几个问题 当对象之间具有关联/关系时,搜索索引中的对象。
据我所知,搜索索引是一种扁平结构,不适用于 关系的方式与数据库相同。
假设你有这些域对象:
人物: - 与 Car
有一对多的关系汽车: - 由一个 Person 拥有,与 Person
多对一部门: - 每个部门有很多人,每个人可能属于很多部门,多对多 p>
将其存储在搜索索引中的最佳方式是什么?有什么选择?例如,我想找到属于某个部门的所有人员,或者汽车功率超过 300 马力的所有人员。 如果重要的话,我正在使用 Java 客户端 API。
【问题讨论】:
-
我不是专家(至少有 6 小时的弹性搜索经验),所以欢迎您忽略我。您可能会看一下“父”关系的使用,以提供一些层次结构来帮助进行一些基本的规范化。同样,根据您的要求,交互式浏览相关文档可能是一种选择(因为一个人将拥有多少辆车?)。只是想法,如果有任何帮助,请告诉我们。
-
我实际上设法让它工作。我所做的是使用嵌套类型。效果很好。
-
LuckyLuke 一个关于你成功的简单问题,这样我可以学到更多。您是在索引单个文档还是使用批量索引 API?我担心的是批量索引嵌套文档是否会导致您的案例中出现重复的个人文档。如果您是一一索引,那就不用担心了。
-
我都在做。当我想重新索引整个数据库时,我使用批量 API,当我插入单个项目时,我使用“普通”索引 API。我不确定我理解你所说的重复是什么意思,但我没有得到重复。我有一个 IndexedPerson 类,我将其序列化为 JSON,其中包含有关汽车和部门的所有信息。这很有效,因为我已将汽车和部门设为“嵌套类型”。
-
谢谢。花一些时间尝试嵌套文档让我感到更开心。
标签: java jakarta-ee search search-engine elasticsearch