查询重排序

查询重排序允许你运行一个简单的查询 (A) 来匹配文档,然后使用更复杂的查询 (B) 的分数对前 N 个文档进行重排序。

由于查询 B 中代价更高的排序仅应用于前 N 个文档,因此与单独使用复杂查询 B 相比,它对性能的影响较小。缺点是,即使使用查询 B 时得分很高,使用简单查询 A 得分非常低的文档也可能在重排序阶段不被考虑。

指定排名查询

可以使用 rq 请求参数指定排名查询。rq 参数必须指定一个查询字符串,该字符串在解析时会生成一个 RankQuery

Solr 发行版中目前包含三个排名查询。你还可以配置你编写的自定义 QParserPlugin,但大多数用户可以直接使用 Solr 提供的解析器。

解析器 QParserPlugin 类

rerank

ReRankQParserPlugin

xport

ExportQParserPlugin

ltr

LTRQParserPlugin

ReRank 查询解析器

rerank 解析器包装由本地参数指定的查询,以及指示应重排序多少文档以及应如何计算最终分数的其他参数

reRankQuery

必需

默认值:无

复杂排名查询的查询字符串 - 在大多数情况下,一个变量将用于引用另一个请求参数。

reRankDocs

可选

默认值:200

应重排序的原始查询中前 N 个文档的数量。此数字将被视为最小值,并且可能会在内部自动增加,以便对足够多的文档进行排名以满足查询(即,start+rows)。

reRankWeight

可选

默认值:2.0

一个乘法因子,它将应用于每个匹配的顶部文档的 reRankQuery 的分数,然后该分数将与原始分数合并。

reRankScale

可选

默认值:none

在最小值和最大值之间缩放重排分数。此参数值的格式为 min-max,其中 min 和 max 是正整数。例如 reRankScale=0-1 将重排分数重新缩放到 0 到 1 之间。

reRankMainScale

可选

默认值:none

在最小值和最大值之间缩放主查询分数。此参数值的格式为 min-max,其中 min 和 max 是正整数。例如 reRankMainScale=0-1 将主查询分数重新缩放到 0 到 1 之间。

reRankOperator

可选

默认值:add

默认情况下,reRankQuery 的分数乘以 reRankWeight 将添加到原始分数。

在下面的示例中使用默认的 add 行为,匹配查询“greetings”的前 1000 个文档将使用查询“(hi hello hey hiya)”进行重排序。这 1000 个文档中的每一个的最终分数将是它们从“(hi hello hey hiya)”中获得的分数的三倍,加上来自原始“greetings”查询的分数

q=greetings&rq={!rerank reRankQuery=$rqq reRankDocs=1000 reRankWeight=3}&rqq=(hi+hello+hey+hiya)

如果文档与原始查询匹配,但不与重排序查询匹配,则文档的原始分数将保持不变。

reRankOperator 设置为 multiply 将改为将三个数字相乘。这意味着其他乘法运算(例如 eDisMax boost 函数)可以转换为重排序操作。

在下面的示例中,匹配查询“phone”的前 1000 个文档的分数将乘以 price 字段的函数。

q=phone&rq={!rerank reRankQuery=$rqq reRankDocs=1000 reRankWeight=1 reRankOperator=multiply}&rqq={!func v=div(1,sum(1,price))}

reRankOperator 设置为 replace 将会替换得分,因此最终得分可以独立于文档的原始得分。

在下面的示例中,匹配查询“phone”的前 1000 个文档的得分将被替换为 price 字段的函数。

q=phone&rq={!rerank reRankQuery=$rqq reRankDocs=1000 reRankWeight=1 reRankOperator=replace}&rqq={!func v=div(1,sum(1,price))}

LTR 查询解析器

ltr 代表 Learning To Rank(学习排序),请参阅 学习排序 获取更详细的信息。

将排序查询与其他 Solr 功能结合使用

rq 参数和一般的重排序功能与其他 Solr 功能配合良好。例如,它可以与 折叠和展开结果 结合使用,在折叠后对组头进行重排序。它还保留了 查询提升组件 提升的文档的顺序。它甚至有自己的自定义解释,因此在查看 调试信息 时,你可以看到重排序得分是如何得出的。