一尘不染

具有多个父子关系的Elasticsearch

elasticsearch

Book,User和Review说,我正在构建具有复杂模型的应用程序。

评论包含书籍和用户ID。为了能够搜索至少包含一个评论的“图书”,我已将“图书”设置为“评论”的父级,并且具有这样的路由。但是,我还需要找到撰写包含某些短语的评论的用户。

是否可以同时将书和用户作为评论的父级?有没有更好的方法来处理这种情况?

请注意,我无法更改数据建模的方式/不愿意这样做,因为数据已从持久性数据库传输到Elasticsearch。


阅读 365

收藏
2020-06-22

共1个答案

一尘不染

据我所知,你不能与两个父母有文件。

我的建议基于Elasticsearch的Application-side
join章节的权威指南

  • 建立父母/子女关系Book/Review
  • 确保您user_idReview映射中具有包含撰写该评论的用户ID的属性。

我认为这涵盖了您描述的两种用例:

  • Books that contain at least one review可以通过有子过滤器 / 查询来解决
  • Users who wrote reviews that contain certain phrases可以通过查询您要搜索的短语并在字段上进行基数汇总来解决user_id。如果您需要用户信息,则必须使用检索到的ID查询数据库(或其他Elasticsearch索引)。

编辑: "give me the books that have reviews this month written by user whose name started with John"

我建议您收集所有这些高级用例,并对实现它们所需的数据进行非规范化。在这种特殊情况下,只需将用户名标准化为即可Review。无论如何,elasticsearch的人们已经在他们的博客中写过关于管理关系的文章,或者elasticsearch的权威指南

2020-06-22