按日期降序排列相同分数的solr文档



我想让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)

如果您担心性能,可以尝试索引时间提升,它应该比查询时间提升更快。看看这里。

相关内容

  • 没有找到相关文章

最新更新