具有多个父/子关系的Elasticsearch

tun*_*ngd 7 elasticsearch

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

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

是否可以同时将Book和User作为Review的父级?有没有更好的方法来处理这种情况?

请注意,我无法更改数据建模方式/不愿意这样做,因为数据从持久性数据库转移到Elasticsearch.

mol*_*are 6

据我所知,你不能有两个父母的文件.

我的建议基于Elasticsearch的应用程序端连接章节的权威性指南:

  • 创建父/子关系Book/Review
  • 确保您user_idReview映射中具有包含编写该评论的用户ID的属性.

我认为这涵盖了您描述的两种情况如下:

  • Books that contain at least one review它可以通过子过滤/查询来解决
  • Users who wrote reviews that contain certain phrases可以通过使用您要搜索的短语查询评论并在字段上执行基数聚合来解决此问题user_id.如果您需要用户信息,则必须使用检索到的ID查询数据库(或其他弹性搜索索引).

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

我建议您收集所有这些高级用例并对实现它们所需的数据进行非规范化.在这种特殊情况下,将用户名反规范化就足够了Review.无论如何,弹性搜索人员已经写过关于在他们的博客弹性搜索中管理关系的权威指南