Java Lucene搜索结果按自定义订单列表排序(每个用户唯一)

Java Lucene搜索结果按自定义订单列表排序(每个用户唯一),java,algorithm,lucene,solr,sphinx,Java,Algorithm,Lucene,Solr,Sphinx,我已经在我的应用程序中验证了可以访问多达500000个项目的共享数据库的用户。每个用户都有自己的面向公众的网站,并且需要能够在自己的网站上对显示的项目进行优先级排序(考虑向上投票) 在500000个项目中,他们最多只能有200个优先项目,其余项目的顺序不太重要 每个用户都会对项目进行不同的优先级排序 我最初在这里问了一个类似的mysql问题,得到了一个很好的答案,但我相信更好的选择可能是选择非sql索引的解决方案 这可以在Lucene中实现吗?是否有另一种搜索技术更适合于此 另外,谷歌对他们的搜

我已经在我的应用程序中验证了可以访问多达500000个项目的共享数据库的用户。每个用户都有自己的面向公众的网站,并且需要能够在自己的网站上对显示的项目进行优先级排序(考虑向上投票)

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

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

我最初在这里问了一个类似的mysql问题,得到了一个很好的答案,但我相信更好的选择可能是选择非sql索引的解决方案

这可以在Lucene中实现吗?是否有另一种搜索技术更适合于此

另外,谷歌对他们的搜索结果进行了类似的设置,如果你登录,你可以对自己的搜索结果进行优先级排序和排除


更新:由于我一直在阅读文档,所以用sphinx重新标记,我相信它可以用存储在内存中的“每个文档属性值”实现我想要的功能-有兴趣听到sphinx专家对此的任何反馈

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

"OR item_id=%d+X"
其中X是您希望使用的增压量。你可能需要根据经验调整这个数字,以确保在搜索完全不相关的东西时,仅仅是“得票最多”不会把它放在列表的首位


这样做至少可以避免很多烦人的后处理步骤,这些步骤需要你迭代整个结果集——希望查询索引时正确的排序就在那里。

好吧,我猜我会将优先列表存储在mysql或类似的数据库中,并按用户id按优先级排序选择此列表。根据这个列表,我将按照您的建议形成lucene搜索查询字符串。如果在他们的优先权列表中有200个项目,这还会扩展并快速工作吗