可以在查询结束后,对每一个匹配的文档进行一系列的重新算分,根据新生成的分数进行排序。
默认提供的分值计算函数:
Weight:为每一个文档设置一个简单而不被规范化的权重
GET /_search
{
"query": {
"function_score": {
"query": { "match_all": {} },
"boost": "5",
"functions": [
{
"filter": { "match": { "test": "bar" } },
"random_score": {},
"weight": 23
},
{
"filter": { "match": { "test": "cat" } },
"weight": 42
}
],
"max_boost": 42,
"score_mode": "max",
// Multiply:算分与函数值的成乘积;sum:算分与函数的和;Min/Max:算分与函数值取最小/最大;replace:函数值取代算分
"boost_mode": "multiply",
"min_score": 42
}
}
}
Field Value Factor:使用该数值来修改_score,也提供了很多modifier函数(log,log1p等),例如将“热度”和“点赞数”作为算分的参考因素
新的算分 = 老的算分 * log(1+factor * votes)
GET /_search
{
"query": {
"function_score": {
"query": { "match_all": {} },
"field_value_factor":{
"field": "votes",
"modifier": "log1p",
"factor": 0.1
}
}
}
}
Random Score:为每一个用户使用一个不同的 随机算分结果
使用场景:网站的广告需要提高展现率,让每个用户看到不同的随机排名
POST blogs/_search
{
"query":{
"function_score":{
"random_score":{
"seed": 9119
}
}
}
}
- 衰减函数:以某个字段的值为标准,距离某个值越近,得分越高
- scrip Score:自定义脚本完全控制所需逻辑