我不认为这是一个非常模糊的 Lucene 问题,但不知何故,我似乎无法找到一个好的解决方案。我将使用一个例子。
假设我正在建立一个新闻文章网站。注册用户可以收藏他们感兴趣的文章。我想让用户只搜索他/她收藏的文章。作为示例,我们还假设一个用户可能会为数千篇文章添加书签,并且我们的数据库中有数十万用户。我如何为这个问题构建一个可扩展的解决方案?
非常感谢!
我不认为这是一个非常模糊的 Lucene 问题,但不知何故,我似乎无法找到一个好的解决方案。我将使用一个例子。
假设我正在建立一个新闻文章网站。注册用户可以收藏他们感兴趣的文章。我想让用户只搜索他/她收藏的文章。作为示例,我们还假设一个用户可能会为数千篇文章添加书签,并且我们的数据库中有数十万用户。我如何为这个问题构建一个可扩展的解决方案?
非常感谢!
这是一个非常典型的 Lucene 问题,因为它不支持连接。更具体地说,没有一流的支持,您必须找到解决方法。我可以推荐几个:
你可以有一个数据库,它有users
,articles
和bookmarks
表(后者会有指向前两个的外键)。您还可以在 Lucene 中索引文章。在对文章进行搜索时,您可以编写一个 Lucene Filter
,它将排除当前用户未添加书签的所有文章。
您可以为 Lucene 中的所有文章和书签编制索引 - 如果您使用单独的索引这样做可能是最好的。然后你可以运行一个书签查询(检索当前用户收藏了哪些文章),然后运行另一个单独的文章查询。与前面的示例一样,您可以使用第一个查询的结果来排除当前用户未添加书签的所有其他文章。
我个人更喜欢选项#1,因为这是经典的关系结构,而数据库正是为此目的而设计的。使用选项#2,当用户被删除时,您必须同时修改用户存储和 Lucene 索引。