2013-01-22 63 views
0

我不认为这是一个非常模糊的Lucene问题,但不知何故,我似乎无法找到一个好的解决方案。我将用一个例子。用户特定的Lucene搜索

假设我正在构建新闻报道网站。注册用户可以为他们感兴趣的文章添加书签。我想让用户只搜索他/她的书签。为了举例,我们还假设用户可以为数千篇文章添加书签,并且我们的数据库中有数十万用户。如何为这个问题构建一个可扩展的解决方案?

非常感谢!

回答

0

这是一个非常典型的Lucene问题,因为它不支持连接。更具体地说,没有一流的支持,你必须找到解决方法。我可以提出几个:

  1. 你可以有一个数据库,里面有usersarticlesbookmarks表(后者将有外键指向前两个)。你也可以在Lucene中索引文章。当针对文章运行搜索时,您可以编写一个Lucene Filter,这将排除当前用户未加书签的所有文章。

  2. 你可以索引Lucene中的所有文章和书签 - 如果你使用单独的索引来做这个,可能是最好的。然后,您可以运行书签查询(检索当前用户已添加书签的文章),然后运行另一个单独的文章查询。与前面的示例类似,您可以使用第一个查询的结果来排除当前用户未加书签的所有其他文章。

我个人比较喜欢的选项#1,因为这是经典的关系结构和数据库设计出于这样的目的。使用选项#2时,用户被删除时必须修改用户存储和Lucene索引。

+0

谢谢Mindas。如果我在过滤器中放入数千甚至数万个ID,会不会是一个问题? –

+0

如果您的过滤器非常快,请不要使用。请记住,每个搜索都必须通过筛选器才能检查每个文档的资格。所以缓存是你的朋友。 – mindas