在Github中已加星标的项目中实现搜索/过滤器之类的功能的正确方法是什么?

时间:2019-06-19 03:51:50

标签: elasticsearch

我遇到的问题与github的加星标回购搜索功能相似,因此我将其作为类比。

我尚未找到有效的实现方式,但这是我的初步想法:

  1. 有一个Elasticsearch文档类型EsRepo,它表示一个回购,带有诸如title / description / star_count等字段。
  2. 很容易在所有EsRepo上搜索/过滤标题/描述/ star_count字段。
  3. 回购可以由成千上万的用户加注星标。

方法一

starred_by_user_ids属性(用户ID数组)附加到EsRepo文档类型。只有这样,我才能过滤特定用户加星标的仓库。

但是此方法看起来很愚蠢,此数组中可能包含数百万个ID。此外,我不认为回购由谁担任主演是回购的责任。

方法二

搜索时,查询数据库以获取用户的所有加星标的回购ID,并将所有这些ID传递给elasticsearch查询的filter子句。

在这里,假设用户将不会有很多加星标的项目(最多几百或数千个,但是这个假设可能非常松散)。

方法三

为每个带有EsStarredRepo同步的title / description / star_count字段的星号动作维护一个称为EsRepo的重复文档类型,但是将有很多冗余,并且使这些字段保持同步几乎是不可能的。

我还没有发现其他方法。以上三种方法对我来说似乎都不足够好。如果必须选择一种,则方法2可能是三种方法中最好的一种。但是我仍然好奇是否在朝着正确的方向思考,或者错过了一个更好的主意。

谢谢您的建议。

0 个答案:

没有答案