我遇到的问题与github的加星标回购搜索功能相似,因此我将其作为类比。
我尚未找到有效的实现方式,但这是我的初步想法:
EsRepo
,它表示一个回购,带有诸如title / description / star_count等字段。EsRepo
上搜索/过滤标题/描述/ star_count字段。将starred_by_user_ids
属性(用户ID数组)附加到EsRepo
文档类型。只有这样,我才能过滤特定用户加星标的仓库。
但是此方法看起来很愚蠢,此数组中可能包含数百万个ID。此外,我不认为回购由谁担任主演是回购的责任。
搜索时,查询数据库以获取用户的所有加星标的回购ID,并将所有这些ID传递给elasticsearch查询的filter子句。
在这里,假设用户将不会有很多加星标的项目(最多几百或数千个,但是这个假设可能非常松散)。
为每个带有EsStarredRepo
同步的title / description / star_count字段的星号动作维护一个称为EsRepo
的重复文档类型,但是将有很多冗余,并且使这些字段保持同步几乎是不可能的。
我还没有发现其他方法。以上三种方法对我来说似乎都不足够好。如果必须选择一种,则方法2可能是三种方法中最好的一种。但是我仍然好奇是否在朝着正确的方向思考,或者错过了一个更好的主意。
谢谢您的建议。