参考自Elasticsearch 7.4版本官方文档 Function score query
Function score 查询
function_score
允许您修改查询检索的文档分数。例如,如果分数函数在计算上开销很大,并且足以在过滤后的文档集上计算分数,则此功能很有用。
要使用 function_score
,用户必须定义一个查询和一个或多个函数,这些函数为查询返回的每个文档计算一个新分数。
function_score
只能与以下这些函数一起使用:
GET /_search
{
"query": {
"function_score": {
"query": {
"match_all": {
} },
"boost": "5",
"random_score": {
}, // 有关支持的功能列表,请参见功能得分
"boost_mode":"multiply"
}
}
}
此外,可以组合几个函数功能。在这种情况下,可以选择仅在文档与给定的过滤查询匹配时才应用功能
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",
"boost_mode": "multiply",
"min_score" : 42
}
}
}
每个函数的过滤查询所产生的分数并不重要。
如果没有给函数提供过滤,则等效于指定 "match_all":{}
首先,每个文档通过定义的功能来评分。参数 score_mode
指定如何组合计算的分数:
score_mode | 意思 |
---|---|
multiply |
分数相乘 (默认) |
sum |
分数相加 |
avg |
平均值 |
first |
第一个函数匹配上的过滤器 |
max |
使用最高分 |
min |
使用最低分数 |
因为分数可以在不同的尺度上使用(例如,对于衰减函数,介于0和1之间&#x