推荐文章http://www.scienjus.com/elasticsearch-function-score-query/
function_score 是这种形式的DSL
单个函数模式
"function_score": {
"query": {},
"boost": "boost for the whole query",
"FUNCTION": {},
"boost_mode":"(multiply|replace|...)"
}
也可以同时使用多个函数, 通过filter筛选出来的文档会应用上对应的函数
多函数模式
"function_score": {
"query": {},
"boost": "boost for the whole query",
"functions": [
{
"filter": {},
"FUNCTION": {},
"weight": number
},
{
"FUNCTION": {}
},
{
"filter": {},
"weight": number
}
],
"max_boost": number,
"score_mode": "(multiply|max|...)",
"boost_mode": "(multiply|replace|...)",
"min_score" : number
}
score_mode 指定 如何将 函数算出的分数 和 原来分数 _score 合并起来
multiply
sum scores are summed
avg scores are averaged
first the first function that has a matching filter is applied
max maximum score is used
min minimum score is used
score_mode 表示多个函数之间的关系,
boost_mode 表示单个函数 应用 weight的计算关系
weight是权重,每个函数可以有一个权重weight,默认是相乘的关系。
举个例子,
在score_mode 是 avg 的情况下,如果两个函数返回的分数是1和2,它们的权重分别是3和4,那么最后的得分是 (1*3+2*4)/(3+4) 而不是(1*3+2*4)/2.
函数算出的新分数 被限定不能超过 max_boost, max_boost 的默认值是FLT_MAX
boost_mode的取值有
multiply
replace
sum
avg
max
min
min_score 这个字段没有理解。