我的搜索查询运行如下:
select * from posts p where p.post like '%test%' ORDER BY p.upvotes DESC,
p.unix_timestamp DESC LIMIT 20
如果搜索关键字的结果超过 20 个,我会找出最小时间戳值,将其存储在隐藏元素中并运行另一个查询以加载更多结果,例如:
select * from posts p where p.post like '%test%' and p.unix_timestamp < 1360662045
ORDER BY p.upvotes DESC, p.unix_timestamp DESC LIMIT 20
真正发生的是,我的第一个查询忽略了(显然,我的错误)由于我的原因而没有任何投票(意思是 0 票)的帖子,ORDER BY p.upvotes DESC
因此,我注意到它获取了表中的第一个帖子在前 20 个结果中,因此最小时间戳成为第一个帖子的时间戳。现在在此之后,如果我尝试获取小于最小时间戳的下 20 个结果,它不会给出任何结果。
现在,我只是使用 upvotes 排序来获取最高记录。我应该使用像贝叶斯平均值这样的算法还是其他算法?
如果我不得不继续使用当前的订购系统,或者我应该使用任何可行且更有效的方法,请告知我如何改进查询?
PS如果可能,请参考一些关于贝叶斯平均值的资源(它似乎是最常用的)或其他替代方法?