查询重新排序

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

由于查询 B 中更昂贵的排序仅应用于前 N 个文档,因此与仅使用复杂查询 B 本身相比,它对性能的影响较小。权衡之处在于,即使使用查询 B 得分很高,使用简单查询 A 得分很低的文档在重新排序阶段也可能不会被考虑。

指定排序查询

可以使用 rq 请求参数指定排序查询。rq 参数必须指定一个查询字符串,当对其进行解析时,会生成一个 RankQuery

Solr 分发中当前包含三个排序查询。您还可以配置您编写的自定义 QParserPlugin,但大多数用户只需使用 Solr 提供的解析器即可。

解析器 QParserPlugin 类

rerank

ReRankQParserPlugin

xport

ExportQParserPlugin

ltr

LTRQParserPlugin

重新排序查询解析器

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

reRankQuery

必需

默认值:无

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

reRankDocs

可选

默认值:200

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

reRankWeight

可选

默认值:2.0

乘法因子,在将分数与原始分数合并之前,将应用于每个匹配度最高的文档的 reRankQuery 中的分数。

reRankScale

可选

默认值:

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

reRankMainScale

可选

默认值:

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

reRankOperator

可选

默认值:add

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

在下面使用默认 add 行为的示例中,将使用查询 “(hi hello hey hiya)” 重新对匹配查询 “greetings” 的前 1000 个文档进行排名。这 1000 个文档中每个文档的结果分数将是其来自 “(hi hello hey hiya)” 的分数的 3 倍,加上来自原始 “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 代表学习排名,有关更多详细信息,请参见 学习排名

将排名查询与其他 Solr 功能相结合

rq 参数和重新排序功能通常与其他 Solr 功能配合使用。例如,它可以与 折叠和展开结果 结合使用,以便在折叠组标题后重新对它们进行排序。它还保留了通过 查询提升组件 提升的文档的顺序。它甚至还有自己的自定义说明,以便在查看 调试信息 时了解重新排序分数的来源。