按日期添加降序的订单solr文档

时间:2012-02-10 12:13:10

标签: solr relevance

我想让SOLR的搜索结果按如下顺序排列:

所有具有相同分数的文件将按添加日期降序排序。

所以当我查询solr时,我会有n个文件。在此结果集中,将存在具有相同分数的文档组。我希望这组文档中的每一个都按照添加的日期降序排列。

我发现我可以使用函数查询完成此操作,更准确地说是使用rord函数http://wiki.apache.org/solr/FunctionQuery#rord,但正如文档中所述

  

警告:从Solr 1.4开始,ord()和rord()会导致内存使用过多   因为他们必须在顶级阅读器上使用FieldCache条目   排序和函数查询现在使用段级别的条目。   因此,除了之外,还要排序或使用不同的函数查询   ord()/ rord()会使内存使用倍增。

会导致内存使用过多。

我还有其他选择吗?

我正在考虑使用recip(ms(NOW,startTime),1,1,0)。这是最好的方法吗?

如果我使用recip和ms,是否会对性能产生负面影响?

2 个答案:

答案 0 :(得分:16)

您可以使用多个SORT条件:

  

多个排序顺序可以用逗号分隔,即:sort = + [,+] ...

http://wiki.apache.org/solr/CommonQueryParameters

所以,在你的情况下会是: sort =得分DESC,date_added DESC

答案 1 :(得分:5)

因为你的问题是:

  

所有具有相同分数的文档将按降序排序   按日期添加。

你得到的另一个答案是完美的。

无论如何,我建议你确保你真的想按日期排序只有相同分数的文件。根据我的经验,这一直是错误的。事实上,solr得分并不是绝对的,而是相对于其他文档,每个文档都不同。

因此,我不会按分数排序,而是选择其他内容,因为很难预测何时您将获得不同文档的相同分数。 我个人只会在score上排序并使用一个函数来提升最近的文档。您可以在solr wiki上找到一个很好的示例,其中使用的函数是recip(ms(NOW,date_field),3.16e-11,1,1)

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