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

标签 java algorithm lucene solr sphinx

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

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

每个用户对项目的优先级不同。

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

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

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

更新:重新标记了 sphinx,因为我一直在阅读文档,我相信它可以使用存储在内存中的“每个文档属性值”来完成我正在寻找的事情 - 有兴趣听取对此的任何反馈来自 sphinx 大师

最佳答案

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

"OR item_id=%d+X"

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

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

关于java - Lucene 搜索结果按自定义顺序列表排序(每个用户唯一),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1349419/

相关文章:

algorithm - 图像抓取和索引算法(通过图像的颜色)和文本搜索给出相应的图像

c++ - 中缀的前缀不能完全给出正确的结果

algorithm - 判断不等式多项式系统是否有解的快速算法

algorithm - 如何正确绘制满足三角不等式的完整5顶点无向图

Java : How to get Monday's date of the current week without the time and subtract it by 1 day

java - Lucene复合查询搜索

java - lucene中的searchAfter

java - Solr:卸载核心在核心交换后永远等待

java - 如何在Spring Security中配置内存身份验证和jdbc身份验证

java - 在升序数组中对数组进行排序