我们为每个用户、节目和剧集保存一个项目。我们将所有内容保存在同一索引中。实体关系图如下所示:
┌────┐ ┌────────────┐ ┌────┐
│User├─────<┤Subscription├>────┤Show│
└────┘ └────────────┘ └─┬──┘
│
│
/|\
┌───────┐
│Episode│
└───────┘
这些项目看起来如下所示:
用户名:
{ id: user-1, name: one }
显示:
{ id: show-1, title: showTitle }
单集:
{ id: show-1, title: episodeTitle, showId: show-1, createdAt: today }
**我们想做一个像youtube的订阅页面,我们想列出用户订阅的所有节目的所有剧集。**如果可能的话,我们想在一个查询中实现这一点。
在PostgreSQL上,我会使用IN,并使用如下查询:SELECT * FROM Episode WHERE show_id IN (SELECT show_id FROM Subscription WHERE user_id = 'userId')
ES是否提供了一种方法来实现这一点?我们正在考虑使用多个查询,每个订阅一个,但如果可能的话,我们希望将所有这些委托给一个单一的ElasticSearch查询。
1条答案
按热度按时间dzhpxtsq1#
因为Elasticsearch是面向文档的数据库,这就是为什么我设置的数据结构与传统的SQL数据库有些不同。
使用订阅作为文档:
或其他示例,您也可以将其嵌套到Show文档中:
我也会推荐这样的答案:https://stackoverflow.com/a/5373969/12564580