通过Function Score Query优化Elasticsearch搜索结果

推荐文章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 这个字段没有理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值