使用多个排序子句解释Solr中的排序

时间:2017-01-17 20:42:24

标签: sorting solr lucene explain

想象一下,有一个带有多个排序子句的Solr请求(显然不是得分)。有没有办法弄清楚,对于每个找到的文件,哪些条款导致与邻居的关系,哪些实际上用于排序?我对一个条款特别感兴趣,并希望找到因此而重新排序的所有文件。

例如,我找到sort=A desc, B asc, C asc,找到了三个文档,我需要根据B asc找出重新排序的文档:

Doc 1: perhaps we skip it
Doc 2: "B asc" meaning it has same A value with Doc 1 and B was used as tie breaker.
Doc 3: "A desc" meaning it has different A value from Doc 2 and therefore B was never used for sorting.

显然,有很多方法可以解决这个问题。

  • 是否有解释类似机制的解释排序而非分数?
  • 有没有办法指定两个sort =参数,用两组不同的子句对相同的docset进行排序,让它们都作为响应,然后我可以比较docsets?
  • 是否有直接的方法为每对响应文档获取一个决定排序条款?
  • 也许有一些搜索组件可以做到这一点?写作有多难?
  • 当然,如果不这样做,我可能会做两个Solr请求(有和没有我关心的排序条款)并比较结果,显然我不想那样做性能......

1 个答案:

答案 0 :(得分:1)

我能想到的最近的事情是query re-ranking。因此,您可以使用 val 关键字将特殊排序转换为将预期查询转换为从字段值派生的分数。但这只适用于数字或函数。

此外,sort参数仍会覆盖,因为重新排名会影响原始分数。因此,您必须将所有内容都移到评分函数中。如果按文本字段排序,则可能会出现问题。

所以,这可能不值得做in-Solr。如果你可以用双重查询来做,它可能是最简单的前进道路。