我希望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
既然你的问题说:
所有具有相同分数的文档将按添加日期降序排序.
你得到的另一个答案是完美的.
无论如何,我建议你确保你真的只想按日期排序相同分数的文件.根据我的经验,这一直是错误的.实际上,solr得分并不是绝对的,而是相对于其他文档而言,每个文档都是不同的.
因此,我不会按分数排序,而是选择其他内容,因为很难预测何时您将获得不同文档的相同分数.我个人只会排序score并使用一个函数来提升最近的文档.你可以在solr wiki上找到一个很好的例子,那里使用的函数recip(ms(NOW,date_field),3.16e-11,1,1).
如果你担心性能,你可以尝试索引时间提升,这应该比查询时间提升更快.看看这里.
| 归档时间: |
|
| 查看次数: |
8839 次 |
| 最近记录: |