8

我希望 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 会对性能产生负面影响吗?

4

2 回答 2

16

您可以使用多个 SORT 条件:

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

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

因此,在您的情况下是: sort=score DESC, date_added DESC

于 2012-02-10T12:38:32.433 回答
5

既然你的问题说:

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

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

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

因此,我不会先按分数排序,然后再按其他内容排序,因为很难预测什么时候不同文档的分数相同。我个人只会对score最近的文档进行排序并使用一个功能。你可以在solr wiki上找到一个很好的例子,那里使用的函数是recip(ms(NOW,date_field),3.16e-11,1,1).

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

于 2012-02-10T16:36:49.753 回答