美文网首页
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