Rescoring

在使用querypost_filter语法重新排序返回顶部文档时(例如100-500),使用二次算法(通常跟昂贵), 而不是将昂贵的算法应用于索引中的所有文档。Rescoring能帮助提升精度。

rescore请求将在每个分片上执行,然后返回其结果,以便由处理整个搜索请求的节点来进行排序。

目前rescoreAPI只有一个实现:query rescorer,它使用查询来调整评分。将来,可以提供备选的rescorer,例如,pair-wise rescorer

注意:

在使用sort时,rescore语法将不执行。

注意:

当向用户展示分页时,您不应该在逐步浏览每个页面(通过传递不同的值)时更改window_size,因为这可能会改变顶部匹配,导致结果在用户逐步浏览页面时发生混乱。

Query rescorer

Query rescorer仅对querypost_filter阶段返回的Top-K结果执行第二次查询。 在每个分片上检查的文档数量可以由window_size参数控制,默认为from和size

默认情况下,原始查询和rescore查询的分数线性组合,以产生每个文档的最终_score。 原始查询和rescore查询的相对重要性可以分别使用query_weightrescore_query_weight进行控制。 两者默认为1

例如:

curl -s -XPOST 'localhost:9200/_search' -d '{
   "query" : {
      "match" : {
         "field1" : {
            "operator" : "or",
            "query" : "the quick brown",
            "type" : "boolean"
         }
      }
   },
   "rescore" : {
      "window_size" : 50,
      "query" : {
         "rescore_query" : {
            "match" : {
               "field1" : {
                  "query" : "the quick brown",
                  "type" : "phrase",
                  "slop" : 2
               }
            }
         },
         "query_weight" : 0.7,
         "rescore_query_weight" : 1.2
      }
   }
}
'

组合得分的方式可以用score_mode控制:

Score Mode

Description

avg

平均原始分数和 rescore 查询分数。

max

取最初的分数和 rescore 查询分数。

min

取最初的分数和 rescore 查询分数。

multiply

将原始分数乘以 rescore 查询分数。 用于函数查询 rescores。

total

添加原始分数和 rescore 查询分数。 默认值。

Multiple Rescores

也可以按顺序执行多个rescores

第一个获得查询的结果,第二个获得第一个的结果等。第二个rescore将 “see” 由第一个rescore完成排序,因此可以在第一个rescore上使用大窗口 将文档拖动到较小的窗口中,以便第二个文件。

Last updated

Was this helpful?