Lucene搜索结果按自定义顺序列表排序(每个用户都是唯一的)

时间:2009-08-28 21:18:08

标签: java algorithm lucene solr sphinx

我已在我的应用程序中验证了用户,他们可以访问最多500,000个项目的共享数据库。每个用户都有自己的面向公众的网站,并且需要能够在他们自己的网站上优先显示项目(想想upvote)。

在500,000件商品中,他们最多可能只有200件优先商品,其余商品的订单不太重要。

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

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

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

PS。 Google会在搜索结果中实施类似的类型设置,您可以在登录时优先排序并排除自己的搜索结果。

更新:用sphinx重新标记,因为我一直在阅读文档,我相信它可以通过存储在内存中的“每个文档属性值”来做我想要的 - 有兴趣听到有关此的任何反馈来自斯芬克斯大师

1 个答案:

答案 0 :(得分:2)

在构建索引时,您肯定希望在每个文档对象中存储item的id。有几种方法可以执行下一步,但是一个简单的方法是将优先级项目添加到您的搜索查询中,对于每个特殊项目都是这样的:

"OR item_id=%d+X"

其中X是您想要使用的助推量。你可能需要凭经验调整这个数字,以确保只是被“upvoted”不会把它放在列表的顶部,搜索完全不相关的东西。

这样做至少会阻止你进行许多令人讨厌的后处理步骤,这些步骤需要你遍历整个结果集 - 希望在查询索引时可以正确排序。