3

我的应用程序中有经过身份验证的用户可以访问包含多达 500,000 个项目的共享数据库。每个用户都有自己的面向公众的网站,并且需要能够在他们自己的网站上对展示的项目进行优先级排序(想想投票)。

在 500,000 个项目中,他们可能只有 200 个优先项目,其余项目的顺序不太重要。

每个用户都会对项目进行不同的优先级排序。

我最初在这里问了一个类似的mysql问题,Mysql results sorted by list which is unique for each user and get a good answer但我相信更好的选择可能是选择非sql索引解决方案。

这可以在 Lucene 中完成吗?是否有另一种搜索技术会更好。

附言。Google 在其搜索结果中实施了类似的类型设置,如果您已登录,您可以在其中优先考虑和排除您自己的搜索结果。

更新:用 sphinx 重新标记,因为我一直在阅读文档,我相信它可能能够通过存储在内存中的“每个文档属性值”来做我正在寻找的东西 - 有兴趣从 sphinx 大师那里听到任何反馈

4

1 回答 1

2

在构建索引时,您肯定希望将项目的 id 存储在每个文档对象中。有几种方法可以进行下一步,但一种简单的方法是获取优先项并将它们添加到您的搜索查询中,对于每个特殊项,如下所示:

"OR item_id=%d+X"

其中 X 是您想要使用的提升量。您可能需要根据经验调整此数字,以确保仅被“投票”不会将其置于搜索完全不相关的列表的顶部。

这样做至少可以避免许多烦人的后处理步骤,这些步骤需要您遍历整个结果集——希望从查询索引开始就可以进行正确的排序。

于 2009-08-28T21:35:21.120 回答