可以在查询结束后,对每一个匹配的文档进行一系列的重新算分,根据新生成的分数进行排序。
默认提供的分值计算函数:
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:自定义脚本完全控制所需逻辑
