我想让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,是否会对性能产生负面影响?
答案 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。