rank子句

子句说明

rank子句帮助用户自定义打分逻辑,从而控制文档的返回顺序。

子句语法

{
  "rank" : {
    "ranking" : {
      "lang": "expression",
      "source" : "score_expression"
    },
    "reranking" : {
      "lang": "expression",
      "source" : "score_expression"
    }
  }
}

引擎的排序默认分为粗排和精排两个阶段,可以分别制定算分表达式控制各阶段的打分逻辑。其中ranking表示粗排算分,reranking表示精排算分。ranking与生效规则如下:

  • 仅指定ranking,精排分数为粗排分,文档最终的分数为精排分数。

  • 仅指定reranking,粗排默认为static_bm25()分数,精排使用reranking分数,文档最终的分数为精排分数。

  • 指定ranking与reranking,粗排使用ranking分数,精排使用reranking分数,文档最终的分数为精排分数。

  • 都不指定,粗排默认为static_bm25()分数,精排分数为粗排分,文档最终的分数为精排分数。

参数详解

  • lang:必选参数,算分脚本类型,目前仅支持expression。

  • source:必选参数,表达式内容,表达式为算数表达式,表达式的规则和可以使用的特征请参考排序表达式

注意事项

  • 如果返回的文档个数大于参与精排的文档个数,数据节点返回给查询节点的文档个数会大于参与精排的文档个数,会有部分文档的分数为粗排分。为了解决这一问题,引擎默认粗排分数小于10000,精排分数会加上10000。用户可以修改集群配置调整10000的限制。