除了按字段排序,还可以根据函数查询的计算值进行排序。举例来说,根据距离某一点的地理位置【使用geodist函数】或文档的流行度与新旧程度【对流行度和日期字段使用数学函数】进行排序。甚至还可以将字段与函数排序结合起来,产生非常复杂的排序效果。
3.模糊排序排序通常被认为是一个全有或全无的操作。事实上,通过Solr的相关度计算可以实现所谓的模糊排序。如果将相关度计算视为多因素的综合体,那么通过对其进行提升,可以区分出查询中每个因素的权重。
将一个查询元素的重要性相较于另一个查询元素提升数千倍,这是提升相关度得分的一种直接手段。这样做的话,首先会匹配第一个查询元素的文档,其次才会匹配第二个查询元素。如果将相关度得分之间的差异控制在一个范围内,则可以进行模糊排序。相关度得分的两部分通常一个高于另一个,有时候也会存在一些重合,导致得分较低的文档的相关度高于得分较低的文档。
模糊排序在大多数情况下更多的是一种相关度考虑,它有很多处理方法。在许多情况下,应该根据相关度进行排序,构造相应的查询,对返回文档以期望的次序进行排序,而不是使用字段硬排序技术。虽然有时两者都可以排序,但应该视搜索应用需求而定。
五.调试查询结果如果你对搜索结果感到困惑。例如,查询解析问题导致产生多种搜索结果、相关度得分有时不显示、查询执行时间变长等。所幸,搜索处理器附带的特殊搜索组件DebugComponent可以帮助解决以上问题。
在Solr请求期间,要了解查询背后发生了什么,最简单的方法是开启调试选项,在请求中传入debug=true参数,激活DebugComponent,返回信息如下:
此外,在调试参数中还可以进一步指定返回的具体内容。与指定debug=true不同,如果指定debug=query,则只返回与查询解析器有关的部分调试信息。如果指定debug=results,则只返回相关度得分计算的解释内容。如果指定debug=timing,则只返回每个SearchComponent处理所花费的时间,这对调试执行较慢的请求很有帮助。