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

Dor*_*rin 8 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,是否会对性能产生负面影响?

Ste*_*tei 16

您可以使用多个SORT条件:

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

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

因此,在您的情况下将是:sort =得分DESC,date_added DESC


jav*_*nna 5

既然你的问题说:

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

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

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

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

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