我想让SOLR的搜索结果按如下顺序排列:
所有得分相同的文档将按添加日期降序排列。
所以当我查询solr时,我会有n个文档。在该结果集中,将存在具有相同分数的文档组。我希望这组文档中的每一个都按添加日期降序排列。
我发现我可以使用函数查询,更确切地说是使用rord
函数来实现这一点http://wiki.apache.org/solr/FunctionQuery#rord,但正如文件中所述
警告:自Solr 1.4起,ord()和rord()可能会导致内存过度使用因为它们必须在顶级读取器中使用FieldCache条目,而排序和函数查询现在使用段级别的条目。因此,除了ord()/rod()将使内存使用量加倍。
这将导致内存使用过度。
我还有什么其他选择?
我想用recip(ms(NOW,startTime),1,1,0)
。这是最好的方法吗?
如果我使用recip和ms,是否会对性能产生负面影响?
您可以使用多个SORT条件:
多个排序顺序可以用逗号分隔,即:sort=+[,+]。。。
http://wiki.apache.org/solr/CommonQueryParameters
因此,在您的情况下:sort=分数DESC,date_added DESC
由于您的问题显示:
所有得分相同的文档将按降序排列按添加日期。
你得到的另一个答案是完美的。
不管怎样,我建议您确保您真的只想按日期排序相同分数的文档。根据我的经验,这一直是错误的。事实上,solr分数不是绝对的,而是相对于其他文档的,并且每个文档都是不同的。
因此,我不会先按分数排序,然后再按其他内容排序,因为很难预测不同文档何时会有相同的分数。我个人只会在score
上进行排序,并使用一个函数来提升最近的文档。你可以在solr wiki上找到一个很好的例子,那里使用的函数是recip(ms(NOW,date_field),3.16e-11,1,1)
。
如果您担心性能,可以尝试索引时间提升,它应该比查询时间提升更快。看看这里。