美文网首页
elasticsearch 实现搜索引擎二次排序

elasticsearch 实现搜索引擎二次排序

作者: 郭彦超 | 来源:发表于2021-06-26 23:58 被阅读0次

    在商品搜索业务中经常会基于一些策略进行商品重排序,也就是在搜索相关度的基础上加入销量或者价格的排序因素

    为了实现上述目标,我们一般会基于function_score或script_score进行策略打分,但这种语法在高并发情况下会造成服务器CPU负载升高,为了解决此类问题,今天我们引入另一种重排序机制--rescore

    rescore重排序性能可以提升10-50倍,原因是rescore在重拍过程中并没有真正对全量数据进行二次打分,而是在主查询基础之上进行了顶部开窗的方式,先通过主查询的排序过滤出顶部数据,rescore通过window_size参数设置取数范围,只对该范围的数据进行二次排序

    • 一个简单的例子
      "query": {
         "bool": {
              "filter": [
                {
                  "term": {
                    "is_use": "1"
                  }
                } 
              ],
              "must": [
                {
                  "bool": {
                    "should": [
                      {
                        "multi_match": {
                          "query": "邀请函",
                          "fields": [
                            "title^1.0"
                          ],
                          "operator": "and",
                          "type": "most_fields",
                          "analyzer": "ik_smart"
                        }
                      }
                    ]
                  }
                }
              ],
              "should": [],
              "must_not": [ ]
            }
      },
      "rescore": [
        {
          "query": {
             "rescore_query" : {
                "function_score" : {
                  "functions": [
     
                  ]
                }
             }
          },
          "window_size": 50
        }
        
      ]
    
    
    • 参数说明

    • window_size
      二次排序商品的数量

    • query_weight
      在生成_score得分时主查询打分权重

    • rescore_query_weight
      在生成_score得分时rescore query打分权重

    • score_model
      主查询与rescore融合方式,支持:multiply、total、avg、min、max

    该语法的不足之处是无法与折叠语法collapse连用

    相关文章

      网友评论

          本文标题:elasticsearch 实现搜索引擎二次排序

          本文链接:https://www.haomeiwen.com/subject/fietultx.html