我在应用程序中对用户进行了身份验证,这些用户可以访问多达500,000个项目的共享数据库。每个用户都有自己的面向公众的网站,并且需要能够对自己网站上显示的项目进行优先级排序(考虑投票)。
在500,000个项目中,他们最多可能只有200个优先项目,其余项目的顺序不太重要。
每个用户将对项目进行不同的优先排序。
我最初在这里Mysql results sorted by list which is unique for each user问了一个类似的mysql问题,得到了一个很好的答案,但是我相信更好的选择可能是选择非sql索引解决方案。
可以在Lucene中完成吗?还有另一种搜索技术会更好吗?
ps。 Google会对其搜索结果实施类似的类型设置,如果您已登录,则可以在其中设置优先级并排除自己的搜索结果。
更新:由于我一直在阅读文档,因此重新标记了sphinx,我相信它可以通过存储在内存中的“每个文档属性值”来完成我正在寻找的事情-希望听到来自狮身人面像专家对此的任何反馈
最佳答案
建立索引时,您肯定要在每个文档对象中存储项目ID。有几种方法可以进行下一步,但一个简单的方法就是将优先项放入优先级较高的项目并将其添加到搜索查询中,每个特殊项目都需要这样:
"OR item_id=%d+X"
X是您要使用的提升量。您可能需要根据经验调整此数字,以确保仅被“投票”不会将其放在搜索完全不相关的列表的顶部。
以这种方式进行操作至少将避免您执行许多烦人的后处理步骤,这些步骤将要求您遍历整个结果集-希望可以正确地对索引进行查询。