算分与排序

2020-08-07  本文已影响0人  滴流乱转的小胖子

⽆法针对相关度,对排序实现更多的控制

一、Function Score Query

提供了⼏种默认的计算分值的函数

二、接受欢迎度提升权重 --- Field Value Factor 来举例

算分逻辑

新的算分 = 老的算分 * 投票数

DELETE blogs
PUT /blogs/_doc/1
{
  "title":   "About popularity",
  "content": "In this post we will talk about...",
  "votes":   0
}

PUT /blogs/_doc/2
{
  "title":   "About popularity",
  "content": "In this post we will talk about...",
  "votes":   100
}

PUT /blogs/_doc/3
{
  "title":   "About popularity",
  "content": "In this post we will talk about...",
  "votes":   1000000
}


POST /blogs/_search
{
  "query": {
    "function_score": {
      "query": {
        "multi_match": {
          "query":    "popularity",
          "fields": [ "title", "content" ]
        }
      },
      "field_value_factor": {
        "field": "votes"
      }
    }
  }
}

极端情况:

投票数 为 0
投票数很大时
算分的结果曲线,波动很大 --- 使用Modifier平滑曲线

POST /blogs/_search
{
  "query": {
    "function_score": {
      "query": {
        "multi_match": {
          "query":    "popularity",
          "fields": [ "title", "content" ]
        }
      },
      "field_value_factor": {
        "field": "votes",
        "modifier": "log1p"
      }
    }
  }
}

算分逻辑
新的算分 = 老的算分 * log(1 + 投票数)


image.png

三、引入Factor

算分逻辑
新的算分 = 老的算分 * log(1 + factor * 投票数)


image.png
image.png

四、Boost Mode 和 Max Boost

Boost Mode

Max Boost 可以将算分控制在⼀个最⼤值

POST /blogs/_search
{
  "query": {
    "function_score": {
      "query": {
        "multi_match": {
          "query":    "popularity",
          "fields": [ "title", "content" ]
        }
      },
      "field_value_factor": {
        "field": "votes",
        "modifier": "log1p" ,
        "factor": 0.1
      },
      "boost_mode": "sum",
      "max_boost": 3
    }
  }
}

五、一致性随机函数 --- 不以实际存在的字段进行排序,而已用随机数,随机数相同,排序结果相同

使用场景:网站的广告需要提高展现率
具体需求:让每个用户看到不同的随机排名,但是也希望用一个用户访问时,结果的相对顺序,保持一致
(consistently random)

POST /blogs/_search
{
  "query": {
    "function_score": {
      "random_score": {
        "seed": 911119
      }
    }
  }
}

https://www.elastic.co/guide/en/elasticsearch/reference/7.1/query-dsl-function-score-query.html

上一篇 下一篇

猜你喜欢

热点阅读