目录
自定义评分规则
脚本得分 (Script Score)
脚本得分允许你使用自定义的脚本来计算每个文档的得分。你可以编写一个 Painless 脚本(Elasticsearch 的默认脚本语言),根据文档中的字段值或其他条件来调整得分。
函数得分 (Function Score)
函数得分则提供了一种更结构化的方式来调整得分。它支持多种内置函数,如权重、衰减函数(高斯、线性、指数)、随机函数等。通过组合这些函数,可以实现复杂的评分逻辑。
示例详解
假设有一个图书库索引 library
,其中包含书籍的信息,包括标题 (title
) 和发布日期 (publish_date
)。我们希望为那些发布日期较新的书籍增加权重。
使用函数得分
javascript
GET /library/_search
{
"query": {
"function_score": {
"query": {
"match": {
"title": "love"
}
},
"functions": [
{
"gauss": {
"publish_date": {
"origin": "now",
"scale": "30d",
"offset": "7d",
"decay": 0.5
}
}
}
],
"score_mode": "multiply",
"boost_mode": "replace"
}
}
}
在这个例子中:
- 查询部分 :使用
match
查询查找标题中包含"love"的书籍。 - 函数部分 :使用
gauss
衰减函数来调整得分。origin
:衰减的中心点,这里设置为当前时间now
。scale
:控制衰减的速度,这里是 30 天。offset
:将衰减曲线向后移动 7 天。decay
:当距离达到scale
时,得分会衰减到初始值的 0.5 倍。
- score_mode :多个函数得分的合并方式,这里设置为
multiply
,即将各个函数得分相乘。 - boost_mode :最终得分的处理方式,
replace
表示用函数得分替换原始相关性得分。
原理详解
高斯衰减函数
高斯衰减函数是一种常用的平滑衰减方法。
得分模式 (Score Mode)
- multiply:将所有函数得分与原始相关性得分相乘。
- sum:将所有函数得分与原始相关性得分相加。
- avg:取所有函数得分的平均值。
- first:只使用第一个函数得分。
- max:取所有函数得分的最大值。
- min:取所有函数得分的最小值。
增强模式 (Boost Mode)
- multiply:将函数得分与原始相关性得分相乘。
- replace:用函数得分替换原始相关性得分。
- sum:将函数得分与原始相关性得分相加。
- avg:取函数得分与原始相关性得分的平均值。
- max:取函数得分与原始相关性得分的最大值。
- min:取函数得分与原始相关性得分的最小值。
其他函数类型
除了高斯衰减函数外,还有其他几种常见的函数类型:
- 线性衰减 (Linear Decay):基于线性函数进行衰减。
- 指数衰减 (Exponential Decay):基于指数函数进行衰减。
- 权重 (Weight):为每个文档分配固定的权重。
- 随机 (Random):为每个文档分配一个随机得分。
- 脚本 (Script):使用自定义脚本来计算得分。