🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# Rescoring 重新计算可以通过使用次要(通常是更昂贵的)算法来重新排序查询和 post_filter 阶段返回的顶部(例如100-500)个文档,而不是对索引中的所有文档应用昂贵的算法来帮助提高精度。 在返回其结果以由处理整个搜索请求的节点排序之前,在每个分片上执行 rescore 请求。 目前 rescore API 只有一个实现:查询 rescorer,它使用查询来调整评分。 在将来,可以提供备选的分配器,例如,成对分配器。 Note: 当使用排序时不执行 rescore 阶段。 Note: 当向用户展示分页时,您不应该在逐步浏览每个页面(通过传递不同的值)时更改window_size,因为这可能会改变顶部匹配,导致结果在用户逐步浏览页面时发生混乱。 ### Query rescorer 查询rescorer仅对查询和post_filter阶段返回的Top-K结果执行第二个查询。 将在每个分片上检查的文档数量可以由window_size参数控制,默认为from和size。 默认情况下,原始查询和rescore查询的分数线性组合,以产生每个文档的最终_score。 原始查询和rescore查询的相对重要性可以分别使用query_weight和rescore_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 | | --- | --- | | `total` | 添加原始分数和 rescore 查询分数。 默认值。 | | `multiply` | 将原始分数乘以 rescore 查询分数。 用于函数查询 rescores。 | | `avg` | 平均原始分数和 rescore 查询分数。 | | `max` | 取最初的分数和 rescore 查询分数。 | | `min` | 取最初的分数和 rescore 查询分数。 | ### Multiple Rescores 也可以按顺序执行多个资源: | `curl -s -XPOST ``'localhost:9200/_search'` `-d '{` `"query"` `: {` `"match"` `: {` `"field1"` `: {` `"operator"` `: ``"or"``,` `"query"` `: ``"the quick brown"``,` `"type"` `: ``"boolean"` `}` `}` `},` `"rescore"` `: [ {` `"window_size"` `: ``100``,` `"query"` `: {` `"rescore_query"` `: {` `"match"` `: {` `"field1"` `: {` `"query"` `: ``"the quick brown"``,` `"type"` `: ``"phrase"``,` `"slop"` `: ``2` `}` `}` `},` `"query_weight"` `: ``0.7``,` `"rescore_query_weight"` `: ``1.2` `}` `}, {` `"window_size"` `: ``10``,` `"query"` `: {` `"score_mode"``: ``"multiply"``,` `"rescore_query"` `: {` `"function_score"` `: {` `"script_score"``: {` `"script"``: {` `"lang"``: ``"painless"``,` `"inline"``: ``"Math.log10(doc['numeric'].value + 2)"` `}` `}` `}` `}` `}` `} ]` `}` `'` | 第一个获得查询的结果,第二个获得第一个的结果等。第二个 rescore 将 “see” 由第一个 rescore 完成排序,因此可以在第一个 rescore 上使用大窗口 将文档拖动到较小的窗口中,以便第二个文件。