Elasticsearch--搜索进阶

查询二次评分

即对查询结果中的部分文档(top-N)进行第二次评分,改变排序顺序。此功能可以为定制业务逻辑提供可能,但是search_type是scan或者count时,不能使用二次评分。
下面是一个简单的查询例子

{
    "fields":["a","b"],
    "query":{
        "match_all":{ }
    },
    "rescore":{
        "query":{
            "rescore_query":{
                "function_score":{
                    "query":{
                        "match_all":{}
                    }
                },
                "script_score":{
                    "script":"doc['c'].value"
                }
            }
        }
    }
}

二次评分参数

可对rescore对象中的查询使用下面的这些参数

  1. window_size(默认from,size参数和):该参数指定了每个shard中需要二次评分的文档个数
  2. query_weight(默认是1):第一个查询的得分将乘以该参数值,之后再与二次评分查询得分相加
  3. rescore_query_weight(默认是1):在与第1个查询得分相加之前,二次评分查询得分将乘以该参数值

最终得分公式:original_query_score * query_weight + rescore_query_score * rescore_query_weight

评分模式

默认情况下,是两个评分之和,设置score_mode改变模式

  1. total:两个查询评分之和
  2. multiply:两个查询得分之积
  3. avg:两个查询得分的平均值
  4. max
  5. min

结语

因为二次评分只能改变返回结果中top-n个文档的排序(局部),所以并不能改变返回结果第1页的排序结果(第1页的概念应该是全局的),另外,二次评分不能与排序结合使用,排序在重新打分之前就结束了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值